214 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=sse4.2 | FileCheck %s3 4define double @test1(double %a, double %b, double %eps) {5; CHECK-LABEL: test1:6; CHECK: # %bb.0:7; CHECK-NEXT: cmpltsd %xmm2, %xmm08; CHECK-NEXT: andpd %xmm1, %xmm09; CHECK-NEXT: retq10 %cmp = fcmp olt double %a, %eps11 %cond = select i1 %cmp, double %b, double 0.000000e+0012 ret double %cond13}14 15define double @test2(double %a, double %b, double %eps) {16; CHECK-LABEL: test2:17; CHECK: # %bb.0:18; CHECK-NEXT: cmplesd %xmm2, %xmm019; CHECK-NEXT: andpd %xmm1, %xmm020; CHECK-NEXT: retq21 %cmp = fcmp ole double %a, %eps22 %cond = select i1 %cmp, double %b, double 0.000000e+0023 ret double %cond24}25 26define double @test3(double %a, double %b, double %eps) {27; CHECK-LABEL: test3:28; CHECK: # %bb.0:29; CHECK-NEXT: cmpltsd %xmm0, %xmm230; CHECK-NEXT: andpd %xmm1, %xmm231; CHECK-NEXT: movapd %xmm2, %xmm032; CHECK-NEXT: retq33 %cmp = fcmp ogt double %a, %eps34 %cond = select i1 %cmp, double %b, double 0.000000e+0035 ret double %cond36}37 38define double @test4(double %a, double %b, double %eps) {39; CHECK-LABEL: test4:40; CHECK: # %bb.0:41; CHECK-NEXT: cmplesd %xmm0, %xmm242; CHECK-NEXT: andpd %xmm1, %xmm243; CHECK-NEXT: movapd %xmm2, %xmm044; CHECK-NEXT: retq45 %cmp = fcmp oge double %a, %eps46 %cond = select i1 %cmp, double %b, double 0.000000e+0047 ret double %cond48}49 50define double @test5(double %a, double %b, double %eps) {51; CHECK-LABEL: test5:52; CHECK: # %bb.0:53; CHECK-NEXT: cmpltsd %xmm2, %xmm054; CHECK-NEXT: andnpd %xmm1, %xmm055; CHECK-NEXT: retq56 %cmp = fcmp olt double %a, %eps57 %cond = select i1 %cmp, double 0.000000e+00, double %b58 ret double %cond59}60 61define double @test6(double %a, double %b, double %eps) {62; CHECK-LABEL: test6:63; CHECK: # %bb.0:64; CHECK-NEXT: cmplesd %xmm2, %xmm065; CHECK-NEXT: andnpd %xmm1, %xmm066; CHECK-NEXT: retq67 %cmp = fcmp ole double %a, %eps68 %cond = select i1 %cmp, double 0.000000e+00, double %b69 ret double %cond70}71 72define double @test7(double %a, double %b, double %eps) {73; CHECK-LABEL: test7:74; CHECK: # %bb.0:75; CHECK-NEXT: cmpltsd %xmm0, %xmm276; CHECK-NEXT: andnpd %xmm1, %xmm277; CHECK-NEXT: movapd %xmm2, %xmm078; CHECK-NEXT: retq79 %cmp = fcmp ogt double %a, %eps80 %cond = select i1 %cmp, double 0.000000e+00, double %b81 ret double %cond82}83 84define double @test8(double %a, double %b, double %eps) {85; CHECK-LABEL: test8:86; CHECK: # %bb.0:87; CHECK-NEXT: cmplesd %xmm0, %xmm288; CHECK-NEXT: andnpd %xmm1, %xmm289; CHECK-NEXT: movapd %xmm2, %xmm090; CHECK-NEXT: retq91 %cmp = fcmp oge double %a, %eps92 %cond = select i1 %cmp, double 0.000000e+00, double %b93 ret double %cond94}95 96define float @test9(float %a, float %b, float %eps) {97; CHECK-LABEL: test9:98; CHECK: # %bb.0:99; CHECK-NEXT: cmpltss %xmm2, %xmm0100; CHECK-NEXT: andps %xmm1, %xmm0101; CHECK-NEXT: retq102 %cmp = fcmp olt float %a, %eps103 %cond = select i1 %cmp, float %b, float 0.000000e+00104 ret float %cond105}106 107define float @test10(float %a, float %b, float %eps) {108; CHECK-LABEL: test10:109; CHECK: # %bb.0:110; CHECK-NEXT: cmpless %xmm2, %xmm0111; CHECK-NEXT: andps %xmm1, %xmm0112; CHECK-NEXT: retq113 %cmp = fcmp ole float %a, %eps114 %cond = select i1 %cmp, float %b, float 0.000000e+00115 ret float %cond116}117 118define float @test11(float %a, float %b, float %eps) {119; CHECK-LABEL: test11:120; CHECK: # %bb.0:121; CHECK-NEXT: cmpltss %xmm0, %xmm2122; CHECK-NEXT: andps %xmm1, %xmm2123; CHECK-NEXT: movaps %xmm2, %xmm0124; CHECK-NEXT: retq125 %cmp = fcmp ogt float %a, %eps126 %cond = select i1 %cmp, float %b, float 0.000000e+00127 ret float %cond128}129 130define float @test12(float %a, float %b, float %eps) {131; CHECK-LABEL: test12:132; CHECK: # %bb.0:133; CHECK-NEXT: cmpless %xmm0, %xmm2134; CHECK-NEXT: andps %xmm1, %xmm2135; CHECK-NEXT: movaps %xmm2, %xmm0136; CHECK-NEXT: retq137 %cmp = fcmp oge float %a, %eps138 %cond = select i1 %cmp, float %b, float 0.000000e+00139 ret float %cond140}141 142define float @test13(float %a, float %b, float %eps) {143; CHECK-LABEL: test13:144; CHECK: # %bb.0:145; CHECK-NEXT: cmpltss %xmm2, %xmm0146; CHECK-NEXT: andnps %xmm1, %xmm0147; CHECK-NEXT: retq148 %cmp = fcmp olt float %a, %eps149 %cond = select i1 %cmp, float 0.000000e+00, float %b150 ret float %cond151}152 153define float @test14(float %a, float %b, float %eps) {154; CHECK-LABEL: test14:155; CHECK: # %bb.0:156; CHECK-NEXT: cmpless %xmm2, %xmm0157; CHECK-NEXT: andnps %xmm1, %xmm0158; CHECK-NEXT: retq159 %cmp = fcmp ole float %a, %eps160 %cond = select i1 %cmp, float 0.000000e+00, float %b161 ret float %cond162}163 164define float @test15(float %a, float %b, float %eps) {165; CHECK-LABEL: test15:166; CHECK: # %bb.0:167; CHECK-NEXT: cmpltss %xmm0, %xmm2168; CHECK-NEXT: andnps %xmm1, %xmm2169; CHECK-NEXT: movaps %xmm2, %xmm0170; CHECK-NEXT: retq171 %cmp = fcmp ogt float %a, %eps172 %cond = select i1 %cmp, float 0.000000e+00, float %b173 ret float %cond174}175 176define float @test16(float %a, float %b, float %eps) {177; CHECK-LABEL: test16:178; CHECK: # %bb.0:179; CHECK-NEXT: cmpless %xmm0, %xmm2180; CHECK-NEXT: andnps %xmm1, %xmm2181; CHECK-NEXT: movaps %xmm2, %xmm0182; CHECK-NEXT: retq183 %cmp = fcmp oge float %a, %eps184 %cond = select i1 %cmp, float 0.000000e+00, float %b185 ret float %cond186}187 188define float @test17(float %a, float %b, float %c, float %eps) {189; CHECK-LABEL: test17:190; CHECK: # %bb.0:191; CHECK-NEXT: cmpless %xmm0, %xmm3192; CHECK-NEXT: movaps %xmm3, %xmm0193; CHECK-NEXT: blendvps %xmm0, %xmm2, %xmm1194; CHECK-NEXT: movaps %xmm1, %xmm0195; CHECK-NEXT: retq196 %cmp = fcmp oge float %a, %eps197 %cond = select i1 %cmp, float %c, float %b198 ret float %cond199}200 201define double @test18(double %a, double %b, double %c, double %eps) {202; CHECK-LABEL: test18:203; CHECK: # %bb.0:204; CHECK-NEXT: cmplesd %xmm0, %xmm3205; CHECK-NEXT: movapd %xmm3, %xmm0206; CHECK-NEXT: blendvpd %xmm0, %xmm2, %xmm1207; CHECK-NEXT: movapd %xmm1, %xmm0208; CHECK-NEXT: retq209 %cmp = fcmp oge double %a, %eps210 %cond = select i1 %cmp, double %c, double %b211 ret double %cond212}213 214