From e1c5267aec521c8c2a0cd719e03d10bcc1e0f6ef Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 24 Mar 2009 16:38:27 +0000 Subject: Add a testcase for the scheduling heuristic introduced in r67586. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67622 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/2009-03-23-MultiUseSched.ll | 242 +++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 test/CodeGen/X86/2009-03-23-MultiUseSched.ll (limited to 'test/CodeGen/X86/2009-03-23-MultiUseSched.ll') diff --git a/test/CodeGen/X86/2009-03-23-MultiUseSched.ll b/test/CodeGen/X86/2009-03-23-MultiUseSched.ll new file mode 100644 index 0000000000..a96314563c --- /dev/null +++ b/test/CodeGen/X86/2009-03-23-MultiUseSched.ll @@ -0,0 +1,242 @@ +; RUN: llvm-as < %s | llc -march=x86-64 -relocation-model=static -stats -info-output-file - > %t +; RUN: not grep spill %t +; RUN: not grep {%rsp} %t +; RUN: not grep {%rbp} %t + +; The register-pressure scheduler should be able to schedule this in a +; way that does not require spills. + +@X = external global i64 ; [#uses=25] + +define fastcc i64 @foo() nounwind { + %tmp = volatile load i64* @X ; [#uses=7] + %tmp1 = volatile load i64* @X ; [#uses=5] + %tmp2 = volatile load i64* @X ; [#uses=3] + %tmp3 = volatile load i64* @X ; [#uses=1] + %tmp4 = volatile load i64* @X ; [#uses=5] + %tmp5 = volatile load i64* @X ; [#uses=3] + %tmp6 = volatile load i64* @X ; [#uses=2] + %tmp7 = volatile load i64* @X ; [#uses=1] + %tmp8 = volatile load i64* @X ; [#uses=1] + %tmp9 = volatile load i64* @X ; [#uses=1] + %tmp10 = volatile load i64* @X ; [#uses=1] + %tmp11 = volatile load i64* @X ; [#uses=1] + %tmp12 = volatile load i64* @X ; [#uses=1] + %tmp13 = volatile load i64* @X ; [#uses=1] + %tmp14 = volatile load i64* @X ; [#uses=1] + %tmp15 = volatile load i64* @X ; [#uses=1] + %tmp16 = volatile load i64* @X ; [#uses=1] + %tmp17 = volatile load i64* @X ; [#uses=1] + %tmp18 = volatile load i64* @X ; [#uses=1] + %tmp19 = volatile load i64* @X ; [#uses=1] + %tmp20 = volatile load i64* @X ; [#uses=1] + %tmp21 = volatile load i64* @X ; [#uses=1] + %tmp22 = volatile load i64* @X ; [#uses=1] + %tmp23 = volatile load i64* @X ; [#uses=1] + %tmp24 = call i64 @llvm.bswap.i64(i64 %tmp8) ; [#uses=1] + %tmp25 = add i64 %tmp6, %tmp5 ; [#uses=1] + %tmp26 = add i64 %tmp25, %tmp4 ; [#uses=1] + %tmp27 = add i64 %tmp7, %tmp4 ; [#uses=1] + %tmp28 = add i64 %tmp27, %tmp26 ; [#uses=1] + %tmp29 = add i64 %tmp28, %tmp24 ; [#uses=2] + %tmp30 = add i64 %tmp2, %tmp1 ; [#uses=1] + %tmp31 = add i64 %tmp30, %tmp ; [#uses=1] + %tmp32 = add i64 %tmp2, %tmp1 ; [#uses=1] + %tmp33 = add i64 %tmp31, %tmp32 ; [#uses=1] + %tmp34 = add i64 %tmp29, %tmp3 ; [#uses=5] + %tmp35 = add i64 %tmp33, %tmp ; [#uses=1] + %tmp36 = add i64 %tmp35, %tmp29 ; [#uses=7] + %tmp37 = call i64 @llvm.bswap.i64(i64 %tmp9) ; [#uses=1] + %tmp38 = add i64 %tmp4, %tmp5 ; [#uses=1] + %tmp39 = add i64 %tmp38, %tmp34 ; [#uses=1] + %tmp40 = add i64 %tmp6, %tmp37 ; [#uses=1] + %tmp41 = add i64 %tmp40, %tmp39 ; [#uses=1] + %tmp42 = add i64 %tmp41, %tmp34 ; [#uses=2] + %tmp43 = add i64 %tmp1, %tmp ; [#uses=1] + %tmp44 = add i64 %tmp36, %tmp43 ; [#uses=1] + %tmp45 = add i64 %tmp1, %tmp ; [#uses=1] + %tmp46 = add i64 %tmp44, %tmp45 ; [#uses=1] + %tmp47 = add i64 %tmp42, %tmp2 ; [#uses=5] + %tmp48 = add i64 %tmp36, %tmp46 ; [#uses=1] + %tmp49 = add i64 %tmp48, %tmp42 ; [#uses=7] + %tmp50 = call i64 @llvm.bswap.i64(i64 %tmp10) ; [#uses=1] + %tmp51 = add i64 %tmp34, %tmp4 ; [#uses=1] + %tmp52 = add i64 %tmp51, %tmp47 ; [#uses=1] + %tmp53 = add i64 %tmp5, %tmp50 ; [#uses=1] + %tmp54 = add i64 %tmp53, %tmp52 ; [#uses=1] + %tmp55 = add i64 %tmp54, %tmp47 ; [#uses=2] + %tmp56 = add i64 %tmp36, %tmp ; [#uses=1] + %tmp57 = add i64 %tmp49, %tmp56 ; [#uses=1] + %tmp58 = add i64 %tmp36, %tmp ; [#uses=1] + %tmp59 = add i64 %tmp57, %tmp58 ; [#uses=1] + %tmp60 = add i64 %tmp55, %tmp1 ; [#uses=5] + %tmp61 = add i64 %tmp49, %tmp59 ; [#uses=1] + %tmp62 = add i64 %tmp61, %tmp55 ; [#uses=7] + %tmp63 = call i64 @llvm.bswap.i64(i64 %tmp11) ; [#uses=1] + %tmp64 = add i64 %tmp47, %tmp34 ; [#uses=1] + %tmp65 = add i64 %tmp64, %tmp60 ; [#uses=1] + %tmp66 = add i64 %tmp4, %tmp63 ; [#uses=1] + %tmp67 = add i64 %tmp66, %tmp65 ; [#uses=1] + %tmp68 = add i64 %tmp67, %tmp60 ; [#uses=2] + %tmp69 = add i64 %tmp49, %tmp36 ; [#uses=1] + %tmp70 = add i64 %tmp62, %tmp69 ; [#uses=1] + %tmp71 = add i64 %tmp49, %tmp36 ; [#uses=1] + %tmp72 = add i64 %tmp70, %tmp71 ; [#uses=1] + %tmp73 = add i64 %tmp68, %tmp ; [#uses=5] + %tmp74 = add i64 %tmp62, %tmp72 ; [#uses=1] + %tmp75 = add i64 %tmp74, %tmp68 ; [#uses=7] + %tmp76 = call i64 @llvm.bswap.i64(i64 %tmp12) ; [#uses=1] + %tmp77 = add i64 %tmp60, %tmp47 ; [#uses=1] + %tmp78 = add i64 %tmp77, %tmp73 ; [#uses=1] + %tmp79 = add i64 %tmp34, %tmp76 ; [#uses=1] + %tmp80 = add i64 %tmp79, %tmp78 ; [#uses=1] + %tmp81 = add i64 %tmp80, %tmp73 ; [#uses=2] + %tmp82 = add i64 %tmp62, %tmp49 ; [#uses=1] + %tmp83 = add i64 %tmp75, %tmp82 ; [#uses=1] + %tmp84 = add i64 %tmp62, %tmp49 ; [#uses=1] + %tmp85 = add i64 %tmp83, %tmp84 ; [#uses=1] + %tmp86 = add i64 %tmp81, %tmp36 ; [#uses=5] + %tmp87 = add i64 %tmp75, %tmp85 ; [#uses=1] + %tmp88 = add i64 %tmp87, %tmp81 ; [#uses=7] + %tmp89 = call i64 @llvm.bswap.i64(i64 %tmp13) ; [#uses=1] + %tmp90 = add i64 %tmp73, %tmp60 ; [#uses=1] + %tmp91 = add i64 %tmp90, %tmp86 ; [#uses=1] + %tmp92 = add i64 %tmp47, %tmp89 ; [#uses=1] + %tmp93 = add i64 %tmp92, %tmp91 ; [#uses=1] + %tmp94 = add i64 %tmp93, %tmp86 ; [#uses=2] + %tmp95 = add i64 %tmp75, %tmp62 ; [#uses=1] + %tmp96 = add i64 %tmp88, %tmp95 ; [#uses=1] + %tmp97 = add i64 %tmp75, %tmp62 ; [#uses=1] + %tmp98 = add i64 %tmp96, %tmp97 ; [#uses=1] + %tmp99 = add i64 %tmp94, %tmp49 ; [#uses=5] + %tmp100 = add i64 %tmp88, %tmp98 ; [#uses=1] + %tmp101 = add i64 %tmp100, %tmp94 ; [#uses=7] + %tmp102 = call i64 @llvm.bswap.i64(i64 %tmp14) ; [#uses=1] + %tmp103 = add i64 %tmp86, %tmp73 ; [#uses=1] + %tmp104 = add i64 %tmp103, %tmp99 ; [#uses=1] + %tmp105 = add i64 %tmp102, %tmp60 ; [#uses=1] + %tmp106 = add i64 %tmp105, %tmp104 ; [#uses=1] + %tmp107 = add i64 %tmp106, %tmp99 ; [#uses=2] + %tmp108 = add i64 %tmp88, %tmp75 ; [#uses=1] + %tmp109 = add i64 %tmp101, %tmp108 ; [#uses=1] + %tmp110 = add i64 %tmp88, %tmp75 ; [#uses=1] + %tmp111 = add i64 %tmp109, %tmp110 ; [#uses=1] + %tmp112 = add i64 %tmp107, %tmp62 ; [#uses=5] + %tmp113 = add i64 %tmp101, %tmp111 ; [#uses=1] + %tmp114 = add i64 %tmp113, %tmp107 ; [#uses=7] + %tmp115 = call i64 @llvm.bswap.i64(i64 %tmp15) ; [#uses=1] + %tmp116 = add i64 %tmp99, %tmp86 ; [#uses=1] + %tmp117 = add i64 %tmp116, %tmp112 ; [#uses=1] + %tmp118 = add i64 %tmp115, %tmp73 ; [#uses=1] + %tmp119 = add i64 %tmp118, %tmp117 ; [#uses=1] + %tmp120 = add i64 %tmp119, %tmp112 ; [#uses=2] + %tmp121 = add i64 %tmp101, %tmp88 ; [#uses=1] + %tmp122 = add i64 %tmp114, %tmp121 ; [#uses=1] + %tmp123 = add i64 %tmp101, %tmp88 ; [#uses=1] + %tmp124 = add i64 %tmp122, %tmp123 ; [#uses=1] + %tmp125 = add i64 %tmp120, %tmp75 ; [#uses=5] + %tmp126 = add i64 %tmp114, %tmp124 ; [#uses=1] + %tmp127 = add i64 %tmp126, %tmp120 ; [#uses=7] + %tmp128 = call i64 @llvm.bswap.i64(i64 %tmp16) ; [#uses=1] + %tmp129 = add i64 %tmp112, %tmp99 ; [#uses=1] + %tmp130 = add i64 %tmp129, %tmp125 ; [#uses=1] + %tmp131 = add i64 %tmp128, %tmp86 ; [#uses=1] + %tmp132 = add i64 %tmp131, %tmp130 ; [#uses=1] + %tmp133 = add i64 %tmp132, %tmp125 ; [#uses=2] + %tmp134 = add i64 %tmp114, %tmp101 ; [#uses=1] + %tmp135 = add i64 %tmp127, %tmp134 ; [#uses=1] + %tmp136 = add i64 %tmp114, %tmp101 ; [#uses=1] + %tmp137 = add i64 %tmp135, %tmp136 ; [#uses=1] + %tmp138 = add i64 %tmp133, %tmp88 ; [#uses=5] + %tmp139 = add i64 %tmp127, %tmp137 ; [#uses=1] + %tmp140 = add i64 %tmp139, %tmp133 ; [#uses=7] + %tmp141 = call i64 @llvm.bswap.i64(i64 %tmp17) ; [#uses=1] + %tmp142 = add i64 %tmp125, %tmp112 ; [#uses=1] + %tmp143 = add i64 %tmp142, %tmp138 ; [#uses=1] + %tmp144 = add i64 %tmp141, %tmp99 ; [#uses=1] + %tmp145 = add i64 %tmp144, %tmp143 ; [#uses=1] + %tmp146 = add i64 %tmp145, %tmp138 ; [#uses=2] + %tmp147 = add i64 %tmp127, %tmp114 ; [#uses=1] + %tmp148 = add i64 %tmp140, %tmp147 ; [#uses=1] + %tmp149 = add i64 %tmp127, %tmp114 ; [#uses=1] + %tmp150 = add i64 %tmp148, %tmp149 ; [#uses=1] + %tmp151 = add i64 %tmp146, %tmp101 ; [#uses=5] + %tmp152 = add i64 %tmp140, %tmp150 ; [#uses=1] + %tmp153 = add i64 %tmp152, %tmp146 ; [#uses=7] + %tmp154 = call i64 @llvm.bswap.i64(i64 %tmp18) ; [#uses=1] + %tmp155 = add i64 %tmp138, %tmp125 ; [#uses=1] + %tmp156 = add i64 %tmp155, %tmp151 ; [#uses=1] + %tmp157 = add i64 %tmp154, %tmp112 ; [#uses=1] + %tmp158 = add i64 %tmp157, %tmp156 ; [#uses=1] + %tmp159 = add i64 %tmp158, %tmp151 ; [#uses=2] + %tmp160 = add i64 %tmp140, %tmp127 ; [#uses=1] + %tmp161 = add i64 %tmp153, %tmp160 ; [#uses=1] + %tmp162 = add i64 %tmp140, %tmp127 ; [#uses=1] + %tmp163 = add i64 %tmp161, %tmp162 ; [#uses=1] + %tmp164 = add i64 %tmp159, %tmp114 ; [#uses=5] + %tmp165 = add i64 %tmp153, %tmp163 ; [#uses=1] + %tmp166 = add i64 %tmp165, %tmp159 ; [#uses=7] + %tmp167 = call i64 @llvm.bswap.i64(i64 %tmp19) ; [#uses=1] + %tmp168 = add i64 %tmp151, %tmp138 ; [#uses=1] + %tmp169 = add i64 %tmp168, %tmp164 ; [#uses=1] + %tmp170 = add i64 %tmp167, %tmp125 ; [#uses=1] + %tmp171 = add i64 %tmp170, %tmp169 ; [#uses=1] + %tmp172 = add i64 %tmp171, %tmp164 ; [#uses=2] + %tmp173 = add i64 %tmp153, %tmp140 ; [#uses=1] + %tmp174 = add i64 %tmp166, %tmp173 ; [#uses=1] + %tmp175 = add i64 %tmp153, %tmp140 ; [#uses=1] + %tmp176 = add i64 %tmp174, %tmp175 ; [#uses=1] + %tmp177 = add i64 %tmp172, %tmp127 ; [#uses=5] + %tmp178 = add i64 %tmp166, %tmp176 ; [#uses=1] + %tmp179 = add i64 %tmp178, %tmp172 ; [#uses=6] + %tmp180 = call i64 @llvm.bswap.i64(i64 %tmp20) ; [#uses=1] + %tmp181 = add i64 %tmp164, %tmp151 ; [#uses=1] + %tmp182 = add i64 %tmp181, %tmp177 ; [#uses=1] + %tmp183 = add i64 %tmp180, %tmp138 ; [#uses=1] + %tmp184 = add i64 %tmp183, %tmp182 ; [#uses=1] + %tmp185 = add i64 %tmp184, %tmp177 ; [#uses=2] + %tmp186 = add i64 %tmp166, %tmp153 ; [#uses=1] + %tmp187 = add i64 %tmp179, %tmp186 ; [#uses=1] + %tmp188 = add i64 %tmp166, %tmp153 ; [#uses=1] + %tmp189 = add i64 %tmp187, %tmp188 ; [#uses=1] + %tmp190 = add i64 %tmp185, %tmp140 ; [#uses=4] + %tmp191 = add i64 %tmp179, %tmp189 ; [#uses=1] + %tmp192 = add i64 %tmp191, %tmp185 ; [#uses=4] + %tmp193 = call i64 @llvm.bswap.i64(i64 %tmp21) ; [#uses=1] + %tmp194 = add i64 %tmp177, %tmp164 ; [#uses=1] + %tmp195 = add i64 %tmp194, %tmp190 ; [#uses=1] + %tmp196 = add i64 %tmp193, %tmp151 ; [#uses=1] + %tmp197 = add i64 %tmp196, %tmp195 ; [#uses=1] + %tmp198 = add i64 %tmp197, %tmp190 ; [#uses=2] + %tmp199 = add i64 %tmp179, %tmp166 ; [#uses=1] + %tmp200 = add i64 %tmp192, %tmp199 ; [#uses=1] + %tmp201 = add i64 %tmp179, %tmp166 ; [#uses=1] + %tmp202 = add i64 %tmp200, %tmp201 ; [#uses=1] + %tmp203 = add i64 %tmp198, %tmp153 ; [#uses=3] + %tmp204 = add i64 %tmp192, %tmp202 ; [#uses=1] + %tmp205 = add i64 %tmp204, %tmp198 ; [#uses=2] + %tmp206 = call i64 @llvm.bswap.i64(i64 %tmp22) ; [#uses=1] + %tmp207 = add i64 %tmp190, %tmp177 ; [#uses=1] + %tmp208 = add i64 %tmp207, %tmp203 ; [#uses=1] + %tmp209 = add i64 %tmp206, %tmp164 ; [#uses=1] + %tmp210 = add i64 %tmp209, %tmp208 ; [#uses=1] + %tmp211 = add i64 %tmp210, %tmp203 ; [#uses=2] + %tmp212 = add i64 %tmp192, %tmp179 ; [#uses=1] + %tmp213 = add i64 %tmp205, %tmp212 ; [#uses=1] + %tmp214 = add i64 %tmp192, %tmp179 ; [#uses=1] + %tmp215 = add i64 %tmp213, %tmp214 ; [#uses=1] + %tmp216 = add i64 %tmp211, %tmp166 ; [#uses=2] + %tmp217 = add i64 %tmp205, %tmp215 ; [#uses=1] + %tmp218 = add i64 %tmp217, %tmp211 ; [#uses=1] + %tmp219 = call i64 @llvm.bswap.i64(i64 %tmp23) ; [#uses=2] + volatile store i64 %tmp219, i64* @X, align 8 + %tmp220 = add i64 %tmp203, %tmp190 ; [#uses=1] + %tmp221 = add i64 %tmp220, %tmp216 ; [#uses=1] + %tmp222 = add i64 %tmp219, %tmp177 ; [#uses=1] + %tmp223 = add i64 %tmp222, %tmp221 ; [#uses=1] + %tmp224 = add i64 %tmp223, %tmp216 ; [#uses=1] + %tmp225 = add i64 %tmp224, %tmp218 ; [#uses=1] + ret i64 %tmp225 +} + +declare i64 @llvm.bswap.i64(i64) nounwind readnone -- cgit v1.2.3