200 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i386-apple-darwin10 -mcpu=corei7-avx -mattr=+avx | FileCheck %s3 4declare i32 @llvm.x86.avx.ptestz.256(<4 x i64> %p1, <4 x i64> %p2) nounwind5declare i32 @llvm.x86.avx.ptestc.256(<4 x i64> %p1, <4 x i64> %p2) nounwind6 7define <4 x float> @test1(<4 x i64> %a, <4 x float> %b) nounwind {8; CHECK-LABEL: test1:9; CHECK: ## %bb.0: ## %entry10; CHECK-NEXT: vptest %ymm0, %ymm011; CHECK-NEXT: jne LBB0_212; CHECK-NEXT: ## %bb.1: ## %bb113; CHECK-NEXT: vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm014; CHECK-NEXT: vzeroupper15; CHECK-NEXT: retl16; CHECK-NEXT: LBB0_2: ## %bb217; CHECK-NEXT: vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm018; CHECK-NEXT: vzeroupper19; CHECK-NEXT: retl20entry:21 22 %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind23 %one = icmp ne i32 %res, 024 br i1 %one, label %bb1, label %bb225 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 %return29 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 %return33 34return:35 %e = phi <4 x float> [%c, %bb1], [%d, %bb2]36 ret <4 x float> %e37}38 39define <4 x float> @test3(<4 x i64> %a, <4 x float> %b) nounwind {40; CHECK-LABEL: test3:41; CHECK: ## %bb.0: ## %entry42; CHECK-NEXT: vptest %ymm0, %ymm043; CHECK-NEXT: jne LBB1_244; CHECK-NEXT: ## %bb.1: ## %bb145; CHECK-NEXT: vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm046; CHECK-NEXT: vzeroupper47; CHECK-NEXT: retl48; CHECK-NEXT: LBB1_2: ## %bb249; CHECK-NEXT: vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm050; CHECK-NEXT: vzeroupper51; CHECK-NEXT: retl52entry:53 54 %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind55 %one = trunc i32 %res to i156 br i1 %one, label %bb1, label %bb257 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 %return61 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 %return65 66return:67 %e = phi <4 x float> [%c, %bb1], [%d, %bb2]68 ret <4 x float> %e69}70 71define <4 x float> @test4(<4 x i64> %a, <4 x float> %b) nounwind {72; CHECK-LABEL: test4:73; CHECK: ## %bb.0: ## %entry74; CHECK-NEXT: vptest %ymm0, %ymm075; CHECK-NEXT: jae LBB2_276; CHECK-NEXT: ## %bb.1: ## %bb177; CHECK-NEXT: vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm078; CHECK-NEXT: vzeroupper79; CHECK-NEXT: retl80; CHECK-NEXT: LBB2_2: ## %bb281; CHECK-NEXT: vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm082; CHECK-NEXT: vzeroupper83; CHECK-NEXT: retl84entry:85 86 %res = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %a, <4 x i64> %a) nounwind87 %one = icmp ne i32 %res, 088 br i1 %one, label %bb1, label %bb289 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 %return93 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 %return97 98return:99 %e = phi <4 x float> [%c, %bb1], [%d, %bb2]100 ret <4 x float> %e101}102 103define <4 x float> @test6(<4 x i64> %a, <4 x float> %b) nounwind {104; CHECK-LABEL: test6:105; CHECK: ## %bb.0: ## %entry106; CHECK-NEXT: vptest %ymm0, %ymm0107; CHECK-NEXT: jae LBB3_2108; CHECK-NEXT: ## %bb.1: ## %bb1109; CHECK-NEXT: vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0110; CHECK-NEXT: vzeroupper111; CHECK-NEXT: retl112; CHECK-NEXT: LBB3_2: ## %bb2113; CHECK-NEXT: vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0114; CHECK-NEXT: vzeroupper115; CHECK-NEXT: retl116entry:117 118 %res = call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %a, <4 x i64> %a) nounwind119 %one = trunc i32 %res to i1120 br i1 %one, label %bb1, label %bb2121 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 %return125 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 %return129 130return:131 %e = phi <4 x float> [%c, %bb1], [%d, %bb2]132 ret <4 x float> %e133}134 135define <4 x float> @test7(<4 x i64> %a, <4 x float> %b) nounwind {136; CHECK-LABEL: test7:137; CHECK: ## %bb.0: ## %entry138; CHECK-NEXT: vptest %ymm0, %ymm0139; CHECK-NEXT: jne LBB4_2140; CHECK-NEXT: ## %bb.1: ## %bb1141; CHECK-NEXT: vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0142; CHECK-NEXT: vzeroupper143; CHECK-NEXT: retl144; CHECK-NEXT: LBB4_2: ## %bb2145; CHECK-NEXT: vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0146; CHECK-NEXT: vzeroupper147; CHECK-NEXT: retl148entry:149 150 %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind151 %one = icmp eq i32 %res, 1152 br i1 %one, label %bb1, label %bb2153 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 %return157 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 %return161 162return:163 %e = phi <4 x float> [%c, %bb1], [%d, %bb2]164 ret <4 x float> %e165}166 167define <4 x float> @test8(<4 x i64> %a, <4 x float> %b) nounwind {168; CHECK-LABEL: test8:169; CHECK: ## %bb.0: ## %entry170; CHECK-NEXT: vptest %ymm0, %ymm0171; CHECK-NEXT: je LBB5_2172; CHECK-NEXT: ## %bb.1: ## %bb1173; CHECK-NEXT: vaddps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0174; CHECK-NEXT: vzeroupper175; CHECK-NEXT: retl176; CHECK-NEXT: LBB5_2: ## %bb2177; CHECK-NEXT: vdivps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1, %xmm0178; CHECK-NEXT: vzeroupper179; CHECK-NEXT: retl180entry:181 182 %res = call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %a, <4 x i64> %a) nounwind183 %one = icmp ne i32 %res, 1184 br i1 %one, label %bb1, label %bb2185 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 %return189 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 %return193 194return:195 %e = phi <4 x float> [%c, %bb1], [%d, %bb2]196 ret <4 x float> %e197}198 199 200