Add AVX versions of blend vector operations and fix some issues noticed
[oota-llvm.git] / test / CodeGen / X86 / avx-blend.ll
1 ; RUN: llc < %s -mattr=+avx -march=x86 | FileCheck %s
2
3 ;CHECK: vsel_float
4 ;CHECK: vblendvps
5 ;CHECK: ret
6 define <4 x float> @vsel_float(<4 x float> %v1, <4 x float> %v2) {
7   %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x float> %v1, <4 x float> %v2
8   ret <4 x float> %vsel
9 }
10
11
12 ;CHECK: vsel_i32
13 ;CHECK: vblendvps
14 ;CHECK: ret
15 define <4 x i32> @vsel_i32(<4 x i32> %v1, <4 x i32> %v2) {
16   %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i32> %v1, <4 x i32> %v2
17   ret <4 x i32> %vsel
18 }
19
20
21 ;CHECK: vsel_double
22 ;CHECK: vblendvpd
23 ;CHECK: ret
24 define <2 x double> @vsel_double(<2 x double> %v1, <2 x double> %v2) {
25   %vsel = select <2 x i1> <i1 true, i1 false>, <2 x double> %v1, <2 x double> %v2
26   ret <2 x double> %vsel
27 }
28
29
30 ;CHECK: vsel_i64
31 ;CHECK: vblendvpd
32 ;CHECK: ret
33 define <2 x i64> @vsel_i64(<2 x i64> %v1, <2 x i64> %v2) {
34   %vsel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %v1, <2 x i64> %v2
35   ret <2 x i64> %vsel
36 }
37
38
39 ;CHECK: vsel_i8
40 ;CHECK: vpblendvb
41 ;CHECK: ret
42 define <16 x i8> @vsel_i8(<16 x i8> %v1, <16 x i8> %v2) {
43   %vsel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i8> %v1, <16 x i8> %v2
44   ret <16 x i8> %vsel
45 }
46
47