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 LCPI0_0, %xmm1, %xmm0 14; CHECK-NEXT: vzeroupper 15; CHECK-NEXT: retl 16; CHECK-NEXT: LBB0_2: ## %bb2 17; CHECK-NEXT: vdivps LCPI0_0, %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 LCPI1_0, %xmm1, %xmm0 46; CHECK-NEXT: vzeroupper 47; CHECK-NEXT: retl 48; CHECK-NEXT: LBB1_2: ## %bb2 49; CHECK-NEXT: vdivps LCPI1_0, %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 LCPI2_0, %xmm1, %xmm0 78; CHECK-NEXT: vzeroupper 79; CHECK-NEXT: retl 80; CHECK-NEXT: LBB2_2: ## %bb2 81; CHECK-NEXT: vdivps LCPI2_0, %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 LCPI3_0, %xmm1, %xmm0 110; CHECK-NEXT: vzeroupper 111; CHECK-NEXT: retl 112; CHECK-NEXT: LBB3_2: ## %bb2 113; CHECK-NEXT: vdivps LCPI3_0, %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 LCPI4_0, %xmm1, %xmm0 142; CHECK-NEXT: vzeroupper 143; CHECK-NEXT: retl 144; CHECK-NEXT: LBB4_2: ## %bb2 145; CHECK-NEXT: vdivps LCPI4_0, %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 LCPI5_0, %xmm1, %xmm0 174; CHECK-NEXT: vzeroupper 175; CHECK-NEXT: retl 176; CHECK-NEXT: LBB5_2: ## %bb2 177; CHECK-NEXT: vdivps LCPI5_0, %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