Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -march=x86 -mcpu=yonah -mattr=+sse2,-sse41 | FileCheck %s
      2 
      3 ; CHECK: vsel_float
      4 ; CHECK: pandn
      5 ; CHECK: pand
      6 ; CHECK: por
      7 ; CHECK: ret
      8 define void@vsel_float(<4 x float>* %v1, <4 x float>* %v2) {
      9   %A = load <4 x float>* %v1
     10   %B = load <4 x float>* %v2
     11   %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x float> %A, <4 x float> %B
     12   store <4 x float > %vsel, <4 x float>* %v1
     13   ret void
     14 }
     15 
     16 ; CHECK: vsel_i32
     17 ; CHECK: pandn
     18 ; CHECK: pand
     19 ; CHECK: por
     20 ; CHECK: ret
     21 define void@vsel_i32(<4 x i32>* %v1, <4 x i32>* %v2) {
     22   %A = load <4 x i32>* %v1
     23   %B = load <4 x i32>* %v2
     24   %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i32> %A, <4 x i32> %B
     25   store <4 x i32 > %vsel, <4 x i32>* %v1
     26   ret void
     27 }
     28 
     29 ; Without forcing instructions, fall back to the preferred PS domain.
     30 ; CHECK: vsel_i64
     31 ; CHECK: xorps
     32 ; CHECK: andps
     33 ; CHECK: andnps
     34 ; CHECK: orps
     35 ; CHECK: ret
     36 
     37 define void@vsel_i64(<4 x i64>* %v1, <4 x i64>* %v2) {
     38   %A = load <4 x i64>* %v1
     39   %B = load <4 x i64>* %v2
     40   %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i64> %A, <4 x i64> %B
     41   store <4 x i64 > %vsel, <4 x i64>* %v1
     42   ret void
     43 }
     44 
     45 ; Without forcing instructions, fall back to the preferred PS domain.
     46 ; CHECK: vsel_double
     47 ; CHECK: xorps
     48 ; CHECK: andps
     49 ; CHECK: andnps
     50 ; CHECK: orps
     51 ; CHECK: ret
     52 
     53 define void@vsel_double(<4 x double>* %v1, <4 x double>* %v2) {
     54   %A = load <4 x double>* %v1
     55   %B = load <4 x double>* %v2
     56   %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x double> %A, <4 x double> %B
     57   store <4 x double > %vsel, <4 x double>* %v1
     58   ret void
     59 }
     60 
     61 
     62