blob: c6602d3a3b422a2586c3598bd911debe096d8b60 [file] [log] [blame]
Nadav Rotem815af822011-10-19 20:43:16 +00001; RUN: llc < %s -march=x86 -mcpu=yonah -mattr=+sse2,-sse41 | FileCheck %s
Nadav Roteme1490d12011-09-13 19:59:18 +00002
Nadav Rotem815af822011-10-19 20:43:16 +00003; CHECK: vsel_float
4; CHECK: pandn
5; CHECK: pand
6; CHECK: por
7; CHECK: ret
Nadav Rotemaec58612011-09-13 19:17:42 +00008define 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
Nadav Rotem815af822011-10-19 20:43:16 +000016; CHECK: vsel_i32
17; CHECK: pandn
18; CHECK: pand
19; CHECK: por
20; CHECK: ret
Nadav Rotemaec58612011-09-13 19:17:42 +000021define 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
Jakob Stoklund Olesenb26c7722011-11-07 23:08:21 +000029; Without forcing instructions, fall back to the preferred PS domain.
Nadav Roteme1490d12011-09-13 19:59:18 +000030; CHECK: vsel_i64
Nadav Rotema46f35d2012-01-02 08:05:46 +000031; CHECK: pxor
32; CHECK: and
33; CHECK: andn
34; CHECK: or
Nadav Roteme1490d12011-09-13 19:59:18 +000035; CHECK: ret
Nadav Rotemaec58612011-09-13 19:17:42 +000036
37define 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
Jakob Stoklund Olesenb26c7722011-11-07 23:08:21 +000045; Without forcing instructions, fall back to the preferred PS domain.
Nadav Roteme1490d12011-09-13 19:59:18 +000046; CHECK: vsel_double
Nadav Rotema46f35d2012-01-02 08:05:46 +000047; CHECK: xor
48; CHECK: and
49; CHECK: andn
50; CHECK: or
Nadav Roteme1490d12011-09-13 19:59:18 +000051; CHECK: ret
52
Nadav Rotemaec58612011-09-13 19:17:42 +000053define 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