1; RUN: %lli %s > /dev/null
2; XFAIL: arm
3
4; This testcase exposes a bug in the local register allocator where it runs out
5; of registers (due to too many overlapping live ranges), but then attempts to
6; use the ESP register (which is not allocatable) to hold a value.
7
8define i32 @main(i32 %A) {
9        ; ESP gets used again...
10	%Ap2 = alloca i32, i32 %A		; <i32*> [#uses=11]
11	; Produce lots of overlapping live ranges
12        %B = add i32 %A, 1		; <i32> [#uses=1]
13	%C = add i32 %A, 2		; <i32> [#uses=1]
14	%D = add i32 %A, 3		; <i32> [#uses=1]
15	%E = add i32 %A, 4		; <i32> [#uses=1]
16	%F = add i32 %A, 5		; <i32> [#uses=1]
17	%G = add i32 %A, 6		; <i32> [#uses=1]
18	%H = add i32 %A, 7		; <i32> [#uses=1]
19	%I = add i32 %A, 8		; <i32> [#uses=1]
20	%J = add i32 %A, 9		; <i32> [#uses=1]
21	%K = add i32 %A, 10		; <i32> [#uses=1]
22        ; Uses of all of the values
23	store i32 %A, i32* %Ap2
24	store i32 %B, i32* %Ap2
25	store i32 %C, i32* %Ap2
26	store i32 %D, i32* %Ap2
27	store i32 %E, i32* %Ap2
28	store i32 %F, i32* %Ap2
29	store i32 %G, i32* %Ap2
30	store i32 %H, i32* %Ap2
31	store i32 %I, i32* %Ap2
32	store i32 %J, i32* %Ap2
33	store i32 %K, i32* %Ap2
34	ret i32 0
35}
36