2 ; RUN: llc < %s -mtriple=x86_64-linux -mcpu=corei7 -relocation-model=static -o /dev/null -stats -info-output-file - > %t
3 ; RUN: not grep spill %t
4 ; RUN: not grep "%rsp" %t
5 ; RUN: not grep "%rbp" %t
7 ; The register-pressure scheduler should be able to schedule this in a
8 ; way that does not require spills.
10 @X = external global i64 ; <i64*> [#uses=25]
12 define fastcc i64 @foo() nounwind {
13 %tmp = load volatile i64, i64* @X ; <i64> [#uses=7]
14 %tmp1 = load volatile i64, i64* @X ; <i64> [#uses=5]
15 %tmp2 = load volatile i64, i64* @X ; <i64> [#uses=3]
16 %tmp3 = load volatile i64, i64* @X ; <i64> [#uses=1]
17 %tmp4 = load volatile i64, i64* @X ; <i64> [#uses=5]
18 %tmp5 = load volatile i64, i64* @X ; <i64> [#uses=3]
19 %tmp6 = load volatile i64, i64* @X ; <i64> [#uses=2]
20 %tmp7 = load volatile i64, i64* @X ; <i64> [#uses=1]
21 %tmp8 = load volatile i64, i64* @X ; <i64> [#uses=1]
22 %tmp9 = load volatile i64, i64* @X ; <i64> [#uses=1]
23 %tmp10 = load volatile i64, i64* @X ; <i64> [#uses=1]
24 %tmp11 = load volatile i64, i64* @X ; <i64> [#uses=1]
25 %tmp12 = load volatile i64, i64* @X ; <i64> [#uses=1]
26 %tmp13 = load volatile i64, i64* @X ; <i64> [#uses=1]
27 %tmp14 = load volatile i64, i64* @X ; <i64> [#uses=1]
28 %tmp15 = load volatile i64, i64* @X ; <i64> [#uses=1]
29 %tmp16 = load volatile i64, i64* @X ; <i64> [#uses=1]
30 %tmp17 = load volatile i64, i64* @X ; <i64> [#uses=1]
31 %tmp18 = load volatile i64, i64* @X ; <i64> [#uses=1]
32 %tmp19 = load volatile i64, i64* @X ; <i64> [#uses=1]
33 %tmp20 = load volatile i64, i64* @X ; <i64> [#uses=1]
34 %tmp21 = load volatile i64, i64* @X ; <i64> [#uses=1]
35 %tmp22 = load volatile i64, i64* @X ; <i64> [#uses=1]
36 %tmp23 = load volatile i64, i64* @X ; <i64> [#uses=1]
37 %tmp24 = call i64 @llvm.bswap.i64(i64 %tmp8) ; <i64> [#uses=1]
38 %tmp25 = add i64 %tmp6, %tmp5 ; <i64> [#uses=1]
39 %tmp26 = add i64 %tmp25, %tmp4 ; <i64> [#uses=1]
40 %tmp27 = add i64 %tmp7, %tmp4 ; <i64> [#uses=1]
41 %tmp28 = add i64 %tmp27, %tmp26 ; <i64> [#uses=1]
42 %tmp29 = add i64 %tmp28, %tmp24 ; <i64> [#uses=2]
43 %tmp30 = add i64 %tmp2, %tmp1 ; <i64> [#uses=1]
44 %tmp31 = add i64 %tmp30, %tmp ; <i64> [#uses=1]
45 %tmp32 = add i64 %tmp2, %tmp1 ; <i64> [#uses=1]
46 %tmp33 = add i64 %tmp31, %tmp32 ; <i64> [#uses=1]
47 %tmp34 = add i64 %tmp29, %tmp3 ; <i64> [#uses=5]
48 %tmp35 = add i64 %tmp33, %tmp ; <i64> [#uses=1]
49 %tmp36 = add i64 %tmp35, %tmp29 ; <i64> [#uses=7]
50 %tmp37 = call i64 @llvm.bswap.i64(i64 %tmp9) ; <i64> [#uses=1]
51 %tmp38 = add i64 %tmp4, %tmp5 ; <i64> [#uses=1]
52 %tmp39 = add i64 %tmp38, %tmp34 ; <i64> [#uses=1]
53 %tmp40 = add i64 %tmp6, %tmp37 ; <i64> [#uses=1]
54 %tmp41 = add i64 %tmp40, %tmp39 ; <i64> [#uses=1]
55 %tmp42 = add i64 %tmp41, %tmp34 ; <i64> [#uses=2]
56 %tmp43 = add i64 %tmp1, %tmp ; <i64> [#uses=1]
57 %tmp44 = add i64 %tmp36, %tmp43 ; <i64> [#uses=1]
58 %tmp45 = add i64 %tmp1, %tmp ; <i64> [#uses=1]
59 %tmp46 = add i64 %tmp44, %tmp45 ; <i64> [#uses=1]
60 %tmp47 = add i64 %tmp42, %tmp2 ; <i64> [#uses=5]
61 %tmp48 = add i64 %tmp36, %tmp46 ; <i64> [#uses=1]
62 %tmp49 = add i64 %tmp48, %tmp42 ; <i64> [#uses=7]
63 %tmp50 = call i64 @llvm.bswap.i64(i64 %tmp10) ; <i64> [#uses=1]
64 %tmp51 = add i64 %tmp34, %tmp4 ; <i64> [#uses=1]
65 %tmp52 = add i64 %tmp51, %tmp47 ; <i64> [#uses=1]
66 %tmp53 = add i64 %tmp5, %tmp50 ; <i64> [#uses=1]
67 %tmp54 = add i64 %tmp53, %tmp52 ; <i64> [#uses=1]
68 %tmp55 = add i64 %tmp54, %tmp47 ; <i64> [#uses=2]
69 %tmp56 = add i64 %tmp36, %tmp ; <i64> [#uses=1]
70 %tmp57 = add i64 %tmp49, %tmp56 ; <i64> [#uses=1]
71 %tmp58 = add i64 %tmp36, %tmp ; <i64> [#uses=1]
72 %tmp59 = add i64 %tmp57, %tmp58 ; <i64> [#uses=1]
73 %tmp60 = add i64 %tmp55, %tmp1 ; <i64> [#uses=5]
74 %tmp61 = add i64 %tmp49, %tmp59 ; <i64> [#uses=1]
75 %tmp62 = add i64 %tmp61, %tmp55 ; <i64> [#uses=7]
76 %tmp63 = call i64 @llvm.bswap.i64(i64 %tmp11) ; <i64> [#uses=1]
77 %tmp64 = add i64 %tmp47, %tmp34 ; <i64> [#uses=1]
78 %tmp65 = add i64 %tmp64, %tmp60 ; <i64> [#uses=1]
79 %tmp66 = add i64 %tmp4, %tmp63 ; <i64> [#uses=1]
80 %tmp67 = add i64 %tmp66, %tmp65 ; <i64> [#uses=1]
81 %tmp68 = add i64 %tmp67, %tmp60 ; <i64> [#uses=2]
82 %tmp69 = add i64 %tmp49, %tmp36 ; <i64> [#uses=1]
83 %tmp70 = add i64 %tmp62, %tmp69 ; <i64> [#uses=1]
84 %tmp71 = add i64 %tmp49, %tmp36 ; <i64> [#uses=1]
85 %tmp72 = add i64 %tmp70, %tmp71 ; <i64> [#uses=1]
86 %tmp73 = add i64 %tmp68, %tmp ; <i64> [#uses=5]
87 %tmp74 = add i64 %tmp62, %tmp72 ; <i64> [#uses=1]
88 %tmp75 = add i64 %tmp74, %tmp68 ; <i64> [#uses=7]
89 %tmp76 = call i64 @llvm.bswap.i64(i64 %tmp12) ; <i64> [#uses=1]
90 %tmp77 = add i64 %tmp60, %tmp47 ; <i64> [#uses=1]
91 %tmp78 = add i64 %tmp77, %tmp73 ; <i64> [#uses=1]
92 %tmp79 = add i64 %tmp34, %tmp76 ; <i64> [#uses=1]
93 %tmp80 = add i64 %tmp79, %tmp78 ; <i64> [#uses=1]
94 %tmp81 = add i64 %tmp80, %tmp73 ; <i64> [#uses=2]
95 %tmp82 = add i64 %tmp62, %tmp49 ; <i64> [#uses=1]
96 %tmp83 = add i64 %tmp75, %tmp82 ; <i64> [#uses=1]
97 %tmp84 = add i64 %tmp62, %tmp49 ; <i64> [#uses=1]
98 %tmp85 = add i64 %tmp83, %tmp84 ; <i64> [#uses=1]
99 %tmp86 = add i64 %tmp81, %tmp36 ; <i64> [#uses=5]
100 %tmp87 = add i64 %tmp75, %tmp85 ; <i64> [#uses=1]
101 %tmp88 = add i64 %tmp87, %tmp81 ; <i64> [#uses=7]
102 %tmp89 = call i64 @llvm.bswap.i64(i64 %tmp13) ; <i64> [#uses=1]
103 %tmp90 = add i64 %tmp73, %tmp60 ; <i64> [#uses=1]
104 %tmp91 = add i64 %tmp90, %tmp86 ; <i64> [#uses=1]
105 %tmp92 = add i64 %tmp47, %tmp89 ; <i64> [#uses=1]
106 %tmp93 = add i64 %tmp92, %tmp91 ; <i64> [#uses=1]
107 %tmp94 = add i64 %tmp93, %tmp86 ; <i64> [#uses=2]
108 %tmp95 = add i64 %tmp75, %tmp62 ; <i64> [#uses=1]
109 %tmp96 = add i64 %tmp88, %tmp95 ; <i64> [#uses=1]
110 %tmp97 = add i64 %tmp75, %tmp62 ; <i64> [#uses=1]
111 %tmp98 = add i64 %tmp96, %tmp97 ; <i64> [#uses=1]
112 %tmp99 = add i64 %tmp94, %tmp49 ; <i64> [#uses=5]
113 %tmp100 = add i64 %tmp88, %tmp98 ; <i64> [#uses=1]
114 %tmp101 = add i64 %tmp100, %tmp94 ; <i64> [#uses=7]
115 %tmp102 = call i64 @llvm.bswap.i64(i64 %tmp14) ; <i64> [#uses=1]
116 %tmp103 = add i64 %tmp86, %tmp73 ; <i64> [#uses=1]
117 %tmp104 = add i64 %tmp103, %tmp99 ; <i64> [#uses=1]
118 %tmp105 = add i64 %tmp102, %tmp60 ; <i64> [#uses=1]
119 %tmp106 = add i64 %tmp105, %tmp104 ; <i64> [#uses=1]
120 %tmp107 = add i64 %tmp106, %tmp99 ; <i64> [#uses=2]
121 %tmp108 = add i64 %tmp88, %tmp75 ; <i64> [#uses=1]
122 %tmp109 = add i64 %tmp101, %tmp108 ; <i64> [#uses=1]
123 %tmp110 = add i64 %tmp88, %tmp75 ; <i64> [#uses=1]
124 %tmp111 = add i64 %tmp109, %tmp110 ; <i64> [#uses=1]
125 %tmp112 = add i64 %tmp107, %tmp62 ; <i64> [#uses=5]
126 %tmp113 = add i64 %tmp101, %tmp111 ; <i64> [#uses=1]
127 %tmp114 = add i64 %tmp113, %tmp107 ; <i64> [#uses=7]
128 %tmp115 = call i64 @llvm.bswap.i64(i64 %tmp15) ; <i64> [#uses=1]
129 %tmp116 = add i64 %tmp99, %tmp86 ; <i64> [#uses=1]
130 %tmp117 = add i64 %tmp116, %tmp112 ; <i64> [#uses=1]
131 %tmp118 = add i64 %tmp115, %tmp73 ; <i64> [#uses=1]
132 %tmp119 = add i64 %tmp118, %tmp117 ; <i64> [#uses=1]
133 %tmp120 = add i64 %tmp119, %tmp112 ; <i64> [#uses=2]
134 %tmp121 = add i64 %tmp101, %tmp88 ; <i64> [#uses=1]
135 %tmp122 = add i64 %tmp114, %tmp121 ; <i64> [#uses=1]
136 %tmp123 = add i64 %tmp101, %tmp88 ; <i64> [#uses=1]
137 %tmp124 = add i64 %tmp122, %tmp123 ; <i64> [#uses=1]
138 %tmp125 = add i64 %tmp120, %tmp75 ; <i64> [#uses=5]
139 %tmp126 = add i64 %tmp114, %tmp124 ; <i64> [#uses=1]
140 %tmp127 = add i64 %tmp126, %tmp120 ; <i64> [#uses=7]
141 %tmp128 = call i64 @llvm.bswap.i64(i64 %tmp16) ; <i64> [#uses=1]
142 %tmp129 = add i64 %tmp112, %tmp99 ; <i64> [#uses=1]
143 %tmp130 = add i64 %tmp129, %tmp125 ; <i64> [#uses=1]
144 %tmp131 = add i64 %tmp128, %tmp86 ; <i64> [#uses=1]
145 %tmp132 = add i64 %tmp131, %tmp130 ; <i64> [#uses=1]
146 %tmp133 = add i64 %tmp132, %tmp125 ; <i64> [#uses=2]
147 %tmp134 = add i64 %tmp114, %tmp101 ; <i64> [#uses=1]
148 %tmp135 = add i64 %tmp127, %tmp134 ; <i64> [#uses=1]
149 %tmp136 = add i64 %tmp114, %tmp101 ; <i64> [#uses=1]
150 %tmp137 = add i64 %tmp135, %tmp136 ; <i64> [#uses=1]
151 %tmp138 = add i64 %tmp133, %tmp88 ; <i64> [#uses=5]
152 %tmp139 = add i64 %tmp127, %tmp137 ; <i64> [#uses=1]
153 %tmp140 = add i64 %tmp139, %tmp133 ; <i64> [#uses=7]
154 %tmp141 = call i64 @llvm.bswap.i64(i64 %tmp17) ; <i64> [#uses=1]
155 %tmp142 = add i64 %tmp125, %tmp112 ; <i64> [#uses=1]
156 %tmp143 = add i64 %tmp142, %tmp138 ; <i64> [#uses=1]
157 %tmp144 = add i64 %tmp141, %tmp99 ; <i64> [#uses=1]
158 %tmp145 = add i64 %tmp144, %tmp143 ; <i64> [#uses=1]
159 %tmp146 = add i64 %tmp145, %tmp138 ; <i64> [#uses=2]
160 %tmp147 = add i64 %tmp127, %tmp114 ; <i64> [#uses=1]
161 %tmp148 = add i64 %tmp140, %tmp147 ; <i64> [#uses=1]
162 %tmp149 = add i64 %tmp127, %tmp114 ; <i64> [#uses=1]
163 %tmp150 = add i64 %tmp148, %tmp149 ; <i64> [#uses=1]
164 %tmp151 = add i64 %tmp146, %tmp101 ; <i64> [#uses=5]
165 %tmp152 = add i64 %tmp140, %tmp150 ; <i64> [#uses=1]
166 %tmp153 = add i64 %tmp152, %tmp146 ; <i64> [#uses=7]
167 %tmp154 = call i64 @llvm.bswap.i64(i64 %tmp18) ; <i64> [#uses=1]
168 %tmp155 = add i64 %tmp138, %tmp125 ; <i64> [#uses=1]
169 %tmp156 = add i64 %tmp155, %tmp151 ; <i64> [#uses=1]
170 %tmp157 = add i64 %tmp154, %tmp112 ; <i64> [#uses=1]
171 %tmp158 = add i64 %tmp157, %tmp156 ; <i64> [#uses=1]
172 %tmp159 = add i64 %tmp158, %tmp151 ; <i64> [#uses=2]
173 %tmp160 = add i64 %tmp140, %tmp127 ; <i64> [#uses=1]
174 %tmp161 = add i64 %tmp153, %tmp160 ; <i64> [#uses=1]
175 %tmp162 = add i64 %tmp140, %tmp127 ; <i64> [#uses=1]
176 %tmp163 = add i64 %tmp161, %tmp162 ; <i64> [#uses=1]
177 %tmp164 = add i64 %tmp159, %tmp114 ; <i64> [#uses=5]
178 %tmp165 = add i64 %tmp153, %tmp163 ; <i64> [#uses=1]
179 %tmp166 = add i64 %tmp165, %tmp159 ; <i64> [#uses=7]
180 %tmp167 = call i64 @llvm.bswap.i64(i64 %tmp19) ; <i64> [#uses=1]
181 %tmp168 = add i64 %tmp151, %tmp138 ; <i64> [#uses=1]
182 %tmp169 = add i64 %tmp168, %tmp164 ; <i64> [#uses=1]
183 %tmp170 = add i64 %tmp167, %tmp125 ; <i64> [#uses=1]
184 %tmp171 = add i64 %tmp170, %tmp169 ; <i64> [#uses=1]
185 %tmp172 = add i64 %tmp171, %tmp164 ; <i64> [#uses=2]
186 %tmp173 = add i64 %tmp153, %tmp140 ; <i64> [#uses=1]
187 %tmp174 = add i64 %tmp166, %tmp173 ; <i64> [#uses=1]
188 %tmp175 = add i64 %tmp153, %tmp140 ; <i64> [#uses=1]
189 %tmp176 = add i64 %tmp174, %tmp175 ; <i64> [#uses=1]
190 %tmp177 = add i64 %tmp172, %tmp127 ; <i64> [#uses=5]
191 %tmp178 = add i64 %tmp166, %tmp176 ; <i64> [#uses=1]
192 %tmp179 = add i64 %tmp178, %tmp172 ; <i64> [#uses=6]
193 %tmp180 = call i64 @llvm.bswap.i64(i64 %tmp20) ; <i64> [#uses=1]
194 %tmp181 = add i64 %tmp164, %tmp151 ; <i64> [#uses=1]
195 %tmp182 = add i64 %tmp181, %tmp177 ; <i64> [#uses=1]
196 %tmp183 = add i64 %tmp180, %tmp138 ; <i64> [#uses=1]
197 %tmp184 = add i64 %tmp183, %tmp182 ; <i64> [#uses=1]
198 %tmp185 = add i64 %tmp184, %tmp177 ; <i64> [#uses=2]
199 %tmp186 = add i64 %tmp166, %tmp153 ; <i64> [#uses=1]
200 %tmp187 = add i64 %tmp179, %tmp186 ; <i64> [#uses=1]
201 %tmp188 = add i64 %tmp166, %tmp153 ; <i64> [#uses=1]
202 %tmp189 = add i64 %tmp187, %tmp188 ; <i64> [#uses=1]
203 %tmp190 = add i64 %tmp185, %tmp140 ; <i64> [#uses=4]
204 %tmp191 = add i64 %tmp179, %tmp189 ; <i64> [#uses=1]
205 %tmp192 = add i64 %tmp191, %tmp185 ; <i64> [#uses=4]
206 %tmp193 = call i64 @llvm.bswap.i64(i64 %tmp21) ; <i64> [#uses=1]
207 %tmp194 = add i64 %tmp177, %tmp164 ; <i64> [#uses=1]
208 %tmp195 = add i64 %tmp194, %tmp190 ; <i64> [#uses=1]
209 %tmp196 = add i64 %tmp193, %tmp151 ; <i64> [#uses=1]
210 %tmp197 = add i64 %tmp196, %tmp195 ; <i64> [#uses=1]
211 %tmp198 = add i64 %tmp197, %tmp190 ; <i64> [#uses=2]
212 %tmp199 = add i64 %tmp179, %tmp166 ; <i64> [#uses=1]
213 %tmp200 = add i64 %tmp192, %tmp199 ; <i64> [#uses=1]
214 %tmp201 = add i64 %tmp179, %tmp166 ; <i64> [#uses=1]
215 %tmp202 = add i64 %tmp200, %tmp201 ; <i64> [#uses=1]
216 %tmp203 = add i64 %tmp198, %tmp153 ; <i64> [#uses=3]
217 %tmp204 = add i64 %tmp192, %tmp202 ; <i64> [#uses=1]
218 %tmp205 = add i64 %tmp204, %tmp198 ; <i64> [#uses=2]
219 %tmp206 = call i64 @llvm.bswap.i64(i64 %tmp22) ; <i64> [#uses=1]
220 %tmp207 = add i64 %tmp190, %tmp177 ; <i64> [#uses=1]
221 %tmp208 = add i64 %tmp207, %tmp203 ; <i64> [#uses=1]
222 %tmp209 = add i64 %tmp206, %tmp164 ; <i64> [#uses=1]
223 %tmp210 = add i64 %tmp209, %tmp208 ; <i64> [#uses=1]
224 %tmp211 = add i64 %tmp210, %tmp203 ; <i64> [#uses=2]
225 %tmp212 = add i64 %tmp192, %tmp179 ; <i64> [#uses=1]
226 %tmp213 = add i64 %tmp205, %tmp212 ; <i64> [#uses=1]
227 %tmp214 = add i64 %tmp192, %tmp179 ; <i64> [#uses=1]
228 %tmp215 = add i64 %tmp213, %tmp214 ; <i64> [#uses=1]
229 %tmp216 = add i64 %tmp211, %tmp166 ; <i64> [#uses=2]
230 %tmp217 = add i64 %tmp205, %tmp215 ; <i64> [#uses=1]
231 %tmp218 = add i64 %tmp217, %tmp211 ; <i64> [#uses=1]
232 %tmp219 = call i64 @llvm.bswap.i64(i64 %tmp23) ; <i64> [#uses=2]
233 store volatile i64 %tmp219, i64* @X, align 8
234 %tmp220 = add i64 %tmp203, %tmp190 ; <i64> [#uses=1]
235 %tmp221 = add i64 %tmp220, %tmp216 ; <i64> [#uses=1]
236 %tmp222 = add i64 %tmp219, %tmp177 ; <i64> [#uses=1]
237 %tmp223 = add i64 %tmp222, %tmp221 ; <i64> [#uses=1]
238 %tmp224 = add i64 %tmp223, %tmp216 ; <i64> [#uses=1]
239 %tmp225 = add i64 %tmp224, %tmp218 ; <i64> [#uses=1]
243 declare i64 @llvm.bswap.i64(i64) nounwind readnone