[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / X86 / 2009-03-23-MultiUseSched.ll
blob276d52366ae88b7ff4d5b0d5087a0a8a134a9840
1 ; REQUIRES: asserts
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]
240         ret i64 %tmp225
243 declare i64 @llvm.bswap.i64(i64) nounwind readnone