[llvm-commits] CVS: llvm/lib/CodeGen/LiveVariables.cpp

Chris Lattner lattner at cs.uiuc.edu
Mon May 10 00:13:03 PDT 2004


Changes in directory llvm/lib/CodeGen:

LiveVariables.cpp updated: 1.30 -> 1.31

---
Log message:

Patch to fix PR337: http://llvm.cs.uiuc.edu/PR337 .  Make sure to mark all aliased physical registers as used
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.


---
Diffs of the changes:  (+8 -3)

Index: llvm/lib/CodeGen/LiveVariables.cpp
diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.30 llvm/lib/CodeGen/LiveVariables.cpp:1.31
--- llvm/lib/CodeGen/LiveVariables.cpp:1.30	Sat May  1 16:24:24 2004
+++ llvm/lib/CodeGen/LiveVariables.cpp	Mon May 10 00:12:43 2004
@@ -126,6 +126,12 @@
 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 @@
   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));
     }





More information about the llvm-commits mailing list