diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-04-09 20:57:25 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-04-09 20:57:25 +0000 |
commit | 909ab8b41a1f6072d24af951b70511d8a586d8ac (patch) | |
tree | 0c9ef7c93ae3eb5aac992a8dc7624009c360ab2a /lib/CodeGen/SimpleRegisterCoalescing.h | |
parent | 48d5f061f8ad9267cdd6bed7a98f7d09a58c0a6e (diff) | |
download | external_llvm-909ab8b41a1f6072d24af951b70511d8a586d8ac.tar.gz external_llvm-909ab8b41a1f6072d24af951b70511d8a586d8ac.tar.bz2 external_llvm-909ab8b41a1f6072d24af951b70511d8a586d8ac.zip |
- More aggressively coalescing away copies whose source is defined by an implicit_def.
- Added insert_subreg coalescing support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49448 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SimpleRegisterCoalescing.h')
-rw-r--r-- | lib/CodeGen/SimpleRegisterCoalescing.h | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/lib/CodeGen/SimpleRegisterCoalescing.h b/lib/CodeGen/SimpleRegisterCoalescing.h index 453760a7e7..7823ba0df4 100644 --- a/lib/CodeGen/SimpleRegisterCoalescing.h +++ b/lib/CodeGen/SimpleRegisterCoalescing.h @@ -196,9 +196,25 @@ namespace llvm { MachineBasicBlock *MBB, unsigned DstReg, unsigned SrcReg); - /// isBackEdgeCopy - Returns true if CopyMI is a back edge copy. + /// CanCoalesceWithImpDef - Returns true if the specified copy instruction + /// from an implicit def to another register can be coalesced away. + bool CanCoalesceWithImpDef(MachineInstr *CopyMI, + LiveInterval &li, LiveInterval &ImpLi) const; + + /// RemoveCopiesFromValNo - The specified value# is defined by an implicit + /// def and it is being removed. Turn all copies from this value# into + /// identity copies so they will be removed. + void RemoveCopiesFromValNo(LiveInterval &li, VNInfo *VNI); + + /// RangeIsDefinedByCopyFromReg - Return true if the specified live range of + /// the specified live interval is defined by a copy from the specified + /// register. + bool RangeIsDefinedByCopyFromReg(LiveInterval &li, LiveRange *LR, + unsigned Reg); + + /// isBackEdgeCopy - Return true if CopyMI is a back edge copy. /// - bool isBackEdgeCopy(MachineInstr *CopyMI, unsigned DstReg); + bool isBackEdgeCopy(MachineInstr *CopyMI, unsigned DstReg) const; /// UpdateRegDefsUses - Replace all defs and uses of SrcReg to DstReg and /// update the subregister number if it is not zero. If DstReg is a @@ -207,6 +223,8 @@ namespace llvm { /// subregister. void UpdateRegDefsUses(unsigned SrcReg, unsigned DstReg, unsigned SubIdx); + void RemoveDeadImpDef(unsigned Reg, LiveInterval &LI); + /// RemoveUnnecessaryKills - Remove kill markers that are no longer accurate /// due to live range lengthening as the result of coalescing. void RemoveUnnecessaryKills(unsigned Reg, LiveInterval &LI); |