1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i386-apple-darwin10 -mcpu=corei7-avx -mattr=+avx | FileCheck %s
3
4declare i32 @llvm.x86.avx.ptestz.256(<4 x i64> %p1, <4 x i64> %p2) nounwind
5declare i32 @llvm.x86.avx.ptestc.256(<4 x i64> %p1, <4 x i64> %p2) nounwind
6
7define <4 x float> @test1(<4 x i64> %a, <4 x float> %b) nounwind {
8; CHECK-LABEL: test1:
9; CHECK:       ## %bb.0: ## %entry
10; CHECK-NEXT:    vptest %ymm0, %ymm0
11; CHECK-NEXT:    jne LBB0_2
12; CHECK-NEXT:  ## %bb.1: ## %bb1
13; CHECK-NEXT:    vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
14; CHECK-NEXT:    vzeroupper
15; CHECK-NEXT:    retl
16; CHECK-NEXT:  LBB0_2: ## %bb2
17; CHECK-NEXT:    vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
18; CHECK-NEXT:    vzeroupper
19; CHECK-NEXT:    retl
20entry:
21
22  %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
23  %one = icmp ne i32 %res, 0
24  br i1 %one, label %bb1, label %bb2
25
26bb1:
27  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
28  br label %return
29
30bb2:
31	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
32	br label %return
33
34return:
35  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
36  ret <4 x float> %e
37}
38
39define <4 x float> @test3(<4 x i64> %a, <4 x float> %b) nounwind {
40; CHECK-LABEL: test3:
41; CHECK:       ## %bb.0: ## %entry
42; CHECK-NEXT:    vptest %ymm0, %ymm0
43; CHECK-NEXT:    jne LBB1_2
44; CHECK-NEXT:  ## %bb.1: ## %bb1
45; CHECK-NEXT:    vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
46; CHECK-NEXT:    vzeroupper
47; CHECK-NEXT:    retl
48; CHECK-NEXT:  LBB1_2: ## %bb2
49; CHECK-NEXT:    vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
50; CHECK-NEXT:    vzeroupper
51; CHECK-NEXT:    retl
52entry:
53
54  %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
55  %one = trunc i32 %res to i1
56  br i1 %one, label %bb1, label %bb2
57
58bb1:
59  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
60  br label %return
61
62bb2:
63	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
64	br label %return
65
66return:
67  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
68  ret <4 x float> %e
69}
70
71define <4 x float> @test4(<4 x i64> %a, <4 x float> %b) nounwind {
72; CHECK-LABEL: test4:
73; CHECK:       ## %bb.0: ## %entry
74; CHECK-NEXT:    vptest %ymm0, %ymm0
75; CHECK-NEXT:    jae LBB2_2
76; CHECK-NEXT:  ## %bb.1: ## %bb1
77; CHECK-NEXT:    vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
78; CHECK-NEXT:    vzeroupper
79; CHECK-NEXT:    retl
80; CHECK-NEXT:  LBB2_2: ## %bb2
81; CHECK-NEXT:    vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
82; CHECK-NEXT:    vzeroupper
83; CHECK-NEXT:    retl
84entry:
85
86  %res = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %a, <4 x i64> %a) nounwind
87  %one = icmp ne i32 %res, 0
88  br i1 %one, label %bb1, label %bb2
89
90bb1:
91  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
92  br label %return
93
94bb2:
95	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
96	br label %return
97
98return:
99  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
100  ret <4 x float> %e
101}
102
103define <4 x float> @test6(<4 x i64> %a, <4 x float> %b) nounwind {
104; CHECK-LABEL: test6:
105; CHECK:       ## %bb.0: ## %entry
106; CHECK-NEXT:    vptest %ymm0, %ymm0
107; CHECK-NEXT:    jae LBB3_2
108; CHECK-NEXT:  ## %bb.1: ## %bb1
109; CHECK-NEXT:    vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
110; CHECK-NEXT:    vzeroupper
111; CHECK-NEXT:    retl
112; CHECK-NEXT:  LBB3_2: ## %bb2
113; CHECK-NEXT:    vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
114; CHECK-NEXT:    vzeroupper
115; CHECK-NEXT:    retl
116entry:
117
118  %res = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %a, <4 x i64> %a) nounwind
119  %one = trunc i32 %res to i1
120  br i1 %one, label %bb1, label %bb2
121
122bb1:
123  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
124  br label %return
125
126bb2:
127	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
128	br label %return
129
130return:
131  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
132  ret <4 x float> %e
133}
134
135define <4 x float> @test7(<4 x i64> %a, <4 x float> %b) nounwind {
136; CHECK-LABEL: test7:
137; CHECK:       ## %bb.0: ## %entry
138; CHECK-NEXT:    vptest %ymm0, %ymm0
139; CHECK-NEXT:    jne LBB4_2
140; CHECK-NEXT:  ## %bb.1: ## %bb1
141; CHECK-NEXT:    vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
142; CHECK-NEXT:    vzeroupper
143; CHECK-NEXT:    retl
144; CHECK-NEXT:  LBB4_2: ## %bb2
145; CHECK-NEXT:    vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
146; CHECK-NEXT:    vzeroupper
147; CHECK-NEXT:    retl
148entry:
149
150  %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
151  %one = icmp eq i32 %res, 1
152  br i1 %one, label %bb1, label %bb2
153
154bb1:
155  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
156  br label %return
157
158bb2:
159	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
160	br label %return
161
162return:
163  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
164  ret <4 x float> %e
165}
166
167define <4 x float> @test8(<4 x i64> %a, <4 x float> %b) nounwind {
168; CHECK-LABEL: test8:
169; CHECK:       ## %bb.0: ## %entry
170; CHECK-NEXT:    vptest %ymm0, %ymm0
171; CHECK-NEXT:    je LBB5_2
172; CHECK-NEXT:  ## %bb.1: ## %bb1
173; CHECK-NEXT:    vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
174; CHECK-NEXT:    vzeroupper
175; CHECK-NEXT:    retl
176; CHECK-NEXT:  LBB5_2: ## %bb2
177; CHECK-NEXT:    vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0
178; CHECK-NEXT:    vzeroupper
179; CHECK-NEXT:    retl
180entry:
181
182  %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind
183  %one = icmp ne i32 %res, 1
184  br i1 %one, label %bb1, label %bb2
185
186bb1:
187  %c = fadd <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
188  br label %return
189
190bb2:
191	%d = fdiv <4 x float> %b, < float 1.000000e+002, float 2.000000e+002, float 3.000000e+002, float 4.000000e+002 >
192	br label %return
193
194return:
195  %e = phi <4 x float> [%c, %bb1], [%d, %bb2]
196  ret <4 x float> %e
197}
198
199
200