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