1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
4 ; Test all integer predicates with bool types and true/false constants.
5 ; Use vectors to provide test coverage that is not duplicated in other folds.
7 define <2 x i1> @eq_t(<2 x i1> %a) {
9 ; CHECK-NEXT: ret <2 x i1> [[A:%.*]]
11 %r = icmp eq <2 x i1> %a, <i1 true, i1 true>
15 define <2 x i1> @eq_t_undef_elt(<2 x i1> %a) {
16 ; CHECK-LABEL: @eq_t_undef_elt(
17 ; CHECK-NEXT: ret <2 x i1> [[A:%.*]]
19 %r = icmp eq <2 x i1> %a, <i1 undef, i1 true>
23 define <2 x i1> @eq_f(<2 x i1> %a) {
25 ; CHECK-NEXT: [[R:%.*]] = icmp eq <2 x i1> [[A:%.*]], zeroinitializer
26 ; CHECK-NEXT: ret <2 x i1> [[R]]
28 %r = icmp eq <2 x i1> %a, <i1 false, i1 false>
32 define <2 x i1> @ne_t(<2 x i1> %a) {
34 ; CHECK-NEXT: [[R:%.*]] = icmp ne <2 x i1> [[A:%.*]], <i1 true, i1 true>
35 ; CHECK-NEXT: ret <2 x i1> [[R]]
37 %r = icmp ne <2 x i1> %a, <i1 true, i1 true>
41 define <2 x i1> @ne_f(<2 x i1> %a) {
43 ; CHECK-NEXT: ret <2 x i1> [[A:%.*]]
45 %r = icmp ne <2 x i1> %a, <i1 false, i1 false>
49 define <2 x i1> @ugt_t(<2 x i1> %a) {
50 ; CHECK-LABEL: @ugt_t(
51 ; CHECK-NEXT: ret <2 x i1> zeroinitializer
53 %r = icmp ugt <2 x i1> %a, <i1 true, i1 true>
57 define <2 x i1> @ugt_t_undef_elt(<2 x i1> %a) {
58 ; CHECK-LABEL: @ugt_t_undef_elt(
59 ; CHECK-NEXT: ret <2 x i1> zeroinitializer
61 %r = icmp ugt <2 x i1> %a, <i1 true, i1 undef>
65 define <2 x i1> @ugt_f(<2 x i1> %a) {
66 ; CHECK-LABEL: @ugt_f(
67 ; CHECK-NEXT: ret <2 x i1> [[A:%.*]]
69 %r = icmp ugt <2 x i1> %a, <i1 false, i1 false>
73 define <2 x i1> @ult_t(<2 x i1> %a) {
74 ; CHECK-LABEL: @ult_t(
75 ; CHECK-NEXT: [[R:%.*]] = icmp ult <2 x i1> [[A:%.*]], <i1 true, i1 true>
76 ; CHECK-NEXT: ret <2 x i1> [[R]]
78 %r = icmp ult <2 x i1> %a, <i1 true, i1 true>
82 define <2 x i1> @ult_f(<2 x i1> %a) {
83 ; CHECK-LABEL: @ult_f(
84 ; CHECK-NEXT: ret <2 x i1> zeroinitializer
86 %r = icmp ult <2 x i1> %a, <i1 false, i1 false>
90 define <2 x i1> @sgt_t(<2 x i1> %a) {
91 ; CHECK-LABEL: @sgt_t(
92 ; CHECK-NEXT: [[R:%.*]] = icmp sgt <2 x i1> [[A:%.*]], <i1 true, i1 true>
93 ; CHECK-NEXT: ret <2 x i1> [[R]]
95 %r = icmp sgt <2 x i1> %a, <i1 true, i1 true>
99 define <2 x i1> @sgt_f(<2 x i1> %a) {
100 ; CHECK-LABEL: @sgt_f(
101 ; CHECK-NEXT: ret <2 x i1> zeroinitializer
103 %r = icmp sgt <2 x i1> %a, <i1 false, i1 false>
107 define <2 x i1> @slt_t(<2 x i1> %a) {
108 ; CHECK-LABEL: @slt_t(
109 ; CHECK-NEXT: ret <2 x i1> zeroinitializer
111 %r = icmp slt <2 x i1> %a, <i1 true, i1 true>
115 define <2 x i1> @slt_f(<2 x i1> %a) {
116 ; CHECK-LABEL: @slt_f(
117 ; CHECK-NEXT: ret <2 x i1> [[A:%.*]]
119 %r = icmp slt <2 x i1> %a, <i1 false, i1 false>
123 define <2 x i1> @uge_t(<2 x i1> %a) {
124 ; CHECK-LABEL: @uge_t(
125 ; CHECK-NEXT: ret <2 x i1> [[A:%.*]]
127 %r = icmp uge <2 x i1> %a, <i1 true, i1 true>
131 define <2 x i1> @uge_f(<2 x i1> %a) {
132 ; CHECK-LABEL: @uge_f(
133 ; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
135 %r = icmp uge <2 x i1> %a, <i1 false, i1 false>
139 define <2 x i1> @ule_t(<2 x i1> %a) {
140 ; CHECK-LABEL: @ule_t(
141 ; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
143 %r = icmp ule <2 x i1> %a, <i1 true, i1 true>
147 define <2 x i1> @ule_f(<2 x i1> %a) {
148 ; CHECK-LABEL: @ule_f(
149 ; CHECK-NEXT: [[R:%.*]] = icmp ule <2 x i1> [[A:%.*]], zeroinitializer
150 ; CHECK-NEXT: ret <2 x i1> [[R]]
152 %r = icmp ule <2 x i1> %a, <i1 false, i1 false>
156 define <2 x i1> @sge_t(<2 x i1> %a) {
157 ; CHECK-LABEL: @sge_t(
158 ; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
160 %r = icmp sge <2 x i1> %a, <i1 true, i1 true>
164 define <2 x i1> @sge_t_undef_elt(<2 x i1> %a) {
165 ; CHECK-LABEL: @sge_t_undef_elt(
166 ; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
168 %r = icmp sge <2 x i1> %a, <i1 true, i1 undef>
172 define <2 x i1> @sge_f(<2 x i1> %a) {
173 ; CHECK-LABEL: @sge_f(
174 ; CHECK-NEXT: [[R:%.*]] = icmp sge <2 x i1> [[A:%.*]], zeroinitializer
175 ; CHECK-NEXT: ret <2 x i1> [[R]]
177 %r = icmp sge <2 x i1> %a, <i1 false, i1 false>
181 define <2 x i1> @sle_t(<2 x i1> %a) {
182 ; CHECK-LABEL: @sle_t(
183 ; CHECK-NEXT: ret <2 x i1> [[A:%.*]]
185 %r = icmp sle <2 x i1> %a, <i1 true, i1 true>
189 define <2 x i1> @sle_f(<2 x i1> %a) {
190 ; CHECK-LABEL: @sle_f(
191 ; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
193 %r = icmp sle <2 x i1> %a, <i1 false, i1 false>