1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips < %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=+msa,+fp64 < %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel < %s 4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; This test originally failed to select instructions for extract_vector_elt for 7*9880d681SAndroid Build Coastguard Worker; v4f32 on MSA. 8*9880d681SAndroid Build Coastguard Worker; It should at least successfully build. 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine void @autogen_SD3997499501(i8*, i32*, i64*, i32, i64, i8) { 11*9880d681SAndroid Build Coastguard WorkerBB: 12*9880d681SAndroid Build Coastguard Worker %A4 = alloca <1 x double> 13*9880d681SAndroid Build Coastguard Worker %A3 = alloca double 14*9880d681SAndroid Build Coastguard Worker %A2 = alloca float 15*9880d681SAndroid Build Coastguard Worker %A1 = alloca double 16*9880d681SAndroid Build Coastguard Worker %A = alloca double 17*9880d681SAndroid Build Coastguard Worker %L = load i8, i8* %0 18*9880d681SAndroid Build Coastguard Worker store i8 97, i8* %0 19*9880d681SAndroid Build Coastguard Worker %E = extractelement <16 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>, i32 14 20*9880d681SAndroid Build Coastguard Worker %Shuff = shufflevector <2 x i1> zeroinitializer, <2 x i1> zeroinitializer, <2 x i32> <i32 1, i32 3> 21*9880d681SAndroid Build Coastguard Worker %I = insertelement <4 x i64> zeroinitializer, i64 0, i32 3 22*9880d681SAndroid Build Coastguard Worker %Tr = trunc <1 x i64> zeroinitializer to <1 x i8> 23*9880d681SAndroid Build Coastguard Worker %Sl = select i1 false, double* %A1, double* %A 24*9880d681SAndroid Build Coastguard Worker %Cmp = icmp ne <2 x i64> zeroinitializer, zeroinitializer 25*9880d681SAndroid Build Coastguard Worker %L5 = load double, double* %Sl 26*9880d681SAndroid Build Coastguard Worker store float -4.374162e+06, float* %A2 27*9880d681SAndroid Build Coastguard Worker %E6 = extractelement <4 x i64> zeroinitializer, i32 3 28*9880d681SAndroid Build Coastguard Worker %Shuff7 = shufflevector <4 x i64> zeroinitializer, <4 x i64> %I, <4 x i32> <i32 2, i32 4, i32 6, i32 undef> 29*9880d681SAndroid Build Coastguard Worker %I8 = insertelement <2 x i1> %Shuff, i1 false, i32 0 30*9880d681SAndroid Build Coastguard Worker %B = ashr <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <i32 -1, i32 -1, i32 -1, i32 -1> 31*9880d681SAndroid Build Coastguard Worker %PC = bitcast float* %A2 to float* 32*9880d681SAndroid Build Coastguard Worker %Sl9 = select i1 false, i32 82299, i32 0 33*9880d681SAndroid Build Coastguard Worker %Cmp10 = icmp slt i8 97, %5 34*9880d681SAndroid Build Coastguard Worker br label %CF72 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard WorkerCF72: ; preds = %CF72, %CF80, %CF78, %BB 37*9880d681SAndroid Build Coastguard Worker %L11 = load double, double* %Sl 38*9880d681SAndroid Build Coastguard Worker store double 0.000000e+00, double* %Sl 39*9880d681SAndroid Build Coastguard Worker %E12 = extractelement <2 x i1> zeroinitializer, i32 0 40*9880d681SAndroid Build Coastguard Worker br i1 %E12, label %CF72, label %CF80 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard WorkerCF80: ; preds = %CF72 43*9880d681SAndroid Build Coastguard Worker %Shuff13 = shufflevector <2 x i1> zeroinitializer, <2 x i1> zeroinitializer, <2 x i32> <i32 3, i32 1> 44*9880d681SAndroid Build Coastguard Worker %I14 = insertelement <2 x i64> zeroinitializer, i64 %4, i32 1 45*9880d681SAndroid Build Coastguard Worker %B15 = fadd double %L5, 0.000000e+00 46*9880d681SAndroid Build Coastguard Worker %BC = bitcast i32 0 to float 47*9880d681SAndroid Build Coastguard Worker %Sl16 = select i1 %E12, float 0xC7957ED940000000, float %BC 48*9880d681SAndroid Build Coastguard Worker %Cmp17 = icmp eq i32 136082, 471909 49*9880d681SAndroid Build Coastguard Worker br i1 %Cmp17, label %CF72, label %CF77 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard WorkerCF77: ; preds = %CF77, %CF80 52*9880d681SAndroid Build Coastguard Worker %L18 = load double, double* %Sl 53*9880d681SAndroid Build Coastguard Worker store double 0.000000e+00, double* %Sl 54*9880d681SAndroid Build Coastguard Worker %E19 = extractelement <2 x i1> zeroinitializer, i32 0 55*9880d681SAndroid Build Coastguard Worker br i1 %E19, label %CF77, label %CF78 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard WorkerCF78: ; preds = %CF77 58*9880d681SAndroid Build Coastguard Worker %Shuff20 = shufflevector <2 x i1> zeroinitializer, <2 x i1> zeroinitializer, <2 x i32> <i32 1, i32 3> 59*9880d681SAndroid Build Coastguard Worker %I21 = insertelement <8 x i1> zeroinitializer, i1 %Cmp10, i32 7 60*9880d681SAndroid Build Coastguard Worker %B22 = sdiv <4 x i64> %Shuff7, zeroinitializer 61*9880d681SAndroid Build Coastguard Worker %FC = uitofp i8 97 to double 62*9880d681SAndroid Build Coastguard Worker %Sl23 = select i1 %Cmp10, <2 x i1> zeroinitializer, <2 x i1> zeroinitializer 63*9880d681SAndroid Build Coastguard Worker %L24 = load double, double* %Sl 64*9880d681SAndroid Build Coastguard Worker store float %Sl16, float* %PC 65*9880d681SAndroid Build Coastguard Worker %E25 = extractelement <2 x i1> %Shuff, i32 1 66*9880d681SAndroid Build Coastguard Worker br i1 %E25, label %CF72, label %CF76 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard WorkerCF76: ; preds = %CF78 69*9880d681SAndroid Build Coastguard Worker %Shuff26 = shufflevector <4 x i64> zeroinitializer, <4 x i64> %B22, <4 x i32> <i32 undef, i32 undef, i32 0, i32 undef> 70*9880d681SAndroid Build Coastguard Worker %I27 = insertelement <4 x i64> zeroinitializer, i64 %E, i32 2 71*9880d681SAndroid Build Coastguard Worker %B28 = mul <4 x i64> %I27, zeroinitializer 72*9880d681SAndroid Build Coastguard Worker %ZE = zext <8 x i1> zeroinitializer to <8 x i64> 73*9880d681SAndroid Build Coastguard Worker %Sl29 = select i1 %Cmp17, float -4.374162e+06, float -4.374162e+06 74*9880d681SAndroid Build Coastguard Worker %L30 = load i8, i8* %0 75*9880d681SAndroid Build Coastguard Worker store double %L5, double* %Sl 76*9880d681SAndroid Build Coastguard Worker %E31 = extractelement <8 x i1> zeroinitializer, i32 5 77*9880d681SAndroid Build Coastguard Worker br label %CF 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard WorkerCF: ; preds = %CF, %CF81, %CF76 80*9880d681SAndroid Build Coastguard Worker %Shuff32 = shufflevector <16 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>, <16 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>, <16 x i32> <i32 8, i32 undef, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 undef, i32 26, i32 28, i32 30, i32 undef, i32 2, i32 4, i32 6> 81*9880d681SAndroid Build Coastguard Worker %I33 = insertelement <8 x i1> zeroinitializer, i1 false, i32 2 82*9880d681SAndroid Build Coastguard Worker %BC34 = bitcast <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1> to <4 x float> 83*9880d681SAndroid Build Coastguard Worker %Sl35 = select i1 %E12, <2 x i1> %I8, <2 x i1> zeroinitializer 84*9880d681SAndroid Build Coastguard Worker %Cmp36 = fcmp oge double 0xC2C3BAE2D5C18360, 0xC2C3BAE2D5C18360 85*9880d681SAndroid Build Coastguard Worker br i1 %Cmp36, label %CF, label %CF74 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard WorkerCF74: ; preds = %CF74, %CF 88*9880d681SAndroid Build Coastguard Worker %L37 = load float, float* %PC 89*9880d681SAndroid Build Coastguard Worker store double 0.000000e+00, double* %Sl 90*9880d681SAndroid Build Coastguard Worker %E38 = extractelement <2 x i1> %Sl23, i32 1 91*9880d681SAndroid Build Coastguard Worker br i1 %E38, label %CF74, label %CF75 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard WorkerCF75: ; preds = %CF75, %CF82, %CF74 94*9880d681SAndroid Build Coastguard Worker %Shuff39 = shufflevector <2 x i1> %Shuff13, <2 x i1> zeroinitializer, <2 x i32> <i32 undef, i32 2> 95*9880d681SAndroid Build Coastguard Worker %I40 = insertelement <4 x i64> zeroinitializer, i64 %4, i32 2 96*9880d681SAndroid Build Coastguard Worker %Sl41 = select i1 %Cmp10, i32 0, i32 %3 97*9880d681SAndroid Build Coastguard Worker %Cmp42 = icmp ne <1 x i64> zeroinitializer, zeroinitializer 98*9880d681SAndroid Build Coastguard Worker %L43 = load double, double* %Sl 99*9880d681SAndroid Build Coastguard Worker store i64 %4, i64* %2 100*9880d681SAndroid Build Coastguard Worker %E44 = extractelement <2 x i1> %Shuff20, i32 1 101*9880d681SAndroid Build Coastguard Worker br i1 %E44, label %CF75, label %CF82 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard WorkerCF82: ; preds = %CF75 104*9880d681SAndroid Build Coastguard Worker %Shuff45 = shufflevector <2 x i1> %Sl23, <2 x i1> %Sl23, <2 x i32> <i32 2, i32 0> 105*9880d681SAndroid Build Coastguard Worker %I46 = insertelement <4 x i64> zeroinitializer, i64 0, i32 0 106*9880d681SAndroid Build Coastguard Worker %B47 = sub i64 %E, %E6 107*9880d681SAndroid Build Coastguard Worker %Sl48 = select i1 %Cmp10, double %L5, double %L43 108*9880d681SAndroid Build Coastguard Worker %Cmp49 = icmp uge i64 %4, %B47 109*9880d681SAndroid Build Coastguard Worker br i1 %Cmp49, label %CF75, label %CF81 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard WorkerCF81: ; preds = %CF82 112*9880d681SAndroid Build Coastguard Worker %L50 = load i8, i8* %0 113*9880d681SAndroid Build Coastguard Worker store double %L43, double* %Sl 114*9880d681SAndroid Build Coastguard Worker %E51 = extractelement <4 x i64> %Shuff7, i32 3 115*9880d681SAndroid Build Coastguard Worker %Shuff52 = shufflevector <4 x float> %BC34, <4 x float> %BC34, <4 x i32> <i32 2, i32 4, i32 6, i32 0> 116*9880d681SAndroid Build Coastguard Worker %I53 = insertelement <2 x i1> %Cmp, i1 %E25, i32 0 117*9880d681SAndroid Build Coastguard Worker %B54 = fdiv double %L24, %L43 118*9880d681SAndroid Build Coastguard Worker %BC55 = bitcast <4 x i64> zeroinitializer to <4 x double> 119*9880d681SAndroid Build Coastguard Worker %Sl56 = select i1 false, i8 %5, i8 97 120*9880d681SAndroid Build Coastguard Worker %L57 = load i8, i8* %0 121*9880d681SAndroid Build Coastguard Worker store i8 %L50, i8* %0 122*9880d681SAndroid Build Coastguard Worker %E58 = extractelement <2 x i1> %Shuff20, i32 1 123*9880d681SAndroid Build Coastguard Worker br i1 %E58, label %CF, label %CF73 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard WorkerCF73: ; preds = %CF73, %CF81 126*9880d681SAndroid Build Coastguard Worker %Shuff59 = shufflevector <2 x i1> %Shuff13, <2 x i1> %Shuff45, <2 x i32> <i32 undef, i32 0> 127*9880d681SAndroid Build Coastguard Worker %I60 = insertelement <4 x float> %Shuff52, float -4.374162e+06, i32 0 128*9880d681SAndroid Build Coastguard Worker %B61 = mul <4 x i64> %I46, zeroinitializer 129*9880d681SAndroid Build Coastguard Worker %PC62 = bitcast double* %A3 to float* 130*9880d681SAndroid Build Coastguard Worker %Sl63 = select i1 %Cmp10, <1 x i64> zeroinitializer, <1 x i64> zeroinitializer 131*9880d681SAndroid Build Coastguard Worker %Cmp64 = icmp ne <2 x i1> %Cmp, %Shuff 132*9880d681SAndroid Build Coastguard Worker %L65 = load double, double* %A1 133*9880d681SAndroid Build Coastguard Worker store float -4.374162e+06, float* %PC62 134*9880d681SAndroid Build Coastguard Worker %E66 = extractelement <8 x i1> %I21, i32 3 135*9880d681SAndroid Build Coastguard Worker br i1 %E66, label %CF73, label %CF79 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard WorkerCF79: ; preds = %CF79, %CF73 138*9880d681SAndroid Build Coastguard Worker %Shuff67 = shufflevector <8 x i1> %I21, <8 x i1> %I21, <8 x i32> <i32 6, i32 8, i32 10, i32 12, i32 14, i32 0, i32 undef, i32 4> 139*9880d681SAndroid Build Coastguard Worker %I68 = insertelement <1 x i1> %Cmp42, i1 %E25, i32 0 140*9880d681SAndroid Build Coastguard Worker %B69 = sdiv <16 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1> 141*9880d681SAndroid Build Coastguard Worker %Sl70 = select i1 %Cmp49, <2 x i1> %Sl23, <2 x i1> %Shuff45 142*9880d681SAndroid Build Coastguard Worker %Cmp71 = icmp ne i1 false, false 143*9880d681SAndroid Build Coastguard Worker br i1 %Cmp71, label %CF79, label %CF83 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard WorkerCF83: ; preds = %CF79 146*9880d681SAndroid Build Coastguard Worker store double 0.000000e+00, double* %Sl 147*9880d681SAndroid Build Coastguard Worker store float %BC, float* %PC62 148*9880d681SAndroid Build Coastguard Worker store double %Sl48, double* %Sl 149*9880d681SAndroid Build Coastguard Worker store double %FC, double* %Sl 150*9880d681SAndroid Build Coastguard Worker store float %BC, float* %PC62 151*9880d681SAndroid Build Coastguard Worker ret void 152*9880d681SAndroid Build Coastguard Worker} 153