aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/CodeGen/LiveVariables.h24
1 files changed, 19 insertions, 5 deletions
diff --git a/include/llvm/CodeGen/LiveVariables.h b/include/llvm/CodeGen/LiveVariables.h
index ac4a222078..1da673afc0 100644
--- a/include/llvm/CodeGen/LiveVariables.h
+++ b/include/llvm/CodeGen/LiveVariables.h
@@ -1,12 +1,21 @@
//===-- llvm/CodeGen/LiveVariables.h - Live Variable Analysis ---*- C++ -*-===//
//
+// This file implements the LiveVariable analysis pass. For each machine
+// instruction in the function, this pass calculates the set of registers that
+// are immediately dead after the instruction (i.e., the instruction calculates
+// the value, but it is never used) and the set of registers that are used by
+// the instruction, but are never used after the instruction (i.e., they are
+// killed).
+//
// This class computes live variables using are sparse implementation based on
// the machine code SSA form. This class computes live variable information for
-// each virtual and physical register in a function. It uses the dominance
-// properties of SSA form to efficiently compute live variables for virtual
-// registers, and assumes that physical registers are only live within a single
-// basic block (allowing it to do a single local analysis to resolve physical
-// register lifetimes in each basic block).
+// each virtual and _register allocatable_ physical register in a function. It
+// uses the dominance properties of SSA form to efficiently compute live
+// variables for virtual registers, and assumes that physical registers are only
+// live within a single basic block (allowing it to do a single local analysis
+// to resolve physical register lifetimes in each basic block). If a physical
+// register is not register allocatable, it is not tracked. This is useful for
+// things like the stack pointer and condition codes.
//
//===----------------------------------------------------------------------===//
@@ -58,6 +67,11 @@ class LiveVariables : public MachineFunctionPass {
///
std::multimap<MachineInstr*, unsigned> RegistersDead;
+ /// AllocatablePhysicalRegisters - This vector keeps track of which registers
+ /// are actually register allocatable by the target machine. We can not track
+ /// liveness for values that are not in this set.
+ ///
+ std::vector<bool> AllocatablePhysicalRegisters;
private: // Intermediate data structures
/// BBMap - Maps LLVM basic blocks to their corresponding machine basic block.