summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-12-16 06:20:58 +0000
committerDan Gohman <gohman@apple.com>2008-12-16 06:20:58 +0000
commitfde221fa0a192a00dfdbce35ceec3d2035fe1019 (patch)
treec6f0f14e25c36f2892dc0ff33a96b4855799f8c3
parent8749b61178228ba1fb2668034d79da1b247173d7 (diff)
downloadllvm-fde221fa0a192a00dfdbce35ceec3d2035fe1019.tar.gz
llvm-fde221fa0a192a00dfdbce35ceec3d2035fe1019.tar.bz2
llvm-fde221fa0a192a00dfdbce35ceec3d2035fe1019.tar.xz
When breaking an anti-dependency, don't use a register which has seen
one of its aliases defined. This is conservative, but tricky subreg corner cases are outside the primary aim of this pass. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61077 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/PostRASchedulerList.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/lib/CodeGen/PostRASchedulerList.cpp b/lib/CodeGen/PostRASchedulerList.cpp
index 0fc6c3370b..865479d300 100644
--- a/lib/CodeGen/PostRASchedulerList.cpp
+++ b/lib/CodeGen/PostRASchedulerList.cpp
@@ -454,6 +454,7 @@ bool SchedulePostRATDList::BreakAntiDependencies() {
assert(((KillIndices[NewReg] == -1u) != (DefIndices[NewReg] == -1u)) &&
"Kill and Def maps aren't consistent for NewReg!");
if (KillIndices[NewReg] == -1u &&
+ Classes[NewReg] != reinterpret_cast<TargetRegisterClass *>(-1) &&
KillIndices[AntiDepReg] <= DefIndices[NewReg]) {
DOUT << "Breaking anti-dependence edge on "
<< TRI->getName(AntiDepReg)