Mercurial > hg > CbC > CbC_llvm
comparison test/Transforms/InstCombine/exact.ll @ 120:1172e4bd9c6f
update 4.0.0
author | mir3636 |
---|---|
date | Fri, 25 Nov 2016 19:14:25 +0900 |
parents | 95c75e76d11b |
children | 803732b1fca8 |
comparison
equal
deleted
inserted
replaced
101:34baf5011add | 120:1172e4bd9c6f |
---|---|
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py | |
1 ; RUN: opt < %s -instcombine -S | FileCheck %s | 2 ; RUN: opt < %s -instcombine -S | FileCheck %s |
2 | 3 |
4 define i32 @sdiv1(i32 %x) { | |
3 ; CHECK-LABEL: @sdiv1( | 5 ; CHECK-LABEL: @sdiv1( |
4 ; CHECK: sdiv i32 %x, 8 | 6 ; CHECK-NEXT: [[Y:%.*]] = sdiv i32 %x, 8 |
5 define i32 @sdiv1(i32 %x) { | 7 ; CHECK-NEXT: ret i32 [[Y]] |
8 ; | |
6 %y = sdiv i32 %x, 8 | 9 %y = sdiv i32 %x, 8 |
7 ret i32 %y | 10 ret i32 %y |
8 } | 11 } |
9 | 12 |
13 define i32 @sdiv2(i32 %x) { | |
10 ; CHECK-LABEL: @sdiv2( | 14 ; CHECK-LABEL: @sdiv2( |
11 ; CHECK: ashr exact i32 %x, 3 | 15 ; CHECK-NEXT: [[Y:%.*]] = ashr exact i32 %x, 3 |
12 define i32 @sdiv2(i32 %x) { | 16 ; CHECK-NEXT: ret i32 [[Y]] |
17 ; | |
13 %y = sdiv exact i32 %x, 8 | 18 %y = sdiv exact i32 %x, 8 |
14 ret i32 %y | 19 ret i32 %y |
15 } | 20 } |
16 | 21 |
22 define <2 x i32> @sdiv2_vec(<2 x i32> %x) { | |
23 ; CHECK-LABEL: @sdiv2_vec( | |
24 ; CHECK-NEXT: [[Y:%.*]] = ashr exact <2 x i32> %x, <i32 7, i32 7> | |
25 ; CHECK-NEXT: ret <2 x i32> [[Y]] | |
26 ; | |
27 %y = sdiv exact <2 x i32> %x, <i32 128, i32 128> | |
28 ret <2 x i32> %y | |
29 } | |
30 | |
31 define i32 @sdiv3(i32 %x) { | |
17 ; CHECK-LABEL: @sdiv3( | 32 ; CHECK-LABEL: @sdiv3( |
18 ; CHECK: %y = srem i32 %x, 3 | 33 ; CHECK-NEXT: [[Y:%.*]] = srem i32 %x, 3 |
19 ; CHECK: %z = sub i32 %x, %y | 34 ; CHECK-NEXT: [[Z:%.*]] = sub i32 %x, [[Y]] |
20 ; CHECK: ret i32 %z | 35 ; CHECK-NEXT: ret i32 [[Z]] |
21 define i32 @sdiv3(i32 %x) { | 36 ; |
22 %y = sdiv i32 %x, 3 | 37 %y = sdiv i32 %x, 3 |
23 %z = mul i32 %y, 3 | 38 %z = mul i32 %y, 3 |
24 ret i32 %z | 39 ret i32 %z |
25 } | 40 } |
26 | 41 |
42 define i32 @sdiv4(i32 %x) { | |
27 ; CHECK-LABEL: @sdiv4( | 43 ; CHECK-LABEL: @sdiv4( |
28 ; CHECK: ret i32 %x | 44 ; CHECK-NEXT: ret i32 %x |
29 define i32 @sdiv4(i32 %x) { | 45 ; |
30 %y = sdiv exact i32 %x, 3 | 46 %y = sdiv exact i32 %x, 3 |
31 %z = mul i32 %y, 3 | 47 %z = mul i32 %y, 3 |
32 ret i32 %z | 48 ret i32 %z |
33 } | 49 } |
34 | 50 |
35 ; CHECK: i32 @sdiv5 | |
36 ; CHECK: %y = srem i32 %x, 3 | |
37 ; CHECK: %z = sub i32 %y, %x | |
38 ; CHECK: ret i32 %z | |
39 define i32 @sdiv5(i32 %x) { | 51 define i32 @sdiv5(i32 %x) { |
52 ; CHECK-LABEL: @sdiv5( | |
53 ; CHECK-NEXT: [[Y:%.*]] = srem i32 %x, 3 | |
54 ; CHECK-NEXT: [[Z:%.*]] = sub i32 [[Y]], %x | |
55 ; CHECK-NEXT: ret i32 [[Z]] | |
56 ; | |
40 %y = sdiv i32 %x, 3 | 57 %y = sdiv i32 %x, 3 |
41 %z = mul i32 %y, -3 | 58 %z = mul i32 %y, -3 |
42 ret i32 %z | 59 ret i32 %z |
43 } | 60 } |
44 | 61 |
62 define i32 @sdiv6(i32 %x) { | |
45 ; CHECK-LABEL: @sdiv6( | 63 ; CHECK-LABEL: @sdiv6( |
46 ; CHECK: %z = sub i32 0, %x | 64 ; CHECK-NEXT: [[Z:%.*]] = sub i32 0, %x |
47 ; CHECK: ret i32 %z | 65 ; CHECK-NEXT: ret i32 [[Z]] |
48 define i32 @sdiv6(i32 %x) { | 66 ; |
49 %y = sdiv exact i32 %x, 3 | 67 %y = sdiv exact i32 %x, 3 |
50 %z = mul i32 %y, -3 | 68 %z = mul i32 %y, -3 |
51 ret i32 %z | 69 ret i32 %z |
52 } | 70 } |
53 | 71 |
72 define i32 @udiv1(i32 %x, i32 %w) { | |
54 ; CHECK-LABEL: @udiv1( | 73 ; CHECK-LABEL: @udiv1( |
55 ; CHECK: ret i32 %x | 74 ; CHECK-NEXT: ret i32 %x |
56 define i32 @udiv1(i32 %x, i32 %w) { | 75 ; |
57 %y = udiv exact i32 %x, %w | 76 %y = udiv exact i32 %x, %w |
58 %z = mul i32 %y, %w | 77 %z = mul i32 %y, %w |
59 ret i32 %z | 78 ret i32 %z |
60 } | 79 } |
61 | 80 |
81 define i32 @udiv2(i32 %x, i32 %w) { | |
62 ; CHECK-LABEL: @udiv2( | 82 ; CHECK-LABEL: @udiv2( |
63 ; CHECK: %z = lshr exact i32 %x, %w | 83 ; CHECK-NEXT: [[Z:%.*]] = lshr exact i32 %x, %w |
64 ; CHECK: ret i32 %z | 84 ; CHECK-NEXT: ret i32 [[Z]] |
65 define i32 @udiv2(i32 %x, i32 %w) { | 85 ; |
66 %y = shl i32 1, %w | 86 %y = shl i32 1, %w |
67 %z = udiv exact i32 %x, %y | 87 %z = udiv exact i32 %x, %y |
68 ret i32 %z | 88 ret i32 %z |
69 } | 89 } |
70 | 90 |
91 define i64 @ashr1(i64 %X) nounwind { | |
71 ; CHECK-LABEL: @ashr1( | 92 ; CHECK-LABEL: @ashr1( |
72 ; CHECK: %B = ashr exact i64 %A, 2 | 93 ; CHECK-NEXT: [[A:%.*]] = shl i64 %X, 8 |
73 ; CHECK: ret i64 %B | 94 ; CHECK-NEXT: [[B:%.*]] = ashr exact i64 [[A]], 2 |
74 define i64 @ashr1(i64 %X) nounwind { | 95 ; CHECK-NEXT: ret i64 [[B]] |
96 ; | |
75 %A = shl i64 %X, 8 | 97 %A = shl i64 %X, 8 |
76 %B = ashr i64 %A, 2 ; X/4 | 98 %B = ashr i64 %A, 2 ; X/4 |
77 ret i64 %B | 99 ret i64 %B |
78 } | 100 } |
79 | 101 |
80 ; PR9120 | 102 ; PR9120 |
103 define i1 @ashr_icmp1(i64 %X) nounwind { | |
81 ; CHECK-LABEL: @ashr_icmp1( | 104 ; CHECK-LABEL: @ashr_icmp1( |
82 ; CHECK: %B = icmp eq i64 %X, 0 | 105 ; CHECK-NEXT: [[B:%.*]] = icmp eq i64 %X, 0 |
83 ; CHECK: ret i1 %B | 106 ; CHECK-NEXT: ret i1 [[B]] |
84 define i1 @ashr_icmp1(i64 %X) nounwind { | 107 ; |
85 %A = ashr exact i64 %X, 2 ; X/4 | 108 %A = ashr exact i64 %X, 2 ; X/4 |
86 %B = icmp eq i64 %A, 0 | 109 %B = icmp eq i64 %A, 0 |
87 ret i1 %B | 110 ret i1 %B |
88 } | 111 } |
89 | 112 |
113 define i1 @ashr_icmp2(i64 %X) { | |
90 ; CHECK-LABEL: @ashr_icmp2( | 114 ; CHECK-LABEL: @ashr_icmp2( |
91 ; CHECK: %Z = icmp slt i64 %X, 16 | 115 ; CHECK-NEXT: [[Z:%.*]] = icmp slt i64 %X, 16 |
92 ; CHECK: ret i1 %Z | 116 ; CHECK-NEXT: ret i1 [[Z]] |
93 define i1 @ashr_icmp2(i64 %X) nounwind { | 117 ; |
94 %Y = ashr exact i64 %X, 2 ; x / 4 | 118 %Y = ashr exact i64 %X, 2 ; x / 4 |
95 %Z = icmp slt i64 %Y, 4 ; x < 16 | 119 %Z = icmp slt i64 %Y, 4 ; x < 16 |
96 ret i1 %Z | 120 ret i1 %Z |
121 } | |
122 | |
123 define <2 x i1> @ashr_icmp2_vec(<2 x i64> %X) { | |
124 ; CHECK-LABEL: @ashr_icmp2_vec( | |
125 ; CHECK-NEXT: [[Z:%.*]] = icmp slt <2 x i64> %X, <i64 16, i64 16> | |
126 ; CHECK-NEXT: ret <2 x i1> [[Z]] | |
127 ; | |
128 %Y = ashr exact <2 x i64> %X, <i64 2, i64 2> | |
129 %Z = icmp slt <2 x i64> %Y, <i64 4, i64 4> | |
130 ret <2 x i1> %Z | |
97 } | 131 } |
98 | 132 |
99 ; PR9998 | 133 ; PR9998 |
100 ; Make sure we don't transform the ashr here into an sdiv | 134 ; Make sure we don't transform the ashr here into an sdiv |
135 define i1 @pr9998(i32 %V) { | |
101 ; CHECK-LABEL: @pr9998( | 136 ; CHECK-LABEL: @pr9998( |
102 ; CHECK: [[BIT:%[A-Za-z0-9.]+]] = and i32 %V, 1 | 137 ; CHECK-NEXT: [[W_MASK:%.*]] = and i32 %V, 1 |
103 ; CHECK-NEXT: [[CMP:%[A-Za-z0-9.]+]] = icmp ne i32 [[BIT]], 0 | 138 ; CHECK-NEXT: [[Z:%.*]] = icmp ne i32 [[W_MASK]], 0 |
104 ; CHECK-NEXT: ret i1 [[CMP]] | 139 ; CHECK-NEXT: ret i1 [[Z]] |
105 define i1 @pr9998(i32 %V) nounwind { | 140 ; |
106 entry: | |
107 %W = shl i32 %V, 31 | 141 %W = shl i32 %V, 31 |
108 %X = ashr exact i32 %W, 31 | 142 %X = ashr exact i32 %W, 31 |
109 %Y = sext i32 %X to i64 | 143 %Y = sext i32 %X to i64 |
110 %Z = icmp ugt i64 %Y, 7297771788697658747 | 144 %Z = icmp ugt i64 %Y, 7297771788697658747 |
111 ret i1 %Z | 145 ret i1 %Z |
112 } | 146 } |
113 | 147 |
114 | 148 ; FIXME: Vectors should fold the same way. |
115 | 149 define <2 x i1> @pr9998vec(<2 x i32> %V) { |
150 ; CHECK-LABEL: @pr9998vec( | |
151 ; CHECK-NEXT: [[W:%.*]] = shl <2 x i32> %V, <i32 31, i32 31> | |
152 ; CHECK-NEXT: [[X:%.*]] = ashr exact <2 x i32> [[W]], <i32 31, i32 31> | |
153 ; CHECK-NEXT: [[Y:%.*]] = sext <2 x i32> [[X]] to <2 x i64> | |
154 ; CHECK-NEXT: [[Z:%.*]] = icmp ugt <2 x i64> [[Y]], <i64 7297771788697658747, i64 7297771788697658747> | |
155 ; CHECK-NEXT: ret <2 x i1> [[Z]] | |
156 ; | |
157 %W = shl <2 x i32> %V, <i32 31, i32 31> | |
158 %X = ashr exact <2 x i32> %W, <i32 31, i32 31> | |
159 %Y = sext <2 x i32> %X to <2 x i64> | |
160 %Z = icmp ugt <2 x i64> %Y, <i64 7297771788697658747, i64 7297771788697658747> | |
161 ret <2 x i1> %Z | |
162 } | |
163 | |
164 define i1 @udiv_icmp1(i64 %X) { | |
116 ; CHECK-LABEL: @udiv_icmp1( | 165 ; CHECK-LABEL: @udiv_icmp1( |
117 ; CHECK: icmp ne i64 %X, 0 | 166 ; CHECK-NEXT: [[TMP1:%.*]] = icmp ne i64 %X, 0 |
118 define i1 @udiv_icmp1(i64 %X) nounwind { | 167 ; CHECK-NEXT: ret i1 [[TMP1]] |
168 ; | |
119 %A = udiv exact i64 %X, 5 ; X/5 | 169 %A = udiv exact i64 %X, 5 ; X/5 |
120 %B = icmp ne i64 %A, 0 | 170 %B = icmp ne i64 %A, 0 |
121 ret i1 %B | 171 ret i1 %B |
122 } | 172 } |
123 | 173 |
174 define <2 x i1> @udiv_icmp1_vec(<2 x i64> %X) { | |
175 ; CHECK-LABEL: @udiv_icmp1_vec( | |
176 ; CHECK-NEXT: [[TMP1:%.*]] = icmp ne <2 x i64> %X, zeroinitializer | |
177 ; CHECK-NEXT: ret <2 x i1> [[TMP1]] | |
178 ; | |
179 %A = udiv exact <2 x i64> %X, <i64 5, i64 5> | |
180 %B = icmp ne <2 x i64> %A, zeroinitializer | |
181 ret <2 x i1> %B | |
182 } | |
183 | |
184 define i1 @udiv_icmp2(i64 %X) { | |
185 ; CHECK-LABEL: @udiv_icmp2( | |
186 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, 0 | |
187 ; CHECK-NEXT: ret i1 [[TMP1]] | |
188 ; | |
189 %A = udiv exact i64 %X, 5 ; X/5 == 0 --> x == 0 | |
190 %B = icmp eq i64 %A, 0 | |
191 ret i1 %B | |
192 } | |
193 | |
194 define <2 x i1> @udiv_icmp2_vec(<2 x i64> %X) { | |
195 ; CHECK-LABEL: @udiv_icmp2_vec( | |
196 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, zeroinitializer | |
197 ; CHECK-NEXT: ret <2 x i1> [[TMP1]] | |
198 ; | |
199 %A = udiv exact <2 x i64> %X, <i64 5, i64 5> | |
200 %B = icmp eq <2 x i64> %A, zeroinitializer | |
201 ret <2 x i1> %B | |
202 } | |
203 | |
204 define i1 @sdiv_icmp1(i64 %X) { | |
124 ; CHECK-LABEL: @sdiv_icmp1( | 205 ; CHECK-LABEL: @sdiv_icmp1( |
125 ; CHECK: icmp eq i64 %X, 0 | 206 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, 0 |
126 define i1 @sdiv_icmp1(i64 %X) nounwind { | 207 ; CHECK-NEXT: ret i1 [[TMP1]] |
208 ; | |
127 %A = sdiv exact i64 %X, 5 ; X/5 == 0 --> x == 0 | 209 %A = sdiv exact i64 %X, 5 ; X/5 == 0 --> x == 0 |
128 %B = icmp eq i64 %A, 0 | 210 %B = icmp eq i64 %A, 0 |
129 ret i1 %B | 211 ret i1 %B |
130 } | 212 } |
131 | 213 |
214 define <2 x i1> @sdiv_icmp1_vec(<2 x i64> %X) { | |
215 ; CHECK-LABEL: @sdiv_icmp1_vec( | |
216 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, zeroinitializer | |
217 ; CHECK-NEXT: ret <2 x i1> [[TMP1]] | |
218 ; | |
219 %A = sdiv exact <2 x i64> %X, <i64 5, i64 5> | |
220 %B = icmp eq <2 x i64> %A, zeroinitializer | |
221 ret <2 x i1> %B | |
222 } | |
223 | |
224 define i1 @sdiv_icmp2(i64 %X) { | |
132 ; CHECK-LABEL: @sdiv_icmp2( | 225 ; CHECK-LABEL: @sdiv_icmp2( |
133 ; CHECK: icmp eq i64 %X, 5 | 226 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, 5 |
134 define i1 @sdiv_icmp2(i64 %X) nounwind { | 227 ; CHECK-NEXT: ret i1 [[TMP1]] |
228 ; | |
135 %A = sdiv exact i64 %X, 5 ; X/5 == 1 --> x == 5 | 229 %A = sdiv exact i64 %X, 5 ; X/5 == 1 --> x == 5 |
136 %B = icmp eq i64 %A, 1 | 230 %B = icmp eq i64 %A, 1 |
137 ret i1 %B | 231 ret i1 %B |
138 } | 232 } |
139 | 233 |
234 define <2 x i1> @sdiv_icmp2_vec(<2 x i64> %X) { | |
235 ; CHECK-LABEL: @sdiv_icmp2_vec( | |
236 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, <i64 5, i64 5> | |
237 ; CHECK-NEXT: ret <2 x i1> [[TMP1]] | |
238 ; | |
239 %A = sdiv exact <2 x i64> %X, <i64 5, i64 5> | |
240 %B = icmp eq <2 x i64> %A, <i64 1, i64 1> | |
241 ret <2 x i1> %B | |
242 } | |
243 | |
244 define i1 @sdiv_icmp3(i64 %X) { | |
140 ; CHECK-LABEL: @sdiv_icmp3( | 245 ; CHECK-LABEL: @sdiv_icmp3( |
141 ; CHECK: icmp eq i64 %X, -5 | 246 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, -5 |
142 define i1 @sdiv_icmp3(i64 %X) nounwind { | 247 ; CHECK-NEXT: ret i1 [[TMP1]] |
248 ; | |
143 %A = sdiv exact i64 %X, 5 ; X/5 == -1 --> x == -5 | 249 %A = sdiv exact i64 %X, 5 ; X/5 == -1 --> x == -5 |
144 %B = icmp eq i64 %A, -1 | 250 %B = icmp eq i64 %A, -1 |
145 ret i1 %B | 251 ret i1 %B |
146 } | 252 } |
147 | 253 |
254 define <2 x i1> @sdiv_icmp3_vec(<2 x i64> %X) { | |
255 ; CHECK-LABEL: @sdiv_icmp3_vec( | |
256 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, <i64 -5, i64 -5> | |
257 ; CHECK-NEXT: ret <2 x i1> [[TMP1]] | |
258 ; | |
259 %A = sdiv exact <2 x i64> %X, <i64 5, i64 5> | |
260 %B = icmp eq <2 x i64> %A, <i64 -1, i64 -1> | |
261 ret <2 x i1> %B | |
262 } | |
263 | |
264 define i1 @sdiv_icmp4(i64 %X) { | |
148 ; CHECK-LABEL: @sdiv_icmp4( | 265 ; CHECK-LABEL: @sdiv_icmp4( |
149 ; CHECK: icmp eq i64 %X, 0 | 266 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, 0 |
150 define i1 @sdiv_icmp4(i64 %X) nounwind { | 267 ; CHECK-NEXT: ret i1 [[TMP1]] |
268 ; | |
151 %A = sdiv exact i64 %X, -5 ; X/-5 == 0 --> x == 0 | 269 %A = sdiv exact i64 %X, -5 ; X/-5 == 0 --> x == 0 |
152 %B = icmp eq i64 %A, 0 | 270 %B = icmp eq i64 %A, 0 |
153 ret i1 %B | 271 ret i1 %B |
154 } | 272 } |
155 | 273 |
274 define <2 x i1> @sdiv_icmp4_vec(<2 x i64> %X) { | |
275 ; CHECK-LABEL: @sdiv_icmp4_vec( | |
276 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, zeroinitializer | |
277 ; CHECK-NEXT: ret <2 x i1> [[TMP1]] | |
278 ; | |
279 %A = sdiv exact <2 x i64> %X, <i64 -5, i64 -5> | |
280 %B = icmp eq <2 x i64> %A, zeroinitializer | |
281 ret <2 x i1> %B | |
282 } | |
283 | |
284 define i1 @sdiv_icmp5(i64 %X) { | |
156 ; CHECK-LABEL: @sdiv_icmp5( | 285 ; CHECK-LABEL: @sdiv_icmp5( |
157 ; CHECK: icmp eq i64 %X, -5 | 286 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, -5 |
158 define i1 @sdiv_icmp5(i64 %X) nounwind { | 287 ; CHECK-NEXT: ret i1 [[TMP1]] |
288 ; | |
159 %A = sdiv exact i64 %X, -5 ; X/-5 == 1 --> x == -5 | 289 %A = sdiv exact i64 %X, -5 ; X/-5 == 1 --> x == -5 |
160 %B = icmp eq i64 %A, 1 | 290 %B = icmp eq i64 %A, 1 |
161 ret i1 %B | 291 ret i1 %B |
162 } | 292 } |
163 | 293 |
294 define <2 x i1> @sdiv_icmp5_vec(<2 x i64> %X) { | |
295 ; CHECK-LABEL: @sdiv_icmp5_vec( | |
296 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, <i64 -5, i64 -5> | |
297 ; CHECK-NEXT: ret <2 x i1> [[TMP1]] | |
298 ; | |
299 %A = sdiv exact <2 x i64> %X, <i64 -5, i64 -5> | |
300 %B = icmp eq <2 x i64> %A, <i64 1, i64 1> | |
301 ret <2 x i1> %B | |
302 } | |
303 | |
304 define i1 @sdiv_icmp6(i64 %X) { | |
164 ; CHECK-LABEL: @sdiv_icmp6( | 305 ; CHECK-LABEL: @sdiv_icmp6( |
165 ; CHECK: icmp eq i64 %X, 5 | 306 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, 5 |
166 define i1 @sdiv_icmp6(i64 %X) nounwind { | 307 ; CHECK-NEXT: ret i1 [[TMP1]] |
167 %A = sdiv exact i64 %X, -5 ; X/-5 == 1 --> x == 5 | 308 ; |
309 %A = sdiv exact i64 %X, -5 ; X/-5 == -1 --> x == 5 | |
168 %B = icmp eq i64 %A, -1 | 310 %B = icmp eq i64 %A, -1 |
169 ret i1 %B | 311 ret i1 %B |
170 } | 312 } |
171 | 313 |
314 define <2 x i1> @sdiv_icmp6_vec(<2 x i64> %X) { | |
315 ; CHECK-LABEL: @sdiv_icmp6_vec( | |
316 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, <i64 5, i64 5> | |
317 ; CHECK-NEXT: ret <2 x i1> [[TMP1]] | |
318 ; | |
319 %A = sdiv exact <2 x i64> %X, <i64 -5, i64 -5> | |
320 %B = icmp eq <2 x i64> %A, <i64 -1, i64 -1> | |
321 ret <2 x i1> %B | |
322 } | |
323 |