1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -instcombine -S | FileCheck %s
3 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
5 define double @test_sqrt_sd_0(double %a) {
6 ; CHECK-LABEL: @test_sqrt_sd_0(
7 ; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.sqrt.f64(double %a)
8 ; CHECK-NEXT: ret double [[TMP1]]
10 %1 = insertelement <2 x double> undef, double %a, i32 0
11 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
12 %3 = tail call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %2)
13 %4 = extractelement <2 x double> %3, i32 0
17 define double @test_sqrt_sd_1(double %a) {
18 ; CHECK-LABEL: @test_sqrt_sd_1(
19 ; CHECK-NEXT: ret double 1.000000e+00
21 %1 = insertelement <2 x double> undef, double %a, i32 0
22 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
23 %3 = tail call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %2)
24 %4 = extractelement <2 x double> %3, i32 1
28 define double @test_add_sd_0(double %a, double %b) {
29 ; CHECK-LABEL: @test_add_sd_0(
30 ; CHECK-NEXT: [[TMP1:%.*]] = fadd double %a, %b
31 ; CHECK-NEXT: ret double [[TMP1]]
33 %1 = insertelement <2 x double> undef, double %a, i32 0
34 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
35 %3 = insertelement <2 x double> undef, double %b, i32 0
36 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
37 %5 = tail call <2 x double> @llvm.x86.sse2.add.sd(<2 x double> %2, <2 x double> %4)
38 %6 = extractelement <2 x double> %5, i32 0
42 define double @test_add_sd_1(double %a, double %b) {
43 ; CHECK-LABEL: @test_add_sd_1(
44 ; CHECK-NEXT: ret double 1.000000e+00
46 %1 = insertelement <2 x double> undef, double %a, i32 0
47 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
48 %3 = insertelement <2 x double> undef, double %b, i32 0
49 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
50 %5 = tail call <2 x double> @llvm.x86.sse2.add.sd(<2 x double> %2, <2 x double> %4)
51 %6 = extractelement <2 x double> %5, i32 1
55 define double @test_sub_sd_0(double %a, double %b) {
56 ; CHECK-LABEL: @test_sub_sd_0(
57 ; CHECK-NEXT: [[TMP1:%.*]] = fsub double %a, %b
58 ; CHECK-NEXT: ret double [[TMP1]]
60 %1 = insertelement <2 x double> undef, double %a, i32 0
61 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
62 %3 = insertelement <2 x double> undef, double %b, i32 0
63 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
64 %5 = tail call <2 x double> @llvm.x86.sse2.sub.sd(<2 x double> %2, <2 x double> %4)
65 %6 = extractelement <2 x double> %5, i32 0
69 define double @test_sub_sd_1(double %a, double %b) {
70 ; CHECK-LABEL: @test_sub_sd_1(
71 ; CHECK-NEXT: ret double 1.000000e+00
73 %1 = insertelement <2 x double> undef, double %a, i32 0
74 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
75 %3 = insertelement <2 x double> undef, double %b, i32 0
76 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
77 %5 = tail call <2 x double> @llvm.x86.sse2.sub.sd(<2 x double> %2, <2 x double> %4)
78 %6 = extractelement <2 x double> %5, i32 1
82 define double @test_mul_sd_0(double %a, double %b) {
83 ; CHECK-LABEL: @test_mul_sd_0(
84 ; CHECK-NEXT: [[TMP1:%.*]] = fmul double %a, %b
85 ; CHECK-NEXT: ret double [[TMP1]]
87 %1 = insertelement <2 x double> undef, double %a, i32 0
88 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
89 %3 = insertelement <2 x double> undef, double %b, i32 0
90 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
91 %5 = tail call <2 x double> @llvm.x86.sse2.mul.sd(<2 x double> %2, <2 x double> %4)
92 %6 = extractelement <2 x double> %5, i32 0
96 define double @test_mul_sd_1(double %a, double %b) {
97 ; CHECK-LABEL: @test_mul_sd_1(
98 ; CHECK-NEXT: ret double 1.000000e+00
100 %1 = insertelement <2 x double> undef, double %a, i32 0
101 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
102 %3 = insertelement <2 x double> undef, double %b, i32 0
103 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
104 %5 = tail call <2 x double> @llvm.x86.sse2.mul.sd(<2 x double> %2, <2 x double> %4)
105 %6 = extractelement <2 x double> %5, i32 1
109 define double @test_div_sd_0(double %a, double %b) {
110 ; CHECK-LABEL: @test_div_sd_0(
111 ; CHECK-NEXT: [[TMP1:%.*]] = fdiv double %a, %b
112 ; CHECK-NEXT: ret double [[TMP1]]
114 %1 = insertelement <2 x double> undef, double %a, i32 0
115 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
116 %3 = insertelement <2 x double> undef, double %b, i32 0
117 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
118 %5 = tail call <2 x double> @llvm.x86.sse2.div.sd(<2 x double> %2, <2 x double> %4)
119 %6 = extractelement <2 x double> %5, i32 0
123 define double @test_div_sd_1(double %a, double %b) {
124 ; CHECK-LABEL: @test_div_sd_1(
125 ; CHECK-NEXT: ret double 1.000000e+00
127 %1 = insertelement <2 x double> undef, double %a, i32 0
128 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
129 %3 = insertelement <2 x double> undef, double %b, i32 0
130 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
131 %5 = tail call <2 x double> @llvm.x86.sse2.div.sd(<2 x double> %2, <2 x double> %4)
132 %6 = extractelement <2 x double> %5, i32 1
136 define <2 x double> @test_min_sd(<2 x double> %a, <2 x double> %b) {
137 ; CHECK-LABEL: @test_min_sd(
138 ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %a, <2 x double> %b)
139 ; CHECK-NEXT: ret <2 x double> [[TMP1]]
141 %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1
142 %2 = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %a, <2 x double> %1)
146 define double @test_min_sd_0(double %a, double %b) {
147 ; CHECK-LABEL: @test_min_sd_0(
148 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
149 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
150 ; CHECK-NEXT: [[TMP3:%.*]] = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
151 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x double> [[TMP3]], i32 0
152 ; CHECK-NEXT: ret double [[TMP4]]
154 %1 = insertelement <2 x double> undef, double %a, i32 0
155 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
156 %3 = insertelement <2 x double> undef, double %b, i32 0
157 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
158 %5 = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %2, <2 x double> %4)
159 %6 = extractelement <2 x double> %5, i32 0
163 define double @test_min_sd_1(double %a, double %b) {
164 ; CHECK-LABEL: @test_min_sd_1(
165 ; CHECK-NEXT: ret double 1.000000e+00
167 %1 = insertelement <2 x double> undef, double %a, i32 0
168 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
169 %3 = insertelement <2 x double> undef, double %b, i32 0
170 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
171 %5 = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %2, <2 x double> %4)
172 %6 = extractelement <2 x double> %5, i32 1
176 define <2 x double> @test_max_sd(<2 x double> %a, <2 x double> %b) {
177 ; CHECK-LABEL: @test_max_sd(
178 ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %a, <2 x double> %b)
179 ; CHECK-NEXT: ret <2 x double> [[TMP1]]
181 %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1
182 %2 = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %a, <2 x double> %1)
186 define double @test_max_sd_0(double %a, double %b) {
187 ; CHECK-LABEL: @test_max_sd_0(
188 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
189 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
190 ; CHECK-NEXT: [[TMP3:%.*]] = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
191 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x double> [[TMP3]], i32 0
192 ; CHECK-NEXT: ret double [[TMP4]]
194 %1 = insertelement <2 x double> undef, double %a, i32 0
195 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
196 %3 = insertelement <2 x double> undef, double %b, i32 0
197 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
198 %5 = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %2, <2 x double> %4)
199 %6 = extractelement <2 x double> %5, i32 0
203 define double @test_max_sd_1(double %a, double %b) {
204 ; CHECK-LABEL: @test_max_sd_1(
205 ; CHECK-NEXT: ret double 1.000000e+00
207 %1 = insertelement <2 x double> undef, double %a, i32 0
208 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
209 %3 = insertelement <2 x double> undef, double %b, i32 0
210 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
211 %5 = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %2, <2 x double> %4)
212 %6 = extractelement <2 x double> %5, i32 1
216 define <2 x double> @test_cmp_sd(<2 x double> %a, <2 x double> %b) {
217 ; CHECK-LABEL: @test_cmp_sd(
218 ; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %a, <2 x double> %b, i8 0)
219 ; CHECK-NEXT: ret <2 x double> [[TMP1]]
221 %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1
222 %2 = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %a, <2 x double> %1, i8 0)
226 define double @test_cmp_sd_0(double %a, double %b) {
227 ; CHECK-LABEL: @test_cmp_sd_0(
228 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
229 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
230 ; CHECK-NEXT: [[TMP3:%.*]] = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]], i8 0)
231 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x double> [[TMP3]], i32 0
232 ; CHECK-NEXT: ret double [[TMP4]]
234 %1 = insertelement <2 x double> undef, double %a, i32 0
235 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
236 %3 = insertelement <2 x double> undef, double %b, i32 0
237 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
238 %5 = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %2, <2 x double> %4, i8 0)
239 %6 = extractelement <2 x double> %5, i32 0
243 define double @test_cmp_sd_1(double %a, double %b) {
244 ; CHECK-LABEL: @test_cmp_sd_1(
245 ; CHECK-NEXT: ret double 1.000000e+00
247 %1 = insertelement <2 x double> undef, double %a, i32 0
248 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
249 %3 = insertelement <2 x double> undef, double %b, i32 0
250 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
251 %5 = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %2, <2 x double> %4, i8 0)
252 %6 = extractelement <2 x double> %5, i32 1
256 define i32 @test_comieq_sd_0(double %a, double %b) {
257 ; CHECK-LABEL: @test_comieq_sd_0(
258 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
259 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
260 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comieq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
261 ; CHECK-NEXT: ret i32 [[TMP3]]
263 %1 = insertelement <2 x double> undef, double %a, i32 0
264 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
265 %3 = insertelement <2 x double> undef, double %b, i32 0
266 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
267 %5 = tail call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %2, <2 x double> %4)
271 define i32 @test_comige_sd_0(double %a, double %b) {
272 ; CHECK-LABEL: @test_comige_sd_0(
273 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
274 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
275 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comige.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
276 ; CHECK-NEXT: ret i32 [[TMP3]]
278 %1 = insertelement <2 x double> undef, double %a, i32 0
279 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
280 %3 = insertelement <2 x double> undef, double %b, i32 0
281 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
282 %5 = tail call i32 @llvm.x86.sse2.comige.sd(<2 x double> %2, <2 x double> %4)
286 define i32 @test_comigt_sd_0(double %a, double %b) {
287 ; CHECK-LABEL: @test_comigt_sd_0(
288 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
289 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
290 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comigt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
291 ; CHECK-NEXT: ret i32 [[TMP3]]
293 %1 = insertelement <2 x double> undef, double %a, i32 0
294 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
295 %3 = insertelement <2 x double> undef, double %b, i32 0
296 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
297 %5 = tail call i32 @llvm.x86.sse2.comigt.sd(<2 x double> %2, <2 x double> %4)
301 define i32 @test_comile_sd_0(double %a, double %b) {
302 ; CHECK-LABEL: @test_comile_sd_0(
303 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
304 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
305 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comile.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
306 ; CHECK-NEXT: ret i32 [[TMP3]]
308 %1 = insertelement <2 x double> undef, double %a, i32 0
309 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
310 %3 = insertelement <2 x double> undef, double %b, i32 0
311 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
312 %5 = tail call i32 @llvm.x86.sse2.comile.sd(<2 x double> %2, <2 x double> %4)
316 define i32 @test_comilt_sd_0(double %a, double %b) {
317 ; CHECK-LABEL: @test_comilt_sd_0(
318 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
319 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
320 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comilt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
321 ; CHECK-NEXT: ret i32 [[TMP3]]
323 %1 = insertelement <2 x double> undef, double %a, i32 0
324 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
325 %3 = insertelement <2 x double> undef, double %b, i32 0
326 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
327 %5 = tail call i32 @llvm.x86.sse2.comilt.sd(<2 x double> %2, <2 x double> %4)
331 define i32 @test_comineq_sd_0(double %a, double %b) {
332 ; CHECK-LABEL: @test_comineq_sd_0(
333 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
334 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
335 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comineq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
336 ; CHECK-NEXT: ret i32 [[TMP3]]
338 %1 = insertelement <2 x double> undef, double %a, i32 0
339 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
340 %3 = insertelement <2 x double> undef, double %b, i32 0
341 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
342 %5 = tail call i32 @llvm.x86.sse2.comineq.sd(<2 x double> %2, <2 x double> %4)
346 define i32 @test_ucomieq_sd_0(double %a, double %b) {
347 ; CHECK-LABEL: @test_ucomieq_sd_0(
348 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
349 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
350 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
351 ; CHECK-NEXT: ret i32 [[TMP3]]
353 %1 = insertelement <2 x double> undef, double %a, i32 0
354 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
355 %3 = insertelement <2 x double> undef, double %b, i32 0
356 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
357 %5 = tail call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %2, <2 x double> %4)
361 define i32 @test_ucomige_sd_0(double %a, double %b) {
362 ; CHECK-LABEL: @test_ucomige_sd_0(
363 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
364 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
365 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomige.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
366 ; CHECK-NEXT: ret i32 [[TMP3]]
368 %1 = insertelement <2 x double> undef, double %a, i32 0
369 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
370 %3 = insertelement <2 x double> undef, double %b, i32 0
371 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
372 %5 = tail call i32 @llvm.x86.sse2.ucomige.sd(<2 x double> %2, <2 x double> %4)
376 define i32 @test_ucomigt_sd_0(double %a, double %b) {
377 ; CHECK-LABEL: @test_ucomigt_sd_0(
378 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
379 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
380 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomigt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
381 ; CHECK-NEXT: ret i32 [[TMP3]]
383 %1 = insertelement <2 x double> undef, double %a, i32 0
384 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
385 %3 = insertelement <2 x double> undef, double %b, i32 0
386 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
387 %5 = tail call i32 @llvm.x86.sse2.ucomigt.sd(<2 x double> %2, <2 x double> %4)
391 define i32 @test_ucomile_sd_0(double %a, double %b) {
392 ; CHECK-LABEL: @test_ucomile_sd_0(
393 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
394 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
395 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomile.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
396 ; CHECK-NEXT: ret i32 [[TMP3]]
398 %1 = insertelement <2 x double> undef, double %a, i32 0
399 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
400 %3 = insertelement <2 x double> undef, double %b, i32 0
401 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
402 %5 = tail call i32 @llvm.x86.sse2.ucomile.sd(<2 x double> %2, <2 x double> %4)
406 define i32 @test_ucomilt_sd_0(double %a, double %b) {
407 ; CHECK-LABEL: @test_ucomilt_sd_0(
408 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
409 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
410 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomilt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
411 ; CHECK-NEXT: ret i32 [[TMP3]]
413 %1 = insertelement <2 x double> undef, double %a, i32 0
414 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
415 %3 = insertelement <2 x double> undef, double %b, i32 0
416 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
417 %5 = tail call i32 @llvm.x86.sse2.ucomilt.sd(<2 x double> %2, <2 x double> %4)
421 define i32 @test_ucomineq_sd_0(double %a, double %b) {
422 ; CHECK-LABEL: @test_ucomineq_sd_0(
423 ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x double> undef, double %a, i32 0
424 ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double %b, i32 0
425 ; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomineq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])
426 ; CHECK-NEXT: ret i32 [[TMP3]]
428 %1 = insertelement <2 x double> undef, double %a, i32 0
429 %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1
430 %3 = insertelement <2 x double> undef, double %b, i32 0
431 %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1
432 %5 = tail call i32 @llvm.x86.sse2.ucomineq.sd(<2 x double> %2, <2 x double> %4)
436 declare <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double>) nounwind readnone
438 declare <2 x double> @llvm.x86.sse2.add.sd(<2 x double>, <2 x double>)
439 declare <2 x double> @llvm.x86.sse2.sub.sd(<2 x double>, <2 x double>)
440 declare <2 x double> @llvm.x86.sse2.mul.sd(<2 x double>, <2 x double>)
441 declare <2 x double> @llvm.x86.sse2.div.sd(<2 x double>, <2 x double>)
442 declare <2 x double> @llvm.x86.sse2.min.sd(<2 x double>, <2 x double>)
443 declare <2 x double> @llvm.x86.sse2.max.sd(<2 x double>, <2 x double>)
444 declare <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double>, <2 x double>, i8)
446 declare i32 @llvm.x86.sse2.comieq.sd(<2 x double>, <2 x double>)
447 declare i32 @llvm.x86.sse2.comige.sd(<2 x double>, <2 x double>)
448 declare i32 @llvm.x86.sse2.comigt.sd(<2 x double>, <2 x double>)
449 declare i32 @llvm.x86.sse2.comile.sd(<2 x double>, <2 x double>)
450 declare i32 @llvm.x86.sse2.comilt.sd(<2 x double>, <2 x double>)
451 declare i32 @llvm.x86.sse2.comineq.sd(<2 x double>, <2 x double>)
453 declare i32 @llvm.x86.sse2.ucomieq.sd(<2 x double>, <2 x double>)
454 declare i32 @llvm.x86.sse2.ucomige.sd(<2 x double>, <2 x double>)
455 declare i32 @llvm.x86.sse2.ucomigt.sd(<2 x double>, <2 x double>)
456 declare i32 @llvm.x86.sse2.ucomile.sd(<2 x double>, <2 x double>)
457 declare i32 @llvm.x86.sse2.ucomilt.sd(<2 x double>, <2 x double>)
458 declare i32 @llvm.x86.sse2.ucomineq.sd(<2 x double>, <2 x double>)