aboutsummaryrefslogtreecommitdiffstats
path: root/lib/CodeGen/SimpleRegisterCoalescing.h
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2008-04-09 20:57:25 +0000
committerEvan Cheng <evan.cheng@apple.com>2008-04-09 20:57:25 +0000
commit909ab8b41a1f6072d24af951b70511d8a586d8ac (patch)
tree0c9ef7c93ae3eb5aac992a8dc7624009c360ab2a /lib/CodeGen/SimpleRegisterCoalescing.h
parent48d5f061f8ad9267cdd6bed7a98f7d09a58c0a6e (diff)
downloadexternal_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.h22
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);