summaryrefslogtreecommitdiff
path: root/lib/CodeGen/MachineCopyPropagation.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2012-02-27 21:46:42 +0000
committerEvan Cheng <evan.cheng@apple.com>2012-02-27 21:46:42 +0000
commitb266cd0e9824db48804c785b2c48b43be0c0f7dd (patch)
treec17ccdbf6007c449a2ce5923e0e4303fb45c6465 /lib/CodeGen/MachineCopyPropagation.cpp
parent7b25ecf6adbf3c4709c48033acfeb6ebbb4452ab (diff)
downloadllvm-b266cd0e9824db48804c785b2c48b43be0c0f7dd.tar.gz
llvm-b266cd0e9824db48804c785b2c48b43be0c0f7dd.tar.bz2
llvm-b266cd0e9824db48804c785b2c48b43be0c0f7dd.tar.xz
Fix for PR12090: clear def maps of aliases when visiting a copy. e.g.
%S5<def> = COPY %S0<kill> First clear def map of Q1, etc. No small test case available. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151574 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineCopyPropagation.cpp')
-rw-r--r--lib/CodeGen/MachineCopyPropagation.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/CodeGen/MachineCopyPropagation.cpp b/lib/CodeGen/MachineCopyPropagation.cpp
index 9ed7b7357e..8a9786d9cb 100644
--- a/lib/CodeGen/MachineCopyPropagation.cpp
+++ b/lib/CodeGen/MachineCopyPropagation.cpp
@@ -199,6 +199,11 @@ bool MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) {
SourceNoLongerAvailable(Def, SrcMap, AvailCopyMap);
// Remember Def is defined by the copy.
+ // ... Make sure to clear the def maps of aliases first.
+ for (const unsigned *AS = TRI->getAliasSet(Def); *AS; ++AS) {
+ CopyMap.erase(*AS);
+ AvailCopyMap.erase(*AS);
+ }
CopyMap[Def] = MI;
AvailCopyMap[Def] = MI;
for (const unsigned *SR = TRI->getSubRegisters(Def); *SR; ++SR) {