1 ;; Both functions in this testcase should codegen to the same function, and
2 ;; neither of them should require spilling anything to the stack.
4 ; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 -stats 2>&1 | not grep 'Number of register spills'
6 ;; This can be compiled to use three registers if the loads are not
7 ;; folded into the multiplies, 2 registers otherwise.
8 int %regpressure1(int* %P) {
10 %Bp = getelementptr int* %P, int 1
13 %Cp = getelementptr int* %P, int 2
16 %Dp = getelementptr int* %P, int 3
19 %Ep = getelementptr int* %P, int 4
22 %Fp = getelementptr int* %P, int 5
25 %Gp = getelementptr int* %P, int 6
28 %Hp = getelementptr int* %P, int 7
31 %Ip = getelementptr int* %P, int 8
34 %Jp = getelementptr int* %P, int 9
40 ;; This testcase should produce identical code to the test above.
41 int %regpressure2(int* %P) {
43 %Bp = getelementptr int* %P, int 1
45 %Cp = getelementptr int* %P, int 2
47 %Dp = getelementptr int* %P, int 3
49 %Ep = getelementptr int* %P, int 4
51 %Fp = getelementptr int* %P, int 5
53 %Gp = getelementptr int* %P, int 6
55 %Hp = getelementptr int* %P, int 7
57 %Ip = getelementptr int* %P, int 8
59 %Jp = getelementptr int* %P, int 9
73 ;; adds should be the same as muls.
74 int %regpressure3(short* %P, bool %Cond, int* %Other) {
76 %Bp = getelementptr short* %P, int 1
78 %Cp = getelementptr short* %P, int 2
80 %Dp = getelementptr short* %P, int 3
82 %Ep = getelementptr short* %P, int 4
84 %Fp = getelementptr short* %P, int 5
86 %Gp = getelementptr short* %P, int 6
88 %Hp = getelementptr short* %P, int 7
90 %Ip = getelementptr short* %P, int 8
92 %Jp = getelementptr short* %P, int 9
95 ;; These casts prevent folding the loads into the adds.
96 %A = cast short %A to int
97 %B = cast short %B to int
98 %D = cast short %D to int
99 %C = cast short %C to int
100 %E = cast short %E to int
101 %F = cast short %F to int
102 %G = cast short %G to int
103 %H = cast short %H to int
104 %I = cast short %I to int
105 %J = cast short %J to int
107 %s2 = add int %C, %s1
108 %s3 = add int %D, %s2
109 %s4 = add int %E, %s3
110 %s5 = add int %F, %s4
111 %s6 = add int %G, %s5
112 %s7 = add int %H, %s6
113 %s8 = add int %I, %s7
114 %s9 = add int %J, %s8