[ARM] MVE compare vector splat combine
[llvm-complete.git] / test / Transforms / InstCombine / X86 / x86-sse2.ll
blob721097e016f20d909825bfb088c2fa0979e1a239
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
14   ret double %4
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
25   ret double %4
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
39   ret double %6
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
52   ret double %6
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
66   ret double %6
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
79   ret double %6
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
93   ret double %6
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
106   ret double %6
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
120   ret double %6
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
133   ret double %6
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)
143   ret <2 x double> %2
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
160   ret double %6
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
173   ret double %6
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)
183   ret <2 x double> %2
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
200   ret double %6
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
213   ret double %6
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)
223   ret <2 x double> %2
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
240   ret double %6
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
253   ret double %6
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)
268   ret i32 %5
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)
283   ret i32 %5
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)
298   ret i32 %5
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)
313   ret i32 %5
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)
328   ret i32 %5
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)
343   ret i32 %5
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)
358   ret i32 %5
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)
373   ret i32 %5
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)
388   ret i32 %5
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)
403   ret i32 %5
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)
418   ret i32 %5
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)
433   ret i32 %5
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>)