brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.6 KiB · ba6dc5a Raw
542 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -mtriple=x86_64-unknown-unknown -S | FileCheck %s3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"4 5define 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]]9;10  %1 = insertelement <2 x double> undef, double %a, i32 011  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 112  %3 = tail call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %2)13  %4 = extractelement <2 x double> %3, i32 014  ret double %415}16 17define double @test_sqrt_sd_1(double %a) {18; CHECK-LABEL: @test_sqrt_sd_1(19; CHECK-NEXT:    ret double 1.000000e+0020;21  %1 = insertelement <2 x double> undef, double %a, i32 022  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 123  %3 = tail call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %2)24  %4 = extractelement <2 x double> %3, i32 125  ret double %426}27 28define 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]]32;33  %1 = insertelement <2 x double> undef, double %a, i32 034  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 135  %3 = insertelement <2 x double> undef, double %b, i32 036  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 137  %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 039  ret double %640}41 42define double @test_add_sd_1(double %a, double %b) {43; CHECK-LABEL: @test_add_sd_1(44; CHECK-NEXT:    ret double 1.000000e+0045;46  %1 = insertelement <2 x double> undef, double %a, i32 047  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 148  %3 = insertelement <2 x double> undef, double %b, i32 049  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 150  %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 152  ret double %653}54 55define double @test_add_sd_2(double %a) {56; CHECK-LABEL: @test_add_sd_2(57; CHECK-NEXT:    [[TMP1:%.*]] = fadd double [[A:%.*]], [[A]]58; CHECK-NEXT:    ret double [[TMP1]]59;60  %1 = insertelement <2 x double> zeroinitializer, double %a, i32 061  %2 = tail call <2 x double> @llvm.x86.sse2.add.sd(<2 x double> %1, <2 x double> %1)62  %3 = extractelement <2 x double> %2, i32 063  ret double %364}65 66define double @test_sub_sd_0(double %a, double %b) {67; CHECK-LABEL: @test_sub_sd_0(68; CHECK-NEXT:    [[TMP1:%.*]] = fsub double [[A:%.*]], [[B:%.*]]69; CHECK-NEXT:    ret double [[TMP1]]70;71  %1 = insertelement <2 x double> undef, double %a, i32 072  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 173  %3 = insertelement <2 x double> undef, double %b, i32 074  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 175  %5 = tail call <2 x double> @llvm.x86.sse2.sub.sd(<2 x double> %2, <2 x double> %4)76  %6 = extractelement <2 x double> %5, i32 077  ret double %678}79 80define double @test_sub_sd_1(double %a, double %b) {81; CHECK-LABEL: @test_sub_sd_1(82; CHECK-NEXT:    ret double 1.000000e+0083;84  %1 = insertelement <2 x double> undef, double %a, i32 085  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 186  %3 = insertelement <2 x double> undef, double %b, i32 087  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 188  %5 = tail call <2 x double> @llvm.x86.sse2.sub.sd(<2 x double> %2, <2 x double> %4)89  %6 = extractelement <2 x double> %5, i32 190  ret double %691}92 93define double @test_sub_sd_2(double %a) {94; CHECK-LABEL: @test_sub_sd_2(95; CHECK-NEXT:    [[TMP1:%.*]] = fsub double [[A:%.*]], [[A]]96; CHECK-NEXT:    ret double [[TMP1]]97;98  %1 = insertelement <2 x double> zeroinitializer, double %a, i32 099  %2 = tail call <2 x double> @llvm.x86.sse2.sub.sd(<2 x double> %1, <2 x double> %1)100  %3 = extractelement <2 x double> %2, i32 0101  ret double %3102}103 104define double @test_mul_sd_0(double %a, double %b) {105; CHECK-LABEL: @test_mul_sd_0(106; CHECK-NEXT:    [[TMP1:%.*]] = fmul double [[A:%.*]], [[B:%.*]]107; CHECK-NEXT:    ret double [[TMP1]]108;109  %1 = insertelement <2 x double> undef, double %a, i32 0110  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1111  %3 = insertelement <2 x double> undef, double %b, i32 0112  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1113  %5 = tail call <2 x double> @llvm.x86.sse2.mul.sd(<2 x double> %2, <2 x double> %4)114  %6 = extractelement <2 x double> %5, i32 0115  ret double %6116}117 118define double @test_mul_sd_1(double %a, double %b) {119; CHECK-LABEL: @test_mul_sd_1(120; CHECK-NEXT:    ret double 1.000000e+00121;122  %1 = insertelement <2 x double> undef, double %a, i32 0123  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1124  %3 = insertelement <2 x double> undef, double %b, i32 0125  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1126  %5 = tail call <2 x double> @llvm.x86.sse2.mul.sd(<2 x double> %2, <2 x double> %4)127  %6 = extractelement <2 x double> %5, i32 1128  ret double %6129}130 131define double @test_mul_sd_2(double %a) {132; CHECK-LABEL: @test_mul_sd_2(133; CHECK-NEXT:    [[TMP1:%.*]] = fmul double [[A:%.*]], [[A]]134; CHECK-NEXT:    ret double [[TMP1]]135;136  %1 = insertelement <2 x double> zeroinitializer, double %a, i32 0137  %2 = tail call <2 x double> @llvm.x86.sse2.mul.sd(<2 x double> %1, <2 x double> %1)138  %3 = extractelement <2 x double> %2, i32 0139  ret double %3140}141 142define double @test_div_sd_0(double %a, double %b) {143; CHECK-LABEL: @test_div_sd_0(144; CHECK-NEXT:    [[TMP1:%.*]] = fdiv double [[A:%.*]], [[B:%.*]]145; CHECK-NEXT:    ret double [[TMP1]]146;147  %1 = insertelement <2 x double> undef, double %a, i32 0148  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1149  %3 = insertelement <2 x double> undef, double %b, i32 0150  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1151  %5 = tail call <2 x double> @llvm.x86.sse2.div.sd(<2 x double> %2, <2 x double> %4)152  %6 = extractelement <2 x double> %5, i32 0153  ret double %6154}155 156define double @test_div_sd_1(double %a, double %b) {157; CHECK-LABEL: @test_div_sd_1(158; CHECK-NEXT:    ret double 1.000000e+00159;160  %1 = insertelement <2 x double> undef, double %a, i32 0161  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1162  %3 = insertelement <2 x double> undef, double %b, i32 0163  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1164  %5 = tail call <2 x double> @llvm.x86.sse2.div.sd(<2 x double> %2, <2 x double> %4)165  %6 = extractelement <2 x double> %5, i32 1166  ret double %6167}168 169define double @test_div_sd_2(double %a) {170; CHECK-LABEL: @test_div_sd_2(171; CHECK-NEXT:    [[TMP1:%.*]] = fdiv double [[A:%.*]], [[A]]172; CHECK-NEXT:    ret double [[TMP1]]173;174  %1 = insertelement <2 x double> zeroinitializer, double %a, i32 0175  %2 = tail call <2 x double> @llvm.x86.sse2.div.sd(<2 x double> %1, <2 x double> %1)176  %3 = extractelement <2 x double> %2, i32 0177  ret double %3178}179 180define <2 x double> @test_min_sd(<2 x double> %a, <2 x double> %b) {181; CHECK-LABEL: @test_min_sd(182; CHECK-NEXT:    [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> [[A:%.*]], <2 x double> [[B:%.*]])183; CHECK-NEXT:    ret <2 x double> [[TMP1]]184;185  %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1186  %2 = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %a, <2 x double> %1)187  ret <2 x double> %2188}189 190define double @test_min_sd_0(double %a, double %b) {191; CHECK-LABEL: @test_min_sd_0(192; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0193; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0194; CHECK-NEXT:    [[TMP3:%.*]] = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])195; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <2 x double> [[TMP3]], i64 0196; CHECK-NEXT:    ret double [[TMP4]]197;198  %1 = insertelement <2 x double> undef, double %a, i32 0199  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1200  %3 = insertelement <2 x double> undef, double %b, i32 0201  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1202  %5 = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %2, <2 x double> %4)203  %6 = extractelement <2 x double> %5, i32 0204  ret double %6205}206 207define double @test_min_sd_1(double %a, double %b) {208; CHECK-LABEL: @test_min_sd_1(209; CHECK-NEXT:    ret double 1.000000e+00210;211  %1 = insertelement <2 x double> undef, double %a, i32 0212  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1213  %3 = insertelement <2 x double> undef, double %b, i32 0214  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1215  %5 = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %2, <2 x double> %4)216  %6 = extractelement <2 x double> %5, i32 1217  ret double %6218}219 220define double @test_min_sd_2(double %a) {221; CHECK-LABEL: @test_min_sd_2(222; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> <double poison, double 0.000000e+00>, double [[A:%.*]], i64 0223; CHECK-NEXT:    [[TMP2:%.*]] = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> [[TMP1]], <2 x double> [[TMP1]])224; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <2 x double> [[TMP2]], i64 0225; CHECK-NEXT:    ret double [[TMP3]]226;227  %1 = insertelement <2 x double> zeroinitializer, double %a, i32 0228  %2 = tail call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %1, <2 x double> %1)229  %3 = extractelement <2 x double> %2, i32 0230  ret double %3231}232 233define <2 x double> @test_max_sd(<2 x double> %a, <2 x double> %b) {234; CHECK-LABEL: @test_max_sd(235; CHECK-NEXT:    [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> [[A:%.*]], <2 x double> [[B:%.*]])236; CHECK-NEXT:    ret <2 x double> [[TMP1]]237;238  %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1239  %2 = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %a, <2 x double> %1)240  ret <2 x double> %2241}242 243define double @test_max_sd_0(double %a, double %b) {244; CHECK-LABEL: @test_max_sd_0(245; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0246; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0247; CHECK-NEXT:    [[TMP3:%.*]] = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])248; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <2 x double> [[TMP3]], i64 0249; CHECK-NEXT:    ret double [[TMP4]]250;251  %1 = insertelement <2 x double> undef, double %a, i32 0252  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1253  %3 = insertelement <2 x double> undef, double %b, i32 0254  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1255  %5 = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %2, <2 x double> %4)256  %6 = extractelement <2 x double> %5, i32 0257  ret double %6258}259 260define double @test_max_sd_1(double %a, double %b) {261; CHECK-LABEL: @test_max_sd_1(262; CHECK-NEXT:    ret double 1.000000e+00263;264  %1 = insertelement <2 x double> undef, double %a, i32 0265  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1266  %3 = insertelement <2 x double> undef, double %b, i32 0267  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1268  %5 = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %2, <2 x double> %4)269  %6 = extractelement <2 x double> %5, i32 1270  ret double %6271}272 273define double @test_max_sd_2(double %a) {274; CHECK-LABEL: @test_max_sd_2(275; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> <double poison, double 0.000000e+00>, double [[A:%.*]], i64 0276; CHECK-NEXT:    [[TMP2:%.*]] = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> [[TMP1]], <2 x double> [[TMP1]])277; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <2 x double> [[TMP2]], i64 0278; CHECK-NEXT:    ret double [[TMP3]]279;280  %1 = insertelement <2 x double> zeroinitializer, double %a, i32 0281  %2 = tail call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %1, <2 x double> %1)282  %3 = extractelement <2 x double> %2, i32 0283  ret double %3284}285 286define <2 x double> @test_cmp_sd(<2 x double> %a, <2 x double> %b) {287; CHECK-LABEL: @test_cmp_sd(288; CHECK-NEXT:    [[TMP1:%.*]] = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> [[A:%.*]], <2 x double> [[B:%.*]], i8 0)289; CHECK-NEXT:    ret <2 x double> [[TMP1]]290;291  %1 = insertelement <2 x double> %b, double 2.000000e+00, i32 1292  %2 = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %a, <2 x double> %1, i8 0)293  ret <2 x double> %2294}295 296define double @test_cmp_sd_0(double %a, double %b) {297; CHECK-LABEL: @test_cmp_sd_0(298; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0299; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0300; CHECK-NEXT:    [[TMP3:%.*]] = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]], i8 0)301; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <2 x double> [[TMP3]], i64 0302; CHECK-NEXT:    ret double [[TMP4]]303;304  %1 = insertelement <2 x double> undef, double %a, i32 0305  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1306  %3 = insertelement <2 x double> undef, double %b, i32 0307  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1308  %5 = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %2, <2 x double> %4, i8 0)309  %6 = extractelement <2 x double> %5, i32 0310  ret double %6311}312 313define double @test_cmp_sd_1(double %a, double %b) {314; CHECK-LABEL: @test_cmp_sd_1(315; CHECK-NEXT:    ret double 1.000000e+00316;317  %1 = insertelement <2 x double> undef, double %a, i32 0318  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1319  %3 = insertelement <2 x double> undef, double %b, i32 0320  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1321  %5 = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %2, <2 x double> %4, i8 0)322  %6 = extractelement <2 x double> %5, i32 1323  ret double %6324}325 326define double @test_cmp_sd_2(double %a) {327; CHECK-LABEL: @test_cmp_sd_2(328; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> <double poison, double 0.000000e+00>, double [[A:%.*]], i64 0329; CHECK-NEXT:    [[TMP2:%.*]] = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> [[TMP1]], <2 x double> [[TMP1]], i8 3)330; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <2 x double> [[TMP2]], i64 0331; CHECK-NEXT:    ret double [[TMP3]]332;333  %1 = insertelement <2 x double> zeroinitializer, double %a, i32 0334  %2 = tail call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %1, <2 x double> %1, i8 3)335  %3 = extractelement <2 x double> %2, i32 0336  ret double %3337}338 339define i32 @test_comieq_sd_0(double %a, double %b) {340; CHECK-LABEL: @test_comieq_sd_0(341; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0342; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0343; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comieq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])344; CHECK-NEXT:    ret i32 [[TMP3]]345;346  %1 = insertelement <2 x double> undef, double %a, i32 0347  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1348  %3 = insertelement <2 x double> undef, double %b, i32 0349  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1350  %5 = tail call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %2, <2 x double> %4)351  ret i32 %5352}353 354define i32 @test_comige_sd_0(double %a, double %b) {355; CHECK-LABEL: @test_comige_sd_0(356; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0357; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0358; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comige.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])359; CHECK-NEXT:    ret i32 [[TMP3]]360;361  %1 = insertelement <2 x double> undef, double %a, i32 0362  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1363  %3 = insertelement <2 x double> undef, double %b, i32 0364  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1365  %5 = tail call i32 @llvm.x86.sse2.comige.sd(<2 x double> %2, <2 x double> %4)366  ret i32 %5367}368 369define i32 @test_comigt_sd_0(double %a, double %b) {370; CHECK-LABEL: @test_comigt_sd_0(371; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0372; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0373; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comigt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])374; CHECK-NEXT:    ret i32 [[TMP3]]375;376  %1 = insertelement <2 x double> undef, double %a, i32 0377  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1378  %3 = insertelement <2 x double> undef, double %b, i32 0379  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1380  %5 = tail call i32 @llvm.x86.sse2.comigt.sd(<2 x double> %2, <2 x double> %4)381  ret i32 %5382}383 384define i32 @test_comile_sd_0(double %a, double %b) {385; CHECK-LABEL: @test_comile_sd_0(386; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0387; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0388; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comile.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])389; CHECK-NEXT:    ret i32 [[TMP3]]390;391  %1 = insertelement <2 x double> undef, double %a, i32 0392  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1393  %3 = insertelement <2 x double> undef, double %b, i32 0394  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1395  %5 = tail call i32 @llvm.x86.sse2.comile.sd(<2 x double> %2, <2 x double> %4)396  ret i32 %5397}398 399define i32 @test_comilt_sd_0(double %a, double %b) {400; CHECK-LABEL: @test_comilt_sd_0(401; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0402; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0403; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comilt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])404; CHECK-NEXT:    ret i32 [[TMP3]]405;406  %1 = insertelement <2 x double> undef, double %a, i32 0407  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1408  %3 = insertelement <2 x double> undef, double %b, i32 0409  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1410  %5 = tail call i32 @llvm.x86.sse2.comilt.sd(<2 x double> %2, <2 x double> %4)411  ret i32 %5412}413 414define i32 @test_comineq_sd_0(double %a, double %b) {415; CHECK-LABEL: @test_comineq_sd_0(416; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0417; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0418; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.comineq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])419; CHECK-NEXT:    ret i32 [[TMP3]]420;421  %1 = insertelement <2 x double> undef, double %a, i32 0422  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1423  %3 = insertelement <2 x double> undef, double %b, i32 0424  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1425  %5 = tail call i32 @llvm.x86.sse2.comineq.sd(<2 x double> %2, <2 x double> %4)426  ret i32 %5427}428 429define i32 @test_ucomieq_sd_0(double %a, double %b) {430; CHECK-LABEL: @test_ucomieq_sd_0(431; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0432; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0433; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])434; CHECK-NEXT:    ret i32 [[TMP3]]435;436  %1 = insertelement <2 x double> undef, double %a, i32 0437  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1438  %3 = insertelement <2 x double> undef, double %b, i32 0439  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1440  %5 = tail call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %2, <2 x double> %4)441  ret i32 %5442}443 444define i32 @test_ucomige_sd_0(double %a, double %b) {445; CHECK-LABEL: @test_ucomige_sd_0(446; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0447; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0448; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomige.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])449; CHECK-NEXT:    ret i32 [[TMP3]]450;451  %1 = insertelement <2 x double> undef, double %a, i32 0452  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1453  %3 = insertelement <2 x double> undef, double %b, i32 0454  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1455  %5 = tail call i32 @llvm.x86.sse2.ucomige.sd(<2 x double> %2, <2 x double> %4)456  ret i32 %5457}458 459define i32 @test_ucomigt_sd_0(double %a, double %b) {460; CHECK-LABEL: @test_ucomigt_sd_0(461; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0462; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0463; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomigt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])464; CHECK-NEXT:    ret i32 [[TMP3]]465;466  %1 = insertelement <2 x double> undef, double %a, i32 0467  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1468  %3 = insertelement <2 x double> undef, double %b, i32 0469  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1470  %5 = tail call i32 @llvm.x86.sse2.ucomigt.sd(<2 x double> %2, <2 x double> %4)471  ret i32 %5472}473 474define i32 @test_ucomile_sd_0(double %a, double %b) {475; CHECK-LABEL: @test_ucomile_sd_0(476; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0477; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0478; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomile.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])479; CHECK-NEXT:    ret i32 [[TMP3]]480;481  %1 = insertelement <2 x double> undef, double %a, i32 0482  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1483  %3 = insertelement <2 x double> undef, double %b, i32 0484  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1485  %5 = tail call i32 @llvm.x86.sse2.ucomile.sd(<2 x double> %2, <2 x double> %4)486  ret i32 %5487}488 489define i32 @test_ucomilt_sd_0(double %a, double %b) {490; CHECK-LABEL: @test_ucomilt_sd_0(491; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0492; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0493; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomilt.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])494; CHECK-NEXT:    ret i32 [[TMP3]]495;496  %1 = insertelement <2 x double> undef, double %a, i32 0497  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1498  %3 = insertelement <2 x double> undef, double %b, i32 0499  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1500  %5 = tail call i32 @llvm.x86.sse2.ucomilt.sd(<2 x double> %2, <2 x double> %4)501  ret i32 %5502}503 504define i32 @test_ucomineq_sd_0(double %a, double %b) {505; CHECK-LABEL: @test_ucomineq_sd_0(506; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x double> poison, double [[A:%.*]], i64 0507; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[B:%.*]], i64 0508; CHECK-NEXT:    [[TMP3:%.*]] = tail call i32 @llvm.x86.sse2.ucomineq.sd(<2 x double> [[TMP1]], <2 x double> [[TMP2]])509; CHECK-NEXT:    ret i32 [[TMP3]]510;511  %1 = insertelement <2 x double> undef, double %a, i32 0512  %2 = insertelement <2 x double> %1, double 1.000000e+00, i32 1513  %3 = insertelement <2 x double> undef, double %b, i32 0514  %4 = insertelement <2 x double> %3, double 2.000000e+00, i32 1515  %5 = tail call i32 @llvm.x86.sse2.ucomineq.sd(<2 x double> %2, <2 x double> %4)516  ret i32 %5517}518 519declare <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double>) nounwind readnone520 521declare <2 x double> @llvm.x86.sse2.add.sd(<2 x double>, <2 x double>)522declare <2 x double> @llvm.x86.sse2.sub.sd(<2 x double>, <2 x double>)523declare <2 x double> @llvm.x86.sse2.mul.sd(<2 x double>, <2 x double>)524declare <2 x double> @llvm.x86.sse2.div.sd(<2 x double>, <2 x double>)525declare <2 x double> @llvm.x86.sse2.min.sd(<2 x double>, <2 x double>)526declare <2 x double> @llvm.x86.sse2.max.sd(<2 x double>, <2 x double>)527declare <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double>, <2 x double>, i8)528 529declare i32 @llvm.x86.sse2.comieq.sd(<2 x double>, <2 x double>)530declare i32 @llvm.x86.sse2.comige.sd(<2 x double>, <2 x double>)531declare i32 @llvm.x86.sse2.comigt.sd(<2 x double>, <2 x double>)532declare i32 @llvm.x86.sse2.comile.sd(<2 x double>, <2 x double>)533declare i32 @llvm.x86.sse2.comilt.sd(<2 x double>, <2 x double>)534declare i32 @llvm.x86.sse2.comineq.sd(<2 x double>, <2 x double>)535 536declare i32 @llvm.x86.sse2.ucomieq.sd(<2 x double>, <2 x double>)537declare i32 @llvm.x86.sse2.ucomige.sd(<2 x double>, <2 x double>)538declare i32 @llvm.x86.sse2.ucomigt.sd(<2 x double>, <2 x double>)539declare i32 @llvm.x86.sse2.ucomile.sd(<2 x double>, <2 x double>)540declare i32 @llvm.x86.sse2.ucomilt.sd(<2 x double>, <2 x double>)541declare i32 @llvm.x86.sse2.ucomineq.sd(<2 x double>, <2 x double>)542