diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-06-19 01:39:21 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-06-19 01:39:21 +0000 |
commit | e00f5de361bcc69d05e07303460e6849668b7169 (patch) | |
tree | 89ecba71ec1a6129624fe4fb56b66f01d82f852d /lib/CodeGen/SimpleRegisterCoalescing.h | |
parent | 1b38ec83f07d5801035567160008cd7cb99a5c1a (diff) | |
download | external_llvm-e00f5de361bcc69d05e07303460e6849668b7169.zip external_llvm-e00f5de361bcc69d05e07303460e6849668b7169.tar.gz external_llvm-e00f5de361bcc69d05e07303460e6849668b7169.tar.bz2 |
Coalesce copy from one register class to a sub register class. e.g. X86::MOV16to16_.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52480 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SimpleRegisterCoalescing.h')
-rw-r--r-- | lib/CodeGen/SimpleRegisterCoalescing.h | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/CodeGen/SimpleRegisterCoalescing.h b/lib/CodeGen/SimpleRegisterCoalescing.h index a2041ff..3a65a9f 100644 --- a/lib/CodeGen/SimpleRegisterCoalescing.h +++ b/lib/CodeGen/SimpleRegisterCoalescing.h @@ -165,9 +165,13 @@ namespace llvm { /// joins them and returns true. bool SimpleJoin(LiveInterval &LHS, LiveInterval &RHS); - /// Return true if the two specified registers belong to different - /// register classes. The registers may be either phys or virt regs. - bool differingRegisterClasses(unsigned RegA, unsigned RegB) const; + /// Return true if the two specified registers belong to different register + /// classes. The registers may be either phys or virt regs. In the + /// case where both registers are virtual registers, it would also returns + /// true by reference the RegB register class in SubRC if it is a subset of + /// RegA's register class. + bool differingRegisterClasses(unsigned RegA, unsigned RegB, + const TargetRegisterClass *&SubRC) const; /// AdjustCopiesBackFrom - We found a non-trivially-coalescable copy. If @@ -205,6 +209,12 @@ namespace llvm { /// identity copies so they will be removed. void RemoveCopiesFromValNo(LiveInterval &li, VNInfo *VNI); + /// isProfitableToCoalesceToSubRC - Given that register class of DstReg is + /// a subset of the register class of SrcReg, return true if it's profitable + /// to coalesce the two registers. + bool isProfitableToCoalesceToSubRC(unsigned SrcReg, unsigned DstReg, + MachineBasicBlock *MBB); + /// RangeIsDefinedByCopyFromReg - Return true if the specified live range of /// the specified live interval is defined by a copy from the specified /// register. |