Fix a subtle bug in DeadMachineInstructionElim's liveness
authorDan Gohman <gohman@apple.com>
Thu, 16 Oct 2008 00:11:23 +0000 (00:11 +0000)
committerDan Gohman <gohman@apple.com>
Thu, 16 Oct 2008 00:11:23 +0000 (00:11 +0000)
computation. A def of a register doesn't necessarily kill
live super-registers.

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

lib/CodeGen/DeadMachineInstructionElim.cpp

index 305ec0e79885d0e4ad134d52baa714c5eae963a1..0d043f795a2d85831dd609859ca1ee35fb844916 100644 (file)
@@ -126,7 +126,10 @@ bool DeadMachineInstructionElim::runOnMachineFunction(MachineFunction &MF) {
           unsigned Reg = MO.getReg();
           if (Reg != 0 && TargetRegisterInfo::isPhysicalRegister(Reg)) {
             LivePhysRegs.reset(Reg);
-            for (const unsigned *AliasSet = TRI->getAliasSet(Reg);
+            // Check the subreg set, not the alias set, because a def
+            // of a super-register may still be partially live after
+            // this def.
+            for (const unsigned *AliasSet = TRI->getSubRegisters(Reg);
                  *AliasSet; ++AliasSet)
               LivePhysRegs.reset(*AliasSet);
           }