Add a triple to switch.ll test.
[oota-llvm.git] / test / CodeGen / X86 / pr12312.ll
1 ; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=+sse4.1,-avx < %s | FileCheck %s --check-prefix SSE41
2 ; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=+avx,-avx2 < %s | FileCheck %s --check-prefix AVX
3
4 define i32 @veccond128(<4 x i32> %input) {
5 entry:
6   %0 = bitcast <4 x i32> %input to i128
7   %1 = icmp ne i128 %0, 0
8   br i1 %1, label %if-true-block, label %endif-block
9
10 if-true-block:                                    ; preds = %entry
11   ret i32 0
12 endif-block:                                      ; preds = %entry,
13   ret i32 1
14 ; SSE41: veccond128
15 ; SSE41: ptest
16 ; SSE41: ret
17 ; AVX:   veccond128
18 ; AVX:   vptest %xmm{{.*}}, %xmm{{.*}}
19 ; AVX:   ret
20 }
21
22 define i32 @veccond256(<8 x i32> %input) {
23 entry:
24   %0 = bitcast <8 x i32> %input to i256
25   %1 = icmp ne i256 %0, 0
26   br i1 %1, label %if-true-block, label %endif-block
27
28 if-true-block:                                    ; preds = %entry
29   ret i32 0
30 endif-block:                                      ; preds = %entry,
31   ret i32 1
32 ; SSE41: veccond256
33 ; SSE41: por
34 ; SSE41: ptest
35 ; SSE41: ret
36 ; AVX:   veccond256
37 ; AVX:   vptest %ymm{{.*}}, %ymm{{.*}}
38 ; AVX:   ret
39 }
40
41 define i32 @veccond512(<16 x i32> %input) {
42 entry:
43   %0 = bitcast <16 x i32> %input to i512
44   %1 = icmp ne i512 %0, 0
45   br i1 %1, label %if-true-block, label %endif-block
46
47 if-true-block:                                    ; preds = %entry
48   ret i32 0
49 endif-block:                                      ; preds = %entry,
50   ret i32 1
51 ; SSE41: veccond512
52 ; SSE41: por
53 ; SSE41: por
54 ; SSE41: por
55 ; SSE41: ptest
56 ; SSE41: ret
57 ; AVX:   veccond512
58 ; AVX:   vorps
59 ; AVX:   vptest %ymm{{.*}}, %ymm{{.*}}
60 ; AVX:   ret
61 }
62
63 define i32 @vectest128(<4 x i32> %input) {
64 entry:
65   %0 = bitcast <4 x i32> %input to i128
66   %1 = icmp ne i128 %0, 0
67   %2 = zext i1 %1 to i32
68   ret i32 %2
69 ; SSE41: vectest128
70 ; SSE41: ptest
71 ; SSE41: ret
72 ; AVX:   vectest128
73 ; AVX:   vptest %xmm{{.*}}, %xmm{{.*}}
74 ; AVX:   ret
75 }
76
77 define i32 @vectest256(<8 x i32> %input) {
78 entry:
79   %0 = bitcast <8 x i32> %input to i256
80   %1 = icmp ne i256 %0, 0
81   %2 = zext i1 %1 to i32
82   ret i32 %2
83 ; SSE41: vectest256
84 ; SSE41: por
85 ; SSE41: ptest
86 ; SSE41: ret
87 ; AVX:   vectest256
88 ; AVX:   vptest %ymm{{.*}}, %ymm{{.*}}
89 ; AVX:   ret
90 }
91
92 define i32 @vectest512(<16 x i32> %input) {
93 entry:
94   %0 = bitcast <16 x i32> %input to i512
95   %1 = icmp ne i512 %0, 0
96   %2 = zext i1 %1 to i32
97   ret i32 %2
98 ; SSE41: vectest512
99 ; SSE41: por
100 ; SSE41: por
101 ; SSE41: por
102 ; SSE41: ptest
103 ; SSE41: ret
104 ; AVX:   vectest512
105 ; AVX:   vorps
106 ; AVX:   vptest %ymm{{.*}}, %ymm{{.*}}
107 ; AVX:   ret
108 }
109
110 define i32 @vecsel128(<4 x i32> %input, i32 %a, i32 %b) {
111 entry:
112   %0 = bitcast <4 x i32> %input to i128
113   %1 = icmp ne i128 %0, 0
114   %2 = select i1 %1, i32 %a, i32 %b
115   ret i32 %2
116 ; SSE41: vecsel128
117 ; SSE41: ptest
118 ; SSE41: ret
119 ; AVX:   vecsel128
120 ; AVX:   vptest %xmm{{.*}}, %xmm{{.*}}
121 ; AVX:   ret
122 }
123
124 define i32 @vecsel256(<8 x i32> %input, i32 %a, i32 %b) {
125 entry:
126   %0 = bitcast <8 x i32> %input to i256
127   %1 = icmp ne i256 %0, 0
128   %2 = select i1 %1, i32 %a, i32 %b
129   ret i32 %2
130 ; SSE41: vecsel256
131 ; SSE41: por
132 ; SSE41: ptest
133 ; SSE41: ret
134 ; AVX:   vecsel256
135 ; AVX:   vptest %ymm{{.*}}, %ymm{{.*}}
136 ; AVX:   ret
137 }
138
139 define i32 @vecsel512(<16 x i32> %input, i32 %a, i32 %b) {
140 entry:
141   %0 = bitcast <16 x i32> %input to i512
142   %1 = icmp ne i512 %0, 0
143   %2 = select i1 %1, i32 %a, i32 %b
144   ret i32 %2
145 ; SSE41: vecsel512
146 ; SSE41: por
147 ; SSE41: por
148 ; SSE41: por
149 ; SSE41: ptest
150 ; SSE41: ret
151 ; AVX:   vecsel512
152 ; AVX:   vorps
153 ; AVX:   vptest %ymm{{.*}}, %ymm{{.*}}
154 ; AVX:   ret
155 }