1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=sse4.2 | FileCheck %s 3 4define double @test1(double %a, double %b, double %eps) { 5; CHECK-LABEL: test1: 6; CHECK: # BB#0: 7; CHECK-NEXT: cmpltsd %xmm2, %xmm0 8; CHECK-NEXT: andps %xmm1, %xmm0 9; CHECK-NEXT: retq 10; 11 %cmp = fcmp olt double %a, %eps 12 %cond = select i1 %cmp, double %b, double 0.000000e+00 13 ret double %cond 14} 15 16define double @test2(double %a, double %b, double %eps) { 17; CHECK-LABEL: test2: 18; CHECK: # BB#0: 19; CHECK-NEXT: cmplesd %xmm2, %xmm0 20; CHECK-NEXT: andps %xmm1, %xmm0 21; CHECK-NEXT: retq 22; 23 %cmp = fcmp ole double %a, %eps 24 %cond = select i1 %cmp, double %b, double 0.000000e+00 25 ret double %cond 26} 27 28define double @test3(double %a, double %b, double %eps) { 29; CHECK-LABEL: test3: 30; CHECK: # BB#0: 31; CHECK-NEXT: cmpltsd %xmm0, %xmm2 32; CHECK-NEXT: andps %xmm1, %xmm2 33; CHECK-NEXT: movaps %xmm2, %xmm0 34; CHECK-NEXT: retq 35; 36 %cmp = fcmp ogt double %a, %eps 37 %cond = select i1 %cmp, double %b, double 0.000000e+00 38 ret double %cond 39} 40 41define double @test4(double %a, double %b, double %eps) { 42; CHECK-LABEL: test4: 43; CHECK: # BB#0: 44; CHECK-NEXT: cmplesd %xmm0, %xmm2 45; CHECK-NEXT: andps %xmm1, %xmm2 46; CHECK-NEXT: movaps %xmm2, %xmm0 47; CHECK-NEXT: retq 48; 49 %cmp = fcmp oge double %a, %eps 50 %cond = select i1 %cmp, double %b, double 0.000000e+00 51 ret double %cond 52} 53 54define double @test5(double %a, double %b, double %eps) { 55; CHECK-LABEL: test5: 56; CHECK: # BB#0: 57; CHECK-NEXT: cmpltsd %xmm2, %xmm0 58; CHECK-NEXT: andnps %xmm1, %xmm0 59; CHECK-NEXT: retq 60; 61 %cmp = fcmp olt double %a, %eps 62 %cond = select i1 %cmp, double 0.000000e+00, double %b 63 ret double %cond 64} 65 66define double @test6(double %a, double %b, double %eps) { 67; CHECK-LABEL: test6: 68; CHECK: # BB#0: 69; CHECK-NEXT: cmplesd %xmm2, %xmm0 70; CHECK-NEXT: andnps %xmm1, %xmm0 71; CHECK-NEXT: retq 72; 73 %cmp = fcmp ole double %a, %eps 74 %cond = select i1 %cmp, double 0.000000e+00, double %b 75 ret double %cond 76} 77 78define double @test7(double %a, double %b, double %eps) { 79; CHECK-LABEL: test7: 80; CHECK: # BB#0: 81; CHECK-NEXT: cmpltsd %xmm0, %xmm2 82; CHECK-NEXT: andnps %xmm1, %xmm2 83; CHECK-NEXT: movaps %xmm2, %xmm0 84; CHECK-NEXT: retq 85; 86 %cmp = fcmp ogt double %a, %eps 87 %cond = select i1 %cmp, double 0.000000e+00, double %b 88 ret double %cond 89} 90 91define double @test8(double %a, double %b, double %eps) { 92; CHECK-LABEL: test8: 93; CHECK: # BB#0: 94; CHECK-NEXT: cmplesd %xmm0, %xmm2 95; CHECK-NEXT: andnps %xmm1, %xmm2 96; CHECK-NEXT: movaps %xmm2, %xmm0 97; CHECK-NEXT: retq 98; 99 %cmp = fcmp oge double %a, %eps 100 %cond = select i1 %cmp, double 0.000000e+00, double %b 101 ret double %cond 102} 103 104define float @test9(float %a, float %b, float %eps) { 105; CHECK-LABEL: test9: 106; CHECK: # BB#0: 107; CHECK-NEXT: cmpltss %xmm2, %xmm0 108; CHECK-NEXT: andps %xmm1, %xmm0 109; CHECK-NEXT: retq 110; 111 %cmp = fcmp olt float %a, %eps 112 %cond = select i1 %cmp, float %b, float 0.000000e+00 113 ret float %cond 114} 115 116define float @test10(float %a, float %b, float %eps) { 117; CHECK-LABEL: test10: 118; CHECK: # BB#0: 119; CHECK-NEXT: cmpless %xmm2, %xmm0 120; CHECK-NEXT: andps %xmm1, %xmm0 121; CHECK-NEXT: retq 122; 123 %cmp = fcmp ole float %a, %eps 124 %cond = select i1 %cmp, float %b, float 0.000000e+00 125 ret float %cond 126} 127 128define float @test11(float %a, float %b, float %eps) { 129; CHECK-LABEL: test11: 130; CHECK: # BB#0: 131; CHECK-NEXT: cmpltss %xmm0, %xmm2 132; CHECK-NEXT: andps %xmm1, %xmm2 133; CHECK-NEXT: movaps %xmm2, %xmm0 134; CHECK-NEXT: retq 135; 136 %cmp = fcmp ogt float %a, %eps 137 %cond = select i1 %cmp, float %b, float 0.000000e+00 138 ret float %cond 139} 140 141define float @test12(float %a, float %b, float %eps) { 142; CHECK-LABEL: test12: 143; CHECK: # BB#0: 144; CHECK-NEXT: cmpless %xmm0, %xmm2 145; CHECK-NEXT: andps %xmm1, %xmm2 146; CHECK-NEXT: movaps %xmm2, %xmm0 147; CHECK-NEXT: retq 148; 149 %cmp = fcmp oge float %a, %eps 150 %cond = select i1 %cmp, float %b, float 0.000000e+00 151 ret float %cond 152} 153 154define float @test13(float %a, float %b, float %eps) { 155; CHECK-LABEL: test13: 156; CHECK: # BB#0: 157; CHECK-NEXT: cmpltss %xmm2, %xmm0 158; CHECK-NEXT: andnps %xmm1, %xmm0 159; CHECK-NEXT: retq 160; 161 %cmp = fcmp olt float %a, %eps 162 %cond = select i1 %cmp, float 0.000000e+00, float %b 163 ret float %cond 164} 165 166define float @test14(float %a, float %b, float %eps) { 167; CHECK-LABEL: test14: 168; CHECK: # BB#0: 169; CHECK-NEXT: cmpless %xmm2, %xmm0 170; CHECK-NEXT: andnps %xmm1, %xmm0 171; CHECK-NEXT: retq 172; 173 %cmp = fcmp ole float %a, %eps 174 %cond = select i1 %cmp, float 0.000000e+00, float %b 175 ret float %cond 176} 177 178define float @test15(float %a, float %b, float %eps) { 179; CHECK-LABEL: test15: 180; CHECK: # BB#0: 181; CHECK-NEXT: cmpltss %xmm0, %xmm2 182; CHECK-NEXT: andnps %xmm1, %xmm2 183; CHECK-NEXT: movaps %xmm2, %xmm0 184; CHECK-NEXT: retq 185; 186 %cmp = fcmp ogt float %a, %eps 187 %cond = select i1 %cmp, float 0.000000e+00, float %b 188 ret float %cond 189} 190 191define float @test16(float %a, float %b, float %eps) { 192; CHECK-LABEL: test16: 193; CHECK: # BB#0: 194; CHECK-NEXT: cmpless %xmm0, %xmm2 195; CHECK-NEXT: andnps %xmm1, %xmm2 196; CHECK-NEXT: movaps %xmm2, %xmm0 197; CHECK-NEXT: retq 198; 199 %cmp = fcmp oge float %a, %eps 200 %cond = select i1 %cmp, float 0.000000e+00, float %b 201 ret float %cond 202} 203 204define float @test17(float %a, float %b, float %c, float %eps) { 205; CHECK-LABEL: test17: 206; CHECK: # BB#0: 207; CHECK-NEXT: cmpless %xmm0, %xmm3 208; CHECK-NEXT: andps %xmm3, %xmm2 209; CHECK-NEXT: andnps %xmm1, %xmm3 210; CHECK-NEXT: orps %xmm2, %xmm3 211; CHECK-NEXT: movaps %xmm3, %xmm0 212; CHECK-NEXT: retq 213; 214 %cmp = fcmp oge float %a, %eps 215 %cond = select i1 %cmp, float %c, float %b 216 ret float %cond 217} 218 219define double @test18(double %a, double %b, double %c, double %eps) { 220; CHECK-LABEL: test18: 221; CHECK: # BB#0: 222; CHECK-NEXT: cmplesd %xmm0, %xmm3 223; CHECK-NEXT: andps %xmm3, %xmm2 224; CHECK-NEXT: andnps %xmm1, %xmm3 225; CHECK-NEXT: orps %xmm2, %xmm3 226; CHECK-NEXT: movaps %xmm3, %xmm0 227; CHECK-NEXT: retq 228; 229 %cmp = fcmp oge double %a, %eps 230 %cond = select i1 %cmp, double %c, double %b 231 ret double %cond 232} 233 234