• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 -promote-elements -mattr=+sse41 | FileCheck %s
2
3;CHECK: vsel_float
4;CHECK: blendvps
5;CHECK: ret
6define <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_4xi8
13;CHECK: blendvps
14;CHECK: ret
15define <4 x i8> @vsel_4xi8(<4 x i8> %v1, <4 x i8> %v2) {
16  %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i8> %v1, <4 x i8> %v2
17  ret <4 x i8> %vsel
18}
19
20;CHECK: vsel_4xi16
21;CHECK: blendvps
22;CHECK: ret
23define <4 x i16> @vsel_4xi16(<4 x i16> %v1, <4 x i16> %v2) {
24  %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i16> %v1, <4 x i16> %v2
25  ret <4 x i16> %vsel
26}
27
28
29;CHECK: vsel_i32
30;CHECK: blendvps
31;CHECK: ret
32define <4 x i32> @vsel_i32(<4 x i32> %v1, <4 x i32> %v2) {
33  %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i32> %v1, <4 x i32> %v2
34  ret <4 x i32> %vsel
35}
36
37
38;CHECK: vsel_double
39;CHECK: blendvpd
40;CHECK: ret
41define <4 x double> @vsel_double(<4 x double> %v1, <4 x double> %v2) {
42  %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x double> %v1, <4 x double> %v2
43  ret <4 x double> %vsel
44}
45
46
47;CHECK: vsel_i64
48;CHECK: blendvpd
49;CHECK: ret
50define <4 x i64> @vsel_i64(<4 x i64> %v1, <4 x i64> %v2) {
51  %vsel = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i64> %v1, <4 x i64> %v2
52  ret <4 x i64> %vsel
53}
54
55
56;CHECK: vsel_i8
57;CHECK: pblendvb
58;CHECK: ret
59define <16 x i8> @vsel_i8(<16 x i8> %v1, <16 x i8> %v2) {
60  %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
61  ret <16 x i8> %vsel
62}
63
64;; TEST blend + compares
65; CHECK: A
66define <2 x double> @A(<2 x double> %x, <2 x double> %y) {
67  ; CHECK: cmplepd
68  ; CHECK: blendvpd
69  %max_is_x = fcmp oge <2 x double> %x, %y
70  %max = select <2 x i1> %max_is_x, <2 x double> %x, <2 x double> %y
71  ret <2 x double> %max
72}
73
74; CHECK: B
75define <2 x double> @B(<2 x double> %x, <2 x double> %y) {
76  ; CHECK: cmpnlepd
77  ; CHECK: blendvpd
78  %min_is_x = fcmp ult <2 x double> %x, %y
79  %min = select <2 x i1> %min_is_x, <2 x double> %x, <2 x double> %y
80  ret <2 x double> %min
81}
82
83