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