diff options
author | Evan Cheng <evan.cheng@apple.com> | 2012-02-27 21:46:42 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2012-02-27 21:46:42 +0000 |
commit | b266cd0e9824db48804c785b2c48b43be0c0f7dd (patch) | |
tree | c17ccdbf6007c449a2ce5923e0e4303fb45c6465 /lib/CodeGen/MachineCopyPropagation.cpp | |
parent | 7b25ecf6adbf3c4709c48033acfeb6ebbb4452ab (diff) |
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.cpp | 5 |
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) { |