From 5942efb0e5f49fb772e340c251502cc0a7ff157e Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Mon, 5 Nov 2007 03:11:55 +0000 Subject: Handle cases where a register and one of its super-register are both marked as defined on the same instruction. This fixes PR1767. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43699 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/LiveVariables.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/CodeGen/LiveVariables.cpp') diff --git a/lib/CodeGen/LiveVariables.cpp b/lib/CodeGen/LiveVariables.cpp index 57396b7416..7e8965ea84 100644 --- a/lib/CodeGen/LiveVariables.cpp +++ b/lib/CodeGen/LiveVariables.cpp @@ -203,7 +203,7 @@ bool LiveVariables::addRegisterKilled(unsigned IncomingReg, MachineInstr *MI, RegInfo->isSuperRegister(IncomingReg, Reg) && MO.isKill()) // A super-register kill already exists. - return true; + Found = true; } } @@ -357,7 +357,9 @@ void LiveVariables::HandlePhysRegDef(unsigned Reg, MachineInstr *MI) { } else if (PhysRegPartUse[Reg]) // Add implicit use / kill to last partial use. addRegisterKilled(Reg, PhysRegPartUse[Reg], true); - else + else if (LastRef != MI) + // Defined, but not used. However, watch out for cases where a super-reg + // is also defined on the same MI. addRegisterDead(Reg, LastRef); } -- cgit v1.2.3-18-g5258