1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=corei7-avx -mattr=+avx | FileCheck %s 2*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 3*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-darwin11" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; This test would create a vpand %ymm instruction that is only legal in AVX2. 6*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vpand %ymm 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.avx.movmsk.ps.256(<8 x float>) nounwind readnone 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine void @ShadeTile() nounwind { 11*9880d681SAndroid Build Coastguard Workerallocas: 12*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if_then, label %if_else 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerif_then: ; preds = %allocas 15*9880d681SAndroid Build Coastguard Worker unreachable 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerif_else: ; preds = %allocas 18*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for_loop156.lr.ph, label %if_exit 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerfor_loop156.lr.ph: ; preds = %if_else 21*9880d681SAndroid Build Coastguard Worker %val_6.i21244 = load i16, i16* undef, align 2 22*9880d681SAndroid Build Coastguard Worker %0 = insertelement <8 x i16> undef, i16 %val_6.i21244, i32 6 23*9880d681SAndroid Build Coastguard Worker %val_7.i21248 = load i16, i16* undef, align 2 24*9880d681SAndroid Build Coastguard Worker %1 = insertelement <8 x i16> %0, i16 %val_7.i21248, i32 7 25*9880d681SAndroid Build Coastguard Worker %uint2uint32.i20206 = zext <8 x i16> %1 to <8 x i32> 26*9880d681SAndroid Build Coastguard Worker %bitop5.i20208 = and <8 x i32> %uint2uint32.i20206, <i32 31744, i32 31744, i32 31744, i32 31744, i32 31744, i32 31744, i32 31744, i32 31744> 27*9880d681SAndroid Build Coastguard Worker %bitop8.i20209 = and <8 x i32> %uint2uint32.i20206, <i32 1023, i32 1023, i32 1023, i32 1023, i32 1023, i32 1023, i32 1023, i32 1023> 28*9880d681SAndroid Build Coastguard Worker %bitop12.i20211 = lshr <8 x i32> %bitop5.i20208, <i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10> 29*9880d681SAndroid Build Coastguard Worker %binop13.i20212 = add <8 x i32> %bitop12.i20211, <i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112, i32 112> 30*9880d681SAndroid Build Coastguard Worker %bitop15.i20213 = shl <8 x i32> %binop13.i20212, <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23> 31*9880d681SAndroid Build Coastguard Worker %bitop17.i20214 = shl <8 x i32> %bitop8.i20209, <i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13> 32*9880d681SAndroid Build Coastguard Worker %bitop20.i20215 = or <8 x i32> undef, %bitop15.i20213 33*9880d681SAndroid Build Coastguard Worker %bitop22.i20216 = or <8 x i32> %bitop20.i20215, %bitop17.i20214 34*9880d681SAndroid Build Coastguard Worker %int_to_float_bitcast.i.i.i20217 = bitcast <8 x i32> %bitop22.i20216 to <8 x float> 35*9880d681SAndroid Build Coastguard Worker %binop401 = fmul <8 x float> undef, <float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00> 36*9880d681SAndroid Build Coastguard Worker %binop402 = fadd <8 x float> %binop401, <float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00> 37*9880d681SAndroid Build Coastguard Worker %binop403 = fmul <8 x float> zeroinitializer, %binop402 38*9880d681SAndroid Build Coastguard Worker %binop406 = fmul <8 x float> %int_to_float_bitcast.i.i.i20217, <float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00, float 4.000000e+00> 39*9880d681SAndroid Build Coastguard Worker %binop407 = fadd <8 x float> %binop406, <float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00> 40*9880d681SAndroid Build Coastguard Worker %binop408 = fmul <8 x float> zeroinitializer, %binop407 41*9880d681SAndroid Build Coastguard Worker %binop411 = fsub <8 x float> <float 3.000000e+00, float 3.000000e+00, float 3.000000e+00, float 3.000000e+00, float 3.000000e+00, float 3.000000e+00, float 3.000000e+00, float 3.000000e+00>, undef 42*9880d681SAndroid Build Coastguard Worker %val_4.i21290 = load i16, i16* undef, align 2 43*9880d681SAndroid Build Coastguard Worker %2 = insertelement <8 x i16> undef, i16 %val_4.i21290, i32 4 44*9880d681SAndroid Build Coastguard Worker %val_5.i21294 = load i16, i16* undef, align 2 45*9880d681SAndroid Build Coastguard Worker %3 = insertelement <8 x i16> %2, i16 %val_5.i21294, i32 5 46*9880d681SAndroid Build Coastguard Worker %val_6.i21298 = load i16, i16* undef, align 2 47*9880d681SAndroid Build Coastguard Worker %4 = insertelement <8 x i16> %3, i16 %val_6.i21298, i32 6 48*9880d681SAndroid Build Coastguard Worker %ptr_7.i21301 = inttoptr i64 undef to i16* 49*9880d681SAndroid Build Coastguard Worker %val_7.i21302 = load i16, i16* %ptr_7.i21301, align 2 50*9880d681SAndroid Build Coastguard Worker %5 = insertelement <8 x i16> %4, i16 %val_7.i21302, i32 7 51*9880d681SAndroid Build Coastguard Worker %uint2uint32.i20218 = zext <8 x i16> %5 to <8 x i32> 52*9880d681SAndroid Build Coastguard Worker %structelement561 = load i8*, i8** undef, align 8 53*9880d681SAndroid Build Coastguard Worker %ptr2int563 = ptrtoint i8* %structelement561 to i64 54*9880d681SAndroid Build Coastguard Worker %smear.ptr_smear7571 = insertelement <8 x i64> undef, i64 %ptr2int563, i32 7 55*9880d681SAndroid Build Coastguard Worker %new_ptr582 = add <8 x i64> %smear.ptr_smear7571, zeroinitializer 56*9880d681SAndroid Build Coastguard Worker %val_5.i21509 = load i8, i8* null, align 1 57*9880d681SAndroid Build Coastguard Worker %6 = insertelement <8 x i8> undef, i8 %val_5.i21509, i32 5 58*9880d681SAndroid Build Coastguard Worker %7 = insertelement <8 x i8> %6, i8 undef, i32 6 59*9880d681SAndroid Build Coastguard Worker %iptr_7.i21515 = extractelement <8 x i64> %new_ptr582, i32 7 60*9880d681SAndroid Build Coastguard Worker %ptr_7.i21516 = inttoptr i64 %iptr_7.i21515 to i8* 61*9880d681SAndroid Build Coastguard Worker %val_7.i21517 = load i8, i8* %ptr_7.i21516, align 1 62*9880d681SAndroid Build Coastguard Worker %8 = insertelement <8 x i8> %7, i8 %val_7.i21517, i32 7 63*9880d681SAndroid Build Coastguard Worker %uint2float.i20245 = uitofp <8 x i8> %8 to <8 x float> 64*9880d681SAndroid Build Coastguard Worker %binop.i20246 = fmul <8 x float> %uint2float.i20245, <float 0x3F70101020000000, float 0x3F70101020000000, float 0x3F70101020000000, float 0x3F70101020000000, float 0x3F70101020000000, float 0x3F70101020000000, float 0x3F70101020000000, float 0x3F70101020000000> 65*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for_loop594.lr.ph, label %for_exit595 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerif_exit: ; preds = %if_else 68*9880d681SAndroid Build Coastguard Worker ret void 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerfor_loop594.lr.ph: ; preds = %for_loop156.lr.ph 71*9880d681SAndroid Build Coastguard Worker %bitop8.i20221 = and <8 x i32> %uint2uint32.i20218, <i32 1023, i32 1023, i32 1023, i32 1023, i32 1023, i32 1023, i32 1023, i32 1023> 72*9880d681SAndroid Build Coastguard Worker br i1 undef, label %cif_test_all730, label %cif_mask_mixed1552 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerfor_exit595: ; preds = %for_loop156.lr.ph 75*9880d681SAndroid Build Coastguard Worker unreachable 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workercif_test_all730: ; preds = %for_loop594.lr.ph 78*9880d681SAndroid Build Coastguard Worker %binop11.i20545 = fmul <8 x float> %binop408, zeroinitializer 79*9880d681SAndroid Build Coastguard Worker %binop12.i20546 = fadd <8 x float> undef, %binop11.i20545 80*9880d681SAndroid Build Coastguard Worker %binop15.i20547 = fmul <8 x float> %binop411, undef 81*9880d681SAndroid Build Coastguard Worker %binop16.i20548 = fadd <8 x float> %binop12.i20546, %binop15.i20547 82*9880d681SAndroid Build Coastguard Worker %bincmp774 = fcmp ogt <8 x float> %binop16.i20548, zeroinitializer 83*9880d681SAndroid Build Coastguard Worker %val_to_boolvec32775 = sext <8 x i1> %bincmp774 to <8 x i32> 84*9880d681SAndroid Build Coastguard Worker %floatmask.i20549 = bitcast <8 x i32> %val_to_boolvec32775 to <8 x float> 85*9880d681SAndroid Build Coastguard Worker %v.i20550 = tail call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %floatmask.i20549) nounwind readnone 86*9880d681SAndroid Build Coastguard Worker %cond = icmp eq i32 %v.i20550, 255 87*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %cif_test_all794, label %cif_test_mixed 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workercif_test_all794: ; preds = %cif_test_all730 90*9880d681SAndroid Build Coastguard Worker %binop.i20572 = fmul <8 x float> %binop403, undef 91*9880d681SAndroid Build Coastguard Worker unreachable 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workercif_test_mixed: ; preds = %cif_test_all730 94*9880d681SAndroid Build Coastguard Worker %binop1207 = fmul <8 x float> %binop.i20246, undef 95*9880d681SAndroid Build Coastguard Worker unreachable 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workercif_mask_mixed1552: ; preds = %for_loop594.lr.ph 98*9880d681SAndroid Build Coastguard Worker unreachable 99*9880d681SAndroid Build Coastguard Worker} 100