diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2008-09-11 20:07:10 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2008-09-11 20:07:10 +0000 |
| commit | 8db866808c803f9bdcd45c56a042fedd8cccd5bc (patch) | |
| tree | 0616d920ec6af7dc1ea68c275f8065140b736e13 /lib/CodeGen/SimpleRegisterCoalescing.h | |
| parent | ac34a00fe0784cd6efc466f03f93ab1017fa9726 (diff) | |
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
Diffstat (limited to 'lib/CodeGen/SimpleRegisterCoalescing.h')
| -rw-r--r-- | lib/CodeGen/SimpleRegisterCoalescing.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/CodeGen/SimpleRegisterCoalescing.h b/lib/CodeGen/SimpleRegisterCoalescing.h index 41d1dfb20b..39c90716b6 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. |
