Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl --show-mc-encoding | FileCheck %s
      2 
      3 ; CHECK-LABEL: test1
      4 ; CHECK: vucomisd {{.*}}encoding: [0x62
      5 define double @test1(double %a, double %b) nounwind {
      6   %tobool = fcmp une double %a, %b
      7   br i1 %tobool, label %l1, label %l2
      8 
      9 l1:
     10   %c = fsub double %a, %b
     11   ret double %c
     12 l2:
     13   %c1 = fadd double %a, %b
     14   ret double %c1
     15 }
     16 
     17 ; CHECK-LABEL: test2
     18 ; CHECK: vucomiss {{.*}}encoding: [0x62
     19 define float @test2(float %a, float %b) nounwind {
     20   %tobool = fcmp olt float %a, %b
     21   br i1 %tobool, label %l1, label %l2
     22 
     23 l1:
     24   %c = fsub float %a, %b
     25   ret float %c
     26 l2:
     27   %c1 = fadd float %a, %b
     28   ret float %c1
     29 }
     30 
     31 ; CHECK-LABEL: test3
     32 ; CHECK: vcmpeqss
     33 ; CHECK: kmov
     34 ; CHECK: ret
     35 define i32 @test3(float %a, float %b) {
     36 
     37   %cmp10.i = fcmp oeq float %a, %b
     38   %conv11.i = zext i1 %cmp10.i to i32
     39   ret i32 %conv11.i
     40 }
     41 
     42 ; CHECK-LABEL: test5
     43 ; CHECK: ret
     44 define float @test5(float %p) #0 {
     45 entry:
     46   %cmp = fcmp oeq float %p, 0.000000e+00
     47   br i1 %cmp, label %return, label %if.end
     48 
     49 if.end:                                           ; preds = %entry
     50   %cmp1 = fcmp ogt float %p, 0.000000e+00
     51   %cond = select i1 %cmp1, float 1.000000e+00, float -1.000000e+00
     52   br label %return
     53 
     54 return:                                           ; preds = %if.end, %entry
     55   %retval.0 = phi float [ %cond, %if.end ], [ %p, %entry ]
     56   ret float %retval.0
     57 }
     58 
     59 ; CHECK-LABEL: test6
     60 ; CHECK: cmpl
     61 ; CHECK-NOT: kmov
     62 ; CHECK: ret
     63 define i32 @test6(i32 %a, i32 %b) {
     64   %cmp = icmp eq i32 %a, %b
     65   %res = zext i1 %cmp to i32
     66   ret i32 %res
     67 }
     68 
     69 ; CHECK-LABEL: test7
     70 ; CHECK: vucomisd
     71 ; CHECK-NOT: kmov
     72 ; CHECK: ret
     73 define i32 @test7(double %x, double %y) #2 {
     74 entry:
     75   %0 = fcmp one double %x, %y
     76   %or = zext i1 %0 to i32
     77   ret i32 %or
     78 }
     79 
     80 define i32 @test8(i32 %a1, i32 %a2, i32 %a3) {
     81   %tmp1 = icmp eq i32 %a1, -1
     82   %tmp2 = icmp eq i32 %a2, -2147483648
     83   %tmp3 = and i1 %tmp1, %tmp2
     84   %tmp4 = icmp eq i32 %a3, 0
     85   %tmp5 = or i1 %tmp3, %tmp4
     86   %res = select i1 %tmp5, i32 1, i32 %a3
     87   ret i32 %res
     88 }
     89