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