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