From 8a88563a32d63b74f486ae6887e0f25365800b51 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 7 May 2003 20:07:58 +0000 Subject: [PATCH] Add comments, add a vector to keep track of which registers are allocatable git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6014 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/LiveVariables.h | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/include/llvm/CodeGen/LiveVariables.h b/include/llvm/CodeGen/LiveVariables.h index ac4a2220783..1da673afc06 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 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 AllocatablePhysicalRegisters; private: // Intermediate data structures /// BBMap - Maps LLVM basic blocks to their corresponding machine basic block.