2f4317bf294c252f278745026bc209e5c74682b0
[oota-llvm.git] / test / CodeGen / X86 / sse2-blend.ll
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