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 for MSA with a 7*9880d681SAndroid Build Coastguard Worker; `Opc && "Cannot copy registers"' assertion. 8*9880d681SAndroid Build Coastguard Worker; It should at least successfully build. 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine void @autogen_SD1935737938(i8*, i32*, i64*, i32, i64, i8) { 11*9880d681SAndroid Build Coastguard WorkerBB: 12*9880d681SAndroid Build Coastguard Worker %A4 = alloca i64 13*9880d681SAndroid Build Coastguard Worker %A3 = alloca <4 x i32> 14*9880d681SAndroid Build Coastguard Worker %A2 = alloca i64 15*9880d681SAndroid Build Coastguard Worker %A1 = alloca i32 16*9880d681SAndroid Build Coastguard Worker %A = alloca <2 x i64> 17*9880d681SAndroid Build Coastguard Worker %L = load i8, i8* %0 18*9880d681SAndroid Build Coastguard Worker store i8 -1, i8* %0 19*9880d681SAndroid Build Coastguard Worker %E = extractelement <2 x i32> zeroinitializer, i32 0 20*9880d681SAndroid Build Coastguard Worker %Shuff = shufflevector <2 x i32> zeroinitializer, <2 x i32> zeroinitializer, <2 x i32> <i32 1, i32 3> 21*9880d681SAndroid Build Coastguard Worker %I = insertelement <1 x i64> <i64 -1>, i64 286689, i32 0 22*9880d681SAndroid Build Coastguard Worker %B = lshr i8 %L, -69 23*9880d681SAndroid Build Coastguard Worker %ZE = fpext float 0xBF2AA5FE80000000 to double 24*9880d681SAndroid Build Coastguard Worker %Sl = select i1 true, <1 x i64> <i64 -1>, <1 x i64> <i64 -1> 25*9880d681SAndroid Build Coastguard Worker %L5 = load i8, i8* %0 26*9880d681SAndroid Build Coastguard Worker store i8 -69, i8* %0 27*9880d681SAndroid Build Coastguard Worker %E6 = 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 28*9880d681SAndroid Build Coastguard Worker %Shuff7 = shufflevector <2 x i32> zeroinitializer, <2 x i32> zeroinitializer, <2 x i32> <i32 1, i32 3> 29*9880d681SAndroid Build Coastguard Worker %I8 = insertelement <2 x i32> zeroinitializer, i32 135673, i32 1 30*9880d681SAndroid Build Coastguard Worker %B9 = udiv i8 %B, %B 31*9880d681SAndroid Build Coastguard Worker %FC = uitofp i32 %3 to double 32*9880d681SAndroid Build Coastguard Worker %Sl10 = select i1 true, <1 x i1> zeroinitializer, <1 x i1> zeroinitializer 33*9880d681SAndroid Build Coastguard Worker %Cmp = icmp ne <1 x i64> %I, <i64 -1> 34*9880d681SAndroid Build Coastguard Worker %L11 = load i8, i8* %0 35*9880d681SAndroid Build Coastguard Worker store i8 %L11, i8* %0 36*9880d681SAndroid Build Coastguard Worker %E12 = extractelement <1 x i64> <i64 -1>, i32 0 37*9880d681SAndroid Build Coastguard Worker %Shuff13 = shufflevector <1 x i64> %Sl, <1 x i64> <i64 -1>, <1 x i32> <i32 1> 38*9880d681SAndroid Build Coastguard Worker %I14 = insertelement <1 x i64> %I, i64 303290, i32 0 39*9880d681SAndroid Build Coastguard Worker %B15 = frem float 0.000000e+00, 0.000000e+00 40*9880d681SAndroid Build Coastguard Worker %Sl16 = select i1 true, <1 x i1> %Cmp, <1 x i1> zeroinitializer 41*9880d681SAndroid Build Coastguard Worker %Cmp17 = fcmp one float 0xBD946F9840000000, %B15 42*9880d681SAndroid Build Coastguard Worker br label %CF74 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard WorkerCF74: ; preds = %CF74, %CF80, %CF76, %BB 45*9880d681SAndroid Build Coastguard Worker %L18 = load i8, i8* %0 46*9880d681SAndroid Build Coastguard Worker store i8 -69, i8* %0 47*9880d681SAndroid Build Coastguard Worker %E19 = extractelement <1 x i64> %Sl, i32 0 48*9880d681SAndroid Build Coastguard Worker %Shuff20 = shufflevector <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <8 x i32> <i32 12, i32 14, i32 0, i32 2, i32 4, i32 6, i32 8, i32 10> 49*9880d681SAndroid Build Coastguard Worker %I21 = insertelement <2 x i32> %Shuff, i32 135673, i32 0 50*9880d681SAndroid Build Coastguard Worker %B22 = urem i32 135673, %3 51*9880d681SAndroid Build Coastguard Worker %FC23 = sitofp i8 %L to float 52*9880d681SAndroid Build Coastguard Worker %Sl24 = select i1 true, i8 %B, i8 %L18 53*9880d681SAndroid Build Coastguard Worker %L25 = load i8, i8* %0 54*9880d681SAndroid Build Coastguard Worker store i8 %L, i8* %0 55*9880d681SAndroid Build Coastguard Worker %E26 = extractelement <2 x i32> %Shuff, i32 1 56*9880d681SAndroid Build Coastguard Worker %Shuff27 = shufflevector <2 x i32> zeroinitializer, <2 x i32> zeroinitializer, <2 x i32> <i32 2, i32 0> 57*9880d681SAndroid Build Coastguard Worker %I28 = insertelement <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 %E12, i32 8 58*9880d681SAndroid Build Coastguard Worker %B29 = frem double %ZE, 0x235104F0E94F406E 59*9880d681SAndroid Build Coastguard Worker %Tr = trunc i64 286689 to i8 60*9880d681SAndroid Build Coastguard Worker %Sl30 = select i1 true, float 0x45B13EA500000000, float %B15 61*9880d681SAndroid Build Coastguard Worker %Cmp31 = icmp eq i32 %B22, %B22 62*9880d681SAndroid Build Coastguard Worker br i1 %Cmp31, label %CF74, label %CF80 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard WorkerCF80: ; preds = %CF74 65*9880d681SAndroid Build Coastguard Worker %L32 = load i8, i8* %0 66*9880d681SAndroid Build Coastguard Worker store i8 -1, i8* %0 67*9880d681SAndroid Build Coastguard Worker %E33 = extractelement <2 x i32> zeroinitializer, i32 1 68*9880d681SAndroid Build Coastguard Worker %Shuff34 = shufflevector <1 x i64> %Shuff13, <1 x i64> <i64 -1>, <1 x i32> zeroinitializer 69*9880d681SAndroid Build Coastguard Worker %I35 = insertelement <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, i8 -1, i32 0 70*9880d681SAndroid Build Coastguard Worker %FC36 = sitofp <1 x i1> %Cmp to <1 x float> 71*9880d681SAndroid Build Coastguard Worker %Sl37 = select i1 true, <8 x i8> %Shuff20, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 72*9880d681SAndroid Build Coastguard Worker %Cmp38 = icmp sgt <2 x i32> %I21, %Shuff27 73*9880d681SAndroid Build Coastguard Worker %L39 = load i8, i8* %0 74*9880d681SAndroid Build Coastguard Worker store i8 %Sl24, i8* %0 75*9880d681SAndroid Build Coastguard Worker %E40 = extractelement <8 x i64> zeroinitializer, i32 1 76*9880d681SAndroid Build Coastguard Worker %Shuff41 = shufflevector <2 x i1> zeroinitializer, <2 x i1> %Cmp38, <2 x i32> <i32 0, i32 2> 77*9880d681SAndroid Build Coastguard Worker %I42 = insertelement <4 x i32> zeroinitializer, i32 414573, i32 2 78*9880d681SAndroid Build Coastguard Worker %B43 = srem i8 %L5, %L39 79*9880d681SAndroid Build Coastguard Worker %Sl44 = select i1 %Cmp17, i8 %L, i8 %L 80*9880d681SAndroid Build Coastguard Worker %Cmp45 = fcmp une float 0x3AFCE1A0C0000000, 0.000000e+00 81*9880d681SAndroid Build Coastguard Worker br i1 %Cmp45, label %CF74, label %CF76 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard WorkerCF76: ; preds = %CF80 84*9880d681SAndroid Build Coastguard Worker %L46 = load i8, i8* %0 85*9880d681SAndroid Build Coastguard Worker store i8 %L39, i8* %0 86*9880d681SAndroid Build Coastguard Worker %E47 = extractelement <2 x i32> %Shuff27, i32 0 87*9880d681SAndroid Build Coastguard Worker %Shuff48 = shufflevector <1 x i1> %Sl10, <1 x i1> %Sl10, <1 x i32> <i32 1> 88*9880d681SAndroid Build Coastguard Worker %I49 = insertelement <1 x i64> <i64 -1>, i64 %E12, i32 0 89*9880d681SAndroid Build Coastguard Worker %FC50 = fptosi double 0x235104F0E94F406E to i32 90*9880d681SAndroid Build Coastguard Worker %Sl51 = select i1 %Cmp17, <16 x i64> %I28, <16 x i64> %I28 91*9880d681SAndroid Build Coastguard Worker %Cmp52 = icmp ne i8 %Tr, %Sl24 92*9880d681SAndroid Build Coastguard Worker br i1 %Cmp52, label %CF74, label %CF75 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard WorkerCF75: ; preds = %CF75, %CF76 95*9880d681SAndroid Build Coastguard Worker %L53 = load i8, i8* %0 96*9880d681SAndroid Build Coastguard Worker store i8 %L18, i8* %0 97*9880d681SAndroid Build Coastguard Worker %E54 = extractelement <8 x i8> %Shuff20, i32 5 98*9880d681SAndroid Build Coastguard Worker %Shuff55 = shufflevector <2 x i32> %Shuff, <2 x i32> zeroinitializer, <2 x i32> <i32 0, i32 2> 99*9880d681SAndroid Build Coastguard Worker %I56 = insertelement <4 x i32> %I42, i32 %B22, i32 2 100*9880d681SAndroid Build Coastguard Worker %B57 = sub i64 %E40, %E6 101*9880d681SAndroid Build Coastguard Worker %Sl58 = select i1 true, i64 303290, i64 %E40 102*9880d681SAndroid Build Coastguard Worker %Cmp59 = icmp slt i64 %E40, %E6 103*9880d681SAndroid Build Coastguard Worker br i1 %Cmp59, label %CF75, label %CF78 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard WorkerCF78: ; preds = %CF75 106*9880d681SAndroid Build Coastguard Worker %L60 = load i8, i8* %0 107*9880d681SAndroid Build Coastguard Worker store i8 -69, i8* %0 108*9880d681SAndroid Build Coastguard Worker %E61 = extractelement <2 x i32> zeroinitializer, i32 0 109*9880d681SAndroid Build Coastguard Worker %Shuff62 = shufflevector <2 x i32> %Shuff7, <2 x i32> %I21, <2 x i32> <i32 1, i32 3> 110*9880d681SAndroid Build Coastguard Worker %I63 = insertelement <1 x i1> %Sl16, i1 %Cmp45, i32 0 111*9880d681SAndroid Build Coastguard Worker %B64 = and i8 %Sl44, -69 112*9880d681SAndroid Build Coastguard Worker %ZE65 = zext <1 x i1> %Shuff48 to <1 x i64> 113*9880d681SAndroid Build Coastguard Worker %Sl66 = select i1 true, <1 x i64> %I, <1 x i64> %I49 114*9880d681SAndroid Build Coastguard Worker %Cmp67 = icmp ugt i64 286689, %E40 115*9880d681SAndroid Build Coastguard Worker br label %CF 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard WorkerCF: ; preds = %CF, %CF78 118*9880d681SAndroid Build Coastguard Worker %L68 = load i8, i8* %0 119*9880d681SAndroid Build Coastguard Worker store i64 %B57, i64* %2 120*9880d681SAndroid Build Coastguard Worker %E69 = extractelement <2 x i1> %Shuff41, i32 1 121*9880d681SAndroid Build Coastguard Worker br i1 %E69, label %CF, label %CF77 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard WorkerCF77: ; preds = %CF77, %CF 124*9880d681SAndroid Build Coastguard Worker %Shuff70 = shufflevector <1 x i64> %Shuff34, <1 x i64> <i64 -1>, <1 x i32> zeroinitializer 125*9880d681SAndroid Build Coastguard Worker %I71 = insertelement <2 x i32> %Shuff, i32 %E26, i32 0 126*9880d681SAndroid Build Coastguard Worker %Se = sext i8 %L60 to i32 127*9880d681SAndroid Build Coastguard Worker %Sl72 = select i1 %Cmp45, <2 x i32> %Shuff62, <2 x i32> %I71 128*9880d681SAndroid Build Coastguard Worker %Cmp73 = fcmp ugt double 0x235104F0E94F406E, 0x235104F0E94F406E 129*9880d681SAndroid Build Coastguard Worker br i1 %Cmp73, label %CF77, label %CF79 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard WorkerCF79: ; preds = %CF77 132*9880d681SAndroid Build Coastguard Worker store i8 %L18, i8* %0 133*9880d681SAndroid Build Coastguard Worker store i8 %E54, i8* %0 134*9880d681SAndroid Build Coastguard Worker store i8 %L39, i8* %0 135*9880d681SAndroid Build Coastguard Worker store i8 %L39, i8* %0 136*9880d681SAndroid Build Coastguard Worker store i8 %B, i8* %0 137*9880d681SAndroid Build Coastguard Worker ret void 138*9880d681SAndroid Build Coastguard Worker} 139