Fix for PR12090: clear def maps of aliases when visiting a copy. e.g.
authorEvan Cheng <evan.cheng@apple.com>
Mon, 27 Feb 2012 21:46:42 +0000 (21:46 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Mon, 27 Feb 2012 21:46:42 +0000 (21:46 +0000)
%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

lib/CodeGen/MachineCopyPropagation.cpp

index 9ed7b7357ed8bb38f35f6dbd38729c389d3682ca..8a9786d9cb913bbe877692d6926060e648d88d71 100644 (file)
@@ -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) {