Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=i386-apple-darwin10 -mcpu=corei7-avx -mattr=+avx | FileCheck %s
      3 
      4 declare i32 @llvm.x86.avx.ptestz.256(<4 x i64> %p1, <4 x i64> %p2) nounwind
      5 declare i32 @llvm.x86.avx.ptestc.256(<4 x i64> %p1, <4 x i64> %p2) nounwind
      6 
      7 define <4 x float> @test1(<4 x i64> %a, <4 x float> %b) nounwind {
      8 ; CHECK-LABEL: test1:
      9 ; CHECK:       ## %bb.0: ## %entry
     10 ; CHECK-NEXT:    vptest %ymm0, %ymm0
     11 ; CHECK-NEXT:    jne LBB0_2
     12 ; CHECK-NEXT:  ## %bb.1: ## %bb1
     13 ; CHECK-NEXT:    vaddps LCPI0_0, %xmm1, %xmm0
     14 ; CHECK-NEXT:    vzeroupper
     15 ; CHECK-NEXT:    retl
     16 ; CHECK-NEXT:  LBB0_2: ## %bb2
     17 ; CHECK-NEXT:    vdivps LCPI0_0, %xmm1, %xmm0
     18 ; CHECK-NEXT:    vzeroupper
     19 ; CHECK-NEXT:    retl
     20 entry:
     21 
     22   %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
     23   %one = icmp ne i32 %res, 0
     24   br i1 %one, label %bb1, label %bb2
     25 
     26 bb1:
     27   %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
     28   br label %return
     29 
     30 bb2:
     31 	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
     32 	br label %return
     33 
     34 return:
     35   %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
     36   ret <4 x float> %e
     37 }
     38 
     39 define <4 x float> @test3(<4 x i64> %a, <4 x float> %b) nounwind {
     40 ; CHECK-LABEL: test3:
     41 ; CHECK:       ## %bb.0: ## %entry
     42 ; CHECK-NEXT:    vptest %ymm0, %ymm0
     43 ; CHECK-NEXT:    jne LBB1_2
     44 ; CHECK-NEXT:  ## %bb.1: ## %bb1
     45 ; CHECK-NEXT:    vaddps LCPI1_0, %xmm1, %xmm0
     46 ; CHECK-NEXT:    vzeroupper
     47 ; CHECK-NEXT:    retl
     48 ; CHECK-NEXT:  LBB1_2: ## %bb2
     49 ; CHECK-NEXT:    vdivps LCPI1_0, %xmm1, %xmm0
     50 ; CHECK-NEXT:    vzeroupper
     51 ; CHECK-NEXT:    retl
     52 entry:
     53 
     54   %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
     55   %one = trunc i32 %res to i1
     56   br i1 %one, label %bb1, label %bb2
     57 
     58 bb1:
     59   %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
     60   br label %return
     61 
     62 bb2:
     63 	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
     64 	br label %return
     65 
     66 return:
     67   %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
     68   ret <4 x float> %e
     69 }
     70 
     71 define <4 x float> @test4(<4 x i64> %a, <4 x float> %b) nounwind {
     72 ; CHECK-LABEL: test4:
     73 ; CHECK:       ## %bb.0: ## %entry
     74 ; CHECK-NEXT:    vptest %ymm0, %ymm0
     75 ; CHECK-NEXT:    jae LBB2_2
     76 ; CHECK-NEXT:  ## %bb.1: ## %bb1
     77 ; CHECK-NEXT:    vaddps LCPI2_0, %xmm1, %xmm0
     78 ; CHECK-NEXT:    vzeroupper
     79 ; CHECK-NEXT:    retl
     80 ; CHECK-NEXT:  LBB2_2: ## %bb2
     81 ; CHECK-NEXT:    vdivps LCPI2_0, %xmm1, %xmm0
     82 ; CHECK-NEXT:    vzeroupper
     83 ; CHECK-NEXT:    retl
     84 entry:
     85 
     86   %res = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %a, <4 x i64> %a) nounwind
     87   %one = icmp ne i32 %res, 0
     88   br i1 %one, label %bb1, label %bb2
     89 
     90 bb1:
     91   %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
     92   br label %return
     93 
     94 bb2:
     95 	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
     96 	br label %return
     97 
     98 return:
     99   %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
    100   ret <4 x float> %e
    101 }
    102 
    103 define <4 x float> @test6(<4 x i64> %a, <4 x float> %b) nounwind {
    104 ; CHECK-LABEL: test6:
    105 ; CHECK:       ## %bb.0: ## %entry
    106 ; CHECK-NEXT:    vptest %ymm0, %ymm0
    107 ; CHECK-NEXT:    jae LBB3_2
    108 ; CHECK-NEXT:  ## %bb.1: ## %bb1
    109 ; CHECK-NEXT:    vaddps LCPI3_0, %xmm1, %xmm0
    110 ; CHECK-NEXT:    vzeroupper
    111 ; CHECK-NEXT:    retl
    112 ; CHECK-NEXT:  LBB3_2: ## %bb2
    113 ; CHECK-NEXT:    vdivps LCPI3_0, %xmm1, %xmm0
    114 ; CHECK-NEXT:    vzeroupper
    115 ; CHECK-NEXT:    retl
    116 entry:
    117 
    118   %res = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %a, <4 x i64> %a) nounwind
    119   %one = trunc i32 %res to i1
    120   br i1 %one, label %bb1, label %bb2
    121 
    122 bb1:
    123   %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
    124   br label %return
    125 
    126 bb2:
    127 	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
    128 	br label %return
    129 
    130 return:
    131   %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
    132   ret <4 x float> %e
    133 }
    134 
    135 define <4 x float> @test7(<4 x i64> %a, <4 x float> %b) nounwind {
    136 ; CHECK-LABEL: test7:
    137 ; CHECK:       ## %bb.0: ## %entry
    138 ; CHECK-NEXT:    vptest %ymm0, %ymm0
    139 ; CHECK-NEXT:    jne LBB4_2
    140 ; CHECK-NEXT:  ## %bb.1: ## %bb1
    141 ; CHECK-NEXT:    vaddps LCPI4_0, %xmm1, %xmm0
    142 ; CHECK-NEXT:    vzeroupper
    143 ; CHECK-NEXT:    retl
    144 ; CHECK-NEXT:  LBB4_2: ## %bb2
    145 ; CHECK-NEXT:    vdivps LCPI4_0, %xmm1, %xmm0
    146 ; CHECK-NEXT:    vzeroupper
    147 ; CHECK-NEXT:    retl
    148 entry:
    149 
    150   %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
    151   %one = icmp eq i32 %res, 1
    152   br i1 %one, label %bb1, label %bb2
    153 
    154 bb1:
    155   %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
    156   br label %return
    157 
    158 bb2:
    159 	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
    160 	br label %return
    161 
    162 return:
    163   %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
    164   ret <4 x float> %e
    165 }
    166 
    167 define <4 x float> @test8(<4 x i64> %a, <4 x float> %b) nounwind {
    168 ; CHECK-LABEL: test8:
    169 ; CHECK:       ## %bb.0: ## %entry
    170 ; CHECK-NEXT:    vptest %ymm0, %ymm0
    171 ; CHECK-NEXT:    je LBB5_2
    172 ; CHECK-NEXT:  ## %bb.1: ## %bb1
    173 ; CHECK-NEXT:    vaddps LCPI5_0, %xmm1, %xmm0
    174 ; CHECK-NEXT:    vzeroupper
    175 ; CHECK-NEXT:    retl
    176 ; CHECK-NEXT:  LBB5_2: ## %bb2
    177 ; CHECK-NEXT:    vdivps LCPI5_0, %xmm1, %xmm0
    178 ; CHECK-NEXT:    vzeroupper
    179 ; CHECK-NEXT:    retl
    180 entry:
    181 
    182   %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
    183   %one = icmp ne i32 %res, 1
    184   br i1 %one, label %bb1, label %bb2
    185 
    186 bb1:
    187   %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
    188   br label %return
    189 
    190 bb2:
    191 	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
    192 	br label %return
    193 
    194 return:
    195   %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
    196   ret <4 x float> %e
    197 }
    198 
    199 
    200