Patch to fix PR337. Make sure to mark all aliased physical registers as used
authorChris Lattner <sabre@nondot.org>
Mon, 10 May 2004 05:12:43 +0000 (05:12 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 10 May 2004 05:12:43 +0000 (05:12 +0000)
when we see a read of a register.  This is important in cases like:

AL = ...
AH = ...

   = AX

The read of AX must make both the AL and AH defs live until the use.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13444 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveVariables.cpp

index 759a0b34124a8cb259a6920ca7c4843df3551592..f1a7d9eb0fd83e78faa70a1b65a4223406a3e271 100644 (file)
@@ -126,6 +126,12 @@ void LiveVariables::HandleVirtRegUse(VarInfo &VRInfo, MachineBasicBlock *MBB,
 void LiveVariables::HandlePhysRegUse(unsigned Reg, MachineInstr *MI) {
   PhysRegInfo[Reg] = MI;
   PhysRegUsed[Reg] = true;
+
+  for (const unsigned *AliasSet = RegInfo->getAliasSet(Reg);
+       unsigned Alias = *AliasSet; ++AliasSet) {
+    PhysRegInfo[Alias] = MI;
+    PhysRegUsed[Alias] = true;
+  }
 }
 
 void LiveVariables::HandlePhysRegDef(unsigned Reg, MachineInstr *MI) {
@@ -140,11 +146,10 @@ void LiveVariables::HandlePhysRegDef(unsigned Reg, MachineInstr *MI) {
   PhysRegUsed[Reg] = false;
 
   for (const unsigned *AliasSet = RegInfo->getAliasSet(Reg);
-       *AliasSet; ++AliasSet) {
-    unsigned Alias = *AliasSet;
+       unsigned Alias = *AliasSet; ++AliasSet) {
     if (MachineInstr *LastUse = PhysRegInfo[Alias]) {
       if (PhysRegUsed[Alias])
-       RegistersKilled.insert(std::make_pair(LastUse, Alias));
+        RegistersKilled.insert(std::make_pair(LastUse, Alias));
       else
        RegistersDead.insert(std::make_pair(LastUse, Alias));
     }