xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx-brcond.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i386-apple-darwin10 -mcpu=corei7-avx -mattr=+avx | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.avx.ptestz.256(<4 x i64> %p1, <4 x i64> %p2) nounwind
4*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.avx.ptestc.256(<4 x i64> %p1, <4 x i64> %p2) nounwind
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test1(<4 x i64> %a, <4 x float> %b) nounwind {
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1:
9*9880d681SAndroid Build Coastguard Worker; CHECK: vptest
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	jne
11*9880d681SAndroid Build Coastguard Worker; CHECK: ret
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
14*9880d681SAndroid Build Coastguard Worker  %one = icmp ne i32 %res, 0
15*9880d681SAndroid Build Coastguard Worker  br i1 %one, label %bb1, label %bb2
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerbb1:
18*9880d681SAndroid Build Coastguard Worker  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
19*9880d681SAndroid Build Coastguard Worker  br label %return
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerbb2:
22*9880d681SAndroid Build Coastguard Worker	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
23*9880d681SAndroid Build Coastguard Worker	br label %return
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerreturn:
26*9880d681SAndroid Build Coastguard Worker  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
27*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %e
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test3(<4 x i64> %a, <4 x float> %b) nounwind {
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3:
33*9880d681SAndroid Build Coastguard Worker; CHECK: vptest
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	jne
35*9880d681SAndroid Build Coastguard Worker; CHECK: ret
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
38*9880d681SAndroid Build Coastguard Worker  %one = trunc i32 %res to i1
39*9880d681SAndroid Build Coastguard Worker  br i1 %one, label %bb1, label %bb2
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerbb1:
42*9880d681SAndroid Build Coastguard Worker  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
43*9880d681SAndroid Build Coastguard Worker  br label %return
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerbb2:
46*9880d681SAndroid Build Coastguard Worker	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
47*9880d681SAndroid Build Coastguard Worker	br label %return
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerreturn:
50*9880d681SAndroid Build Coastguard Worker  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
51*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %e
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test4(<4 x i64> %a, <4 x float> %b) nounwind {
55*9880d681SAndroid Build Coastguard Workerentry:
56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4:
57*9880d681SAndroid Build Coastguard Worker; CHECK: vptest
58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	jae
59*9880d681SAndroid Build Coastguard Worker; CHECK: ret
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %a, <4 x i64> %a) nounwind
62*9880d681SAndroid Build Coastguard Worker  %one = icmp ne i32 %res, 0
63*9880d681SAndroid Build Coastguard Worker  br i1 %one, label %bb1, label %bb2
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Workerbb1:
66*9880d681SAndroid Build Coastguard Worker  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
67*9880d681SAndroid Build Coastguard Worker  br label %return
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerbb2:
70*9880d681SAndroid Build Coastguard Worker	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
71*9880d681SAndroid Build Coastguard Worker	br label %return
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerreturn:
74*9880d681SAndroid Build Coastguard Worker  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
75*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %e
76*9880d681SAndroid Build Coastguard Worker}
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test6(<4 x i64> %a, <4 x float> %b) nounwind {
79*9880d681SAndroid Build Coastguard Workerentry:
80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test6:
81*9880d681SAndroid Build Coastguard Worker; CHECK: vptest
82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	jae
83*9880d681SAndroid Build Coastguard Worker; CHECK: ret
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %a, <4 x i64> %a) nounwind
86*9880d681SAndroid Build Coastguard Worker  %one = trunc i32 %res to i1
87*9880d681SAndroid Build Coastguard Worker  br i1 %one, label %bb1, label %bb2
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workerbb1:
90*9880d681SAndroid Build Coastguard Worker  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
91*9880d681SAndroid Build Coastguard Worker  br label %return
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerbb2:
94*9880d681SAndroid Build Coastguard Worker	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
95*9880d681SAndroid Build Coastguard Worker	br label %return
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Workerreturn:
98*9880d681SAndroid Build Coastguard Worker  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
99*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %e
100*9880d681SAndroid Build Coastguard Worker}
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test7(<4 x i64> %a, <4 x float> %b) nounwind {
103*9880d681SAndroid Build Coastguard Workerentry:
104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test7:
105*9880d681SAndroid Build Coastguard Worker; CHECK: vptest
106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	jne
107*9880d681SAndroid Build Coastguard Worker; CHECK: ret
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
110*9880d681SAndroid Build Coastguard Worker  %one = icmp eq i32 %res, 1
111*9880d681SAndroid Build Coastguard Worker  br i1 %one, label %bb1, label %bb2
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerbb1:
114*9880d681SAndroid Build Coastguard Worker  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
115*9880d681SAndroid Build Coastguard Worker  br label %return
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerbb2:
118*9880d681SAndroid Build Coastguard Worker	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
119*9880d681SAndroid Build Coastguard Worker	br label %return
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerreturn:
122*9880d681SAndroid Build Coastguard Worker  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
123*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %e
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test8(<4 x i64> %a, <4 x float> %b) nounwind {
127*9880d681SAndroid Build Coastguard Workerentry:
128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8:
129*9880d681SAndroid Build Coastguard Worker; CHECK: vptest
130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:	je
131*9880d681SAndroid Build Coastguard Worker; CHECK: ret
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
134*9880d681SAndroid Build Coastguard Worker  %one = icmp ne i32 %res, 1
135*9880d681SAndroid Build Coastguard Worker  br i1 %one, label %bb1, label %bb2
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Workerbb1:
138*9880d681SAndroid Build Coastguard Worker  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
139*9880d681SAndroid Build Coastguard Worker  br label %return
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerbb2:
142*9880d681SAndroid Build Coastguard Worker	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
143*9880d681SAndroid Build Coastguard Worker	br label %return
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Workerreturn:
146*9880d681SAndroid Build Coastguard Worker  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
147*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %e
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker
151