aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2007-04-26 01:40:09 +0000
committerEvan Cheng <evan.cheng@apple.com>2007-04-26 01:40:09 +0000
commit05350288a6bc22a294ff7625f244731ef7125f8a (patch)
tree1e5524dcb83c3968eaf4b4e358b88d7a90e970c5 /include
parent37a21457bf89515e221d6bbb69f0dd3de854536e (diff)
downloadexternal_llvm-05350288a6bc22a294ff7625f244731ef7125f8a.zip
external_llvm-05350288a6bc22a294ff7625f244731ef7125f8a.tar.gz
external_llvm-05350288a6bc22a294ff7625f244731ef7125f8a.tar.bz2
Be careful when to add implicit kill / dead operands. Don't add them during / post reg-allocation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36458 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/CodeGen/LiveVariables.h36
1 files changed, 22 insertions, 14 deletions
diff --git a/include/llvm/CodeGen/LiveVariables.h b/include/llvm/CodeGen/LiveVariables.h
index 5b42a71..ebbe610 100644
--- a/include/llvm/CodeGen/LiveVariables.h
+++ b/include/llvm/CodeGen/LiveVariables.h
@@ -147,12 +147,18 @@ private: // Intermediate data structures
SmallVector<unsigned, 4> *PHIVarInfo;
/// addRegisterKilled - We have determined MI kills a register. Look for the
- /// operand that uses it and mark it as IsKill.
- void addRegisterKilled(unsigned IncomingReg, MachineInstr *MI);
+ /// operand that uses it and mark it as IsKill. If AddIfNotFound is true,
+ /// add a implicit operand if it's not found. Returns true if the operand
+ /// exists / is added.
+ bool addRegisterKilled(unsigned IncomingReg, MachineInstr *MI,
+ bool AddIfNotFound = false);
/// addRegisterDead - We have determined MI defined a register without a use.
- /// Look for the operand that defines it and mark it as IsDead.
- void addRegisterDead(unsigned IncomingReg, MachineInstr *MI);
+ /// Look for the operand that defines it and mark it as IsDead. If
+ /// AddIfNotFound is true, add a implicit operand if it's not found. Returns
+ /// true if the operand exists / is added.
+ bool addRegisterDead(unsigned IncomingReg, MachineInstr *MI,
+ bool AddIfNotFound = false);
void HandlePhysRegUse(unsigned Reg, MachineInstr *MI);
void HandlePhysRegDef(unsigned Reg, MachineInstr *MI);
@@ -189,11 +195,12 @@ public:
/// addVirtualRegisterKilled - Add information about the fact that the
/// specified register is killed after being used by the specified
- /// instruction.
- ///
- void addVirtualRegisterKilled(unsigned IncomingReg, MachineInstr *MI) {
- addRegisterKilled(IncomingReg, MI);
- getVarInfo(IncomingReg).Kills.push_back(MI);
+ /// instruction. If AddIfNotFound is true, add a implicit operand if it's
+ /// not found.
+ void addVirtualRegisterKilled(unsigned IncomingReg, MachineInstr *MI,
+ bool AddIfNotFound = false) {
+ if (addRegisterKilled(IncomingReg, MI, AddIfNotFound))
+ getVarInfo(IncomingReg).Kills.push_back(MI);
}
/// removeVirtualRegisterKilled - Remove the specified virtual
@@ -225,11 +232,12 @@ public:
void removeVirtualRegistersKilled(MachineInstr *MI);
/// addVirtualRegisterDead - Add information about the fact that the specified
- /// register is dead after being used by the specified instruction.
- ///
- void addVirtualRegisterDead(unsigned IncomingReg, MachineInstr *MI) {
- addRegisterDead(IncomingReg, MI);
- getVarInfo(IncomingReg).Kills.push_back(MI);
+ /// register is dead after being used by the specified instruction. If
+ /// AddIfNotFound is true, add a implicit operand if it's not found.
+ void addVirtualRegisterDead(unsigned IncomingReg, MachineInstr *MI,
+ bool AddIfNotFound = false) {
+ if (addRegisterDead(IncomingReg, MI, AddIfNotFound))
+ getVarInfo(IncomingReg).Kills.push_back(MI);
}
/// removeVirtualRegisterDead - Remove the specified virtual