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