1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-apple-ios < %s 2*9880d681SAndroid Build Coastguard Worker@bar = common global i32 0, align 4 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Leaf function which uses all callee-saved registers and allocates >= 256 bytes 5*9880d681SAndroid Build Coastguard Worker; on the stack this will cause determineCalleeSaves() to spill LR as an 6*9880d681SAndroid Build Coastguard Worker; additional scratch register. 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker; This is a crash-only regression test for rdar://15124582. 9*9880d681SAndroid Build Coastguard Workerdefine i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h) nounwind { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %stack = alloca [128 x i32], align 4 12*9880d681SAndroid Build Coastguard Worker %0 = bitcast [128 x i32]* %stack to i8* 13*9880d681SAndroid Build Coastguard Worker %idxprom = sext i32 %a to i64 14*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [128 x i32], [128 x i32]* %stack, i64 0, i64 %idxprom 15*9880d681SAndroid Build Coastguard Worker store i32 %b, i32* %arrayidx, align 4 16*9880d681SAndroid Build Coastguard Worker %1 = load volatile i32, i32* @bar, align 4 17*9880d681SAndroid Build Coastguard Worker %2 = load volatile i32, i32* @bar, align 4 18*9880d681SAndroid Build Coastguard Worker %3 = load volatile i32, i32* @bar, align 4 19*9880d681SAndroid Build Coastguard Worker %4 = load volatile i32, i32* @bar, align 4 20*9880d681SAndroid Build Coastguard Worker %5 = load volatile i32, i32* @bar, align 4 21*9880d681SAndroid Build Coastguard Worker %6 = load volatile i32, i32* @bar, align 4 22*9880d681SAndroid Build Coastguard Worker %7 = load volatile i32, i32* @bar, align 4 23*9880d681SAndroid Build Coastguard Worker %8 = load volatile i32, i32* @bar, align 4 24*9880d681SAndroid Build Coastguard Worker %9 = load volatile i32, i32* @bar, align 4 25*9880d681SAndroid Build Coastguard Worker %10 = load volatile i32, i32* @bar, align 4 26*9880d681SAndroid Build Coastguard Worker %11 = load volatile i32, i32* @bar, align 4 27*9880d681SAndroid Build Coastguard Worker %12 = load volatile i32, i32* @bar, align 4 28*9880d681SAndroid Build Coastguard Worker %13 = load volatile i32, i32* @bar, align 4 29*9880d681SAndroid Build Coastguard Worker %14 = load volatile i32, i32* @bar, align 4 30*9880d681SAndroid Build Coastguard Worker %15 = load volatile i32, i32* @bar, align 4 31*9880d681SAndroid Build Coastguard Worker %16 = load volatile i32, i32* @bar, align 4 32*9880d681SAndroid Build Coastguard Worker %17 = load volatile i32, i32* @bar, align 4 33*9880d681SAndroid Build Coastguard Worker %18 = load volatile i32, i32* @bar, align 4 34*9880d681SAndroid Build Coastguard Worker %19 = load volatile i32, i32* @bar, align 4 35*9880d681SAndroid Build Coastguard Worker %20 = load volatile i32, i32* @bar, align 4 36*9880d681SAndroid Build Coastguard Worker %idxprom1 = sext i32 %c to i64 37*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds [128 x i32], [128 x i32]* %stack, i64 0, i64 %idxprom1 38*9880d681SAndroid Build Coastguard Worker %21 = load i32, i32* %arrayidx2, align 4 39*9880d681SAndroid Build Coastguard Worker %factor = mul i32 %h, -2 40*9880d681SAndroid Build Coastguard Worker %factor67 = mul i32 %g, -2 41*9880d681SAndroid Build Coastguard Worker %factor68 = mul i32 %f, -2 42*9880d681SAndroid Build Coastguard Worker %factor69 = mul i32 %e, -2 43*9880d681SAndroid Build Coastguard Worker %factor70 = mul i32 %d, -2 44*9880d681SAndroid Build Coastguard Worker %factor71 = mul i32 %c, -2 45*9880d681SAndroid Build Coastguard Worker %factor72 = mul i32 %b, -2 46*9880d681SAndroid Build Coastguard Worker %sum = add i32 %2, %1 47*9880d681SAndroid Build Coastguard Worker %sum73 = add i32 %sum, %3 48*9880d681SAndroid Build Coastguard Worker %sum74 = add i32 %sum73, %4 49*9880d681SAndroid Build Coastguard Worker %sum75 = add i32 %sum74, %5 50*9880d681SAndroid Build Coastguard Worker %sum76 = add i32 %sum75, %6 51*9880d681SAndroid Build Coastguard Worker %sum77 = add i32 %sum76, %7 52*9880d681SAndroid Build Coastguard Worker %sum78 = add i32 %sum77, %8 53*9880d681SAndroid Build Coastguard Worker %sum79 = add i32 %sum78, %9 54*9880d681SAndroid Build Coastguard Worker %sum80 = add i32 %sum79, %10 55*9880d681SAndroid Build Coastguard Worker %sum81 = add i32 %sum80, %11 56*9880d681SAndroid Build Coastguard Worker %sum82 = add i32 %sum81, %12 57*9880d681SAndroid Build Coastguard Worker %sum83 = add i32 %sum82, %13 58*9880d681SAndroid Build Coastguard Worker %sum84 = add i32 %sum83, %14 59*9880d681SAndroid Build Coastguard Worker %sum85 = add i32 %sum84, %15 60*9880d681SAndroid Build Coastguard Worker %sum86 = add i32 %sum85, %16 61*9880d681SAndroid Build Coastguard Worker %sum87 = add i32 %sum86, %17 62*9880d681SAndroid Build Coastguard Worker %sum88 = add i32 %sum87, %18 63*9880d681SAndroid Build Coastguard Worker %sum89 = add i32 %sum88, %19 64*9880d681SAndroid Build Coastguard Worker %sum90 = add i32 %sum89, %20 65*9880d681SAndroid Build Coastguard Worker %sub15 = sub i32 %21, %sum90 66*9880d681SAndroid Build Coastguard Worker %sub16 = add i32 %sub15, %factor 67*9880d681SAndroid Build Coastguard Worker %sub17 = add i32 %sub16, %factor67 68*9880d681SAndroid Build Coastguard Worker %sub18 = add i32 %sub17, %factor68 69*9880d681SAndroid Build Coastguard Worker %sub19 = add i32 %sub18, %factor69 70*9880d681SAndroid Build Coastguard Worker %sub20 = add i32 %sub19, %factor70 71*9880d681SAndroid Build Coastguard Worker %sub21 = add i32 %sub20, %factor71 72*9880d681SAndroid Build Coastguard Worker %add = add i32 %sub21, %factor72 73*9880d681SAndroid Build Coastguard Worker ret i32 %add 74*9880d681SAndroid Build Coastguard Worker} 75