blob: 8cb6b0ee5a69f7fd2c109adb2d21ee8651f40282 [file] [log] [blame]
Chris Lattner61b8c9b2005-01-11 03:05:03 +00001;; Both functions in this testcase should codegen to the same function, and
2;; neither of them should require spilling anything to the stack.
3
4; RUN: llvm-as < %s | llc -march=x86 -disable-pattern-isel=0 -stats 2>&1 | not grep 'Number of register spills'
5
6;; This can be compiled to use three registers if the loads are not
7;; folded into the multiplies, 2 registers otherwise.
8int %regpressure1(int* %P) {
9 %A = load int* %P
10 %Bp = getelementptr int* %P, int 1
11 %B = load int* %Bp
12 %s1 = mul int %A, %B
13 %Cp = getelementptr int* %P, int 2
14 %C = load int* %Cp
15 %s2 = mul int %s1, %C
16 %Dp = getelementptr int* %P, int 3
17 %D = load int* %Dp
18 %s3 = mul int %s2, %D
19 %Ep = getelementptr int* %P, int 4
20 %E = load int* %Ep
21 %s4 = mul int %s3, %E
22 %Fp = getelementptr int* %P, int 5
23 %F = load int* %Fp
24 %s5 = mul int %s4, %F
25 %Gp = getelementptr int* %P, int 6
26 %G = load int* %Gp
27 %s6 = mul int %s5, %G
28 %Hp = getelementptr int* %P, int 7
29 %H = load int* %Hp
30 %s7 = mul int %s6, %H
31 %Ip = getelementptr int* %P, int 8
32 %I = load int* %Ip
33 %s8 = mul int %s7, %I
34 %Jp = getelementptr int* %P, int 9
35 %J = load int* %Jp
36 %s9 = mul int %s8, %J
37 ret int %s9
38}
39
40;; This testcase should produce identical code to the test above.
41int %regpressure2(int* %P) {
42 %A = load int* %P
43 %Bp = getelementptr int* %P, int 1
44 %B = load int* %Bp
45 %Cp = getelementptr int* %P, int 2
46 %C = load int* %Cp
47 %Dp = getelementptr int* %P, int 3
48 %D = load int* %Dp
49 %Ep = getelementptr int* %P, int 4
50 %E = load int* %Ep
51 %Fp = getelementptr int* %P, int 5
52 %F = load int* %Fp
53 %Gp = getelementptr int* %P, int 6
54 %G = load int* %Gp
55 %Hp = getelementptr int* %P, int 7
56 %H = load int* %Hp
57 %Ip = getelementptr int* %P, int 8
58 %I = load int* %Ip
59 %Jp = getelementptr int* %P, int 9
60 %J = load int* %Jp
61 %s1 = mul int %A, %B
62 %s2 = mul int %s1, %C
63 %s3 = mul int %s2, %D
64 %s4 = mul int %s3, %E
65 %s5 = mul int %s4, %F
66 %s6 = mul int %s5, %G
67 %s7 = mul int %s6, %H
68 %s8 = mul int %s7, %I
69 %s9 = mul int %s8, %J
70 ret int %s9
71}
72