From 8db866808c803f9bdcd45c56a042fedd8cccd5bc Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Thu, 11 Sep 2008 20:07:10 +0000 Subject: Fix PR2748. Avoid coalescing physical register with virtual register which would create illegal extract_subreg. e.g. vr1024 = extract_subreg vr1025, 1 ... vr1024 = mov8rr AH If vr1024 is coalesced with AH, the extract_subreg is now illegal since AH does not have a super-reg whose sub-register 1 is AH. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56118 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SimpleRegisterCoalescing.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'lib/CodeGen/SimpleRegisterCoalescing.h') diff --git a/lib/CodeGen/SimpleRegisterCoalescing.h b/lib/CodeGen/SimpleRegisterCoalescing.h index 41d1dfb..39c9071 100644 --- a/lib/CodeGen/SimpleRegisterCoalescing.h +++ b/lib/CodeGen/SimpleRegisterCoalescing.h @@ -223,6 +223,13 @@ namespace llvm { bool isProfitableToCoalesceToSubRC(unsigned SrcReg, unsigned DstReg, MachineBasicBlock *MBB); + /// HasIncompatibleSubRegDefUse - If we are trying to coalesce a virtual + /// register with a physical register, check if any of the virtual register + /// operand is a sub-register use or def. If so, make sure it won't result + /// in an illegal extract_subreg or insert_subreg instruction. + bool HasIncompatibleSubRegDefUse(MachineInstr *CopyMI, + unsigned VirtReg, unsigned PhysReg); + /// RangeIsDefinedByCopyFromReg - Return true if the specified live range of /// the specified live interval is defined by a copy from the specified /// register. -- cgit v1.1