LLVM API Documentation

VirtRegMap.cpp File Reference

#include "VirtRegMap.h"
#include "llvm/Function.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Compiler.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallSet.h"
#include <algorithm>

Include dependency graph for VirtRegMap.cpp:

Go to the source code of this file.

Defines

#define DEBUG_TYPE   "spiller"

Enumerations

enum  SpillerName { simple, local }

Functions

 STATISTIC (NumSpills,"Number of register spills")
 STATISTIC (NumPSpills,"Number of physical register spills")
 STATISTIC (NumReMats,"Number of re-materialization")
 STATISTIC (NumDRM,"Number of re-materializable defs elided")
 STATISTIC (NumStores,"Number of stores added")
 STATISTIC (NumLoads,"Number of loads added")
 STATISTIC (NumReused,"Number of values reused")
 STATISTIC (NumDSE,"Number of dead stores elided")
 STATISTIC (NumDCE,"Number of copies elided")
 STATISTIC (NumDSS,"Number of dead spill slots removed")
 STATISTIC (NumCommutes,"Number of instructions commuted")
static void InvalidateKills (MachineInstr &MI, BitVector &RegKills, std::vector< MachineOperand * > &KillOps, SmallVector< unsigned, 2 > *KillRegs=NULL)
static void InvalidateKill (unsigned Reg, BitVector &RegKills, std::vector< MachineOperand * > &KillOps)
static bool InvalidateRegDef (MachineBasicBlock::iterator I, MachineInstr &NewDef, unsigned Reg, bool &HasLiveDef)
static void UpdateKills (MachineInstr &MI, BitVector &RegKills, std::vector< MachineOperand * > &KillOps, const TargetRegisterInfo *TRI)
static void ReMaterialize (MachineBasicBlock &MBB, MachineBasicBlock::iterator &MII, unsigned DestReg, unsigned Reg, const TargetInstrInfo *TII, const TargetRegisterInfo *TRI, VirtRegMap &VRM)
static unsigned findSuperReg (const TargetRegisterClass *RC, unsigned SubReg, unsigned SubIdx, const TargetRegisterInfo *TRI)
llvm::Spillerllvm::createSpiller ()

Variables

static cl::opt< SpillerNameSpillerOpt ("spiller", cl::desc("Spiller to use: (default: local)"), cl::Prefix, cl::values(clEnumVal(simple,"simple spiller"), clEnumVal(local,"local spiller"), clEnumValEnd), cl::init(local))


Define Documentation

#define DEBUG_TYPE   "spiller"

Definition at line 19 of file VirtRegMap.cpp.


Enumeration Type Documentation

Enumerator:
simple 
local 

Definition at line 52 of file VirtRegMap.cpp.


Function Documentation

static unsigned findSuperReg ( const TargetRegisterClass RC,
unsigned  SubReg,
unsigned  SubIdx,
const TargetRegisterInfo TRI 
) [static]

findSuperReg - Find the SubReg's super-register of given register class where its SubIdx sub-register is SubReg.

Definition at line 1088 of file VirtRegMap.cpp.

References llvm::TargetRegisterClass::begin(), E, llvm::TargetRegisterClass::end(), and llvm::TargetRegisterInfo::getSubReg().

static void InvalidateKill ( unsigned  Reg,
BitVector RegKills,
std::vector< MachineOperand * > &  KillOps 
) [static]

InvalidateKill - A MI that defines the specified register is being deleted, invalidate the register kill information.

Definition at line 580 of file VirtRegMap.cpp.

References llvm::BitVector::reset().

static void InvalidateKills ( MachineInstr MI,
BitVector RegKills,
std::vector< MachineOperand * > &  KillOps,
SmallVector< unsigned, 2 > *  KillRegs = NULL 
) [static]

InvalidateKills - MI is going to be deleted. If any of its operands are marked kill, then invalidate the information.

Definition at line 558 of file VirtRegMap.cpp.

References llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isKill(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isUse(), and llvm::BitVector::reset().

static bool InvalidateRegDef ( MachineBasicBlock::iterator  I,
MachineInstr NewDef,
unsigned  Reg,
bool &  HasLiveDef 
) [static]

InvalidateRegDef - If the def operand of the specified def MI is now dead (since it's spill instruction is removed), mark it isDead. Also checks if the def MI has other definition operands that are not dead. Returns it by reference.

Definition at line 593 of file VirtRegMap.cpp.

References E, llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isDead(), llvm::MachineOperand::isDef(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isUse(), and llvm::MachineOperand::setIsDead().

static void ReMaterialize ( MachineBasicBlock MBB,
MachineBasicBlock::iterator &  MII,
unsigned  DestReg,
unsigned  Reg,
const TargetInstrInfo TII,
const TargetRegisterInfo TRI,
VirtRegMap VRM 
) [static]

STATISTIC ( NumCommutes  ,
"Number of instructions commuted"   
)

STATISTIC ( NumDSS  ,
"Number of dead spill slots removed"   
)

STATISTIC ( NumDCE  ,
"Number of copies elided"   
)

STATISTIC ( NumDSE  ,
"Number of dead stores elided"   
)

STATISTIC ( NumReused  ,
"Number of values reused"   
)

STATISTIC ( NumLoads  ,
"Number of loads added"   
)

STATISTIC ( NumStores  ,
"Number of stores added"   
)

STATISTIC ( NumDRM  ,
"Number of re-materializable defs elided"   
)

STATISTIC ( NumReMats  ,
"Number of re-materialization"   
)

STATISTIC ( NumPSpills  ,
"Number of physical register spills"   
)

STATISTIC ( NumSpills  ,
"Number of register spills"   
)

static void UpdateKills ( MachineInstr MI,
BitVector RegKills,
std::vector< MachineOperand * > &  KillOps,
const TargetRegisterInfo TRI 
) [static]


Variable Documentation

Definition at line 723 of file VirtRegMap.cpp.

Definition at line 322 of file VirtRegMap.cpp.

Definition at line 737 of file VirtRegMap.cpp.

Definition at line 720 of file VirtRegMap.cpp.

std::multimap<unsigned, int> PhysRegsAvailable

Definition at line 409 of file VirtRegMap.cpp.

Definition at line 739 of file VirtRegMap.cpp.

Definition at line 319 of file VirtRegMap.cpp.

std::vector<ReusedOp> Reuses

Definition at line 738 of file VirtRegMap.cpp.

cl::opt<SpillerName> SpillerOpt("spiller", cl::desc("Spiller to use: (default: local)"), cl::Prefix, cl::values(clEnumVal(simple,"simple spiller"),clEnumVal(local,"local spiller"),clEnumValEnd), cl::init(local)) [static]

Referenced by llvm::createSpiller().

Definition at line 403 of file VirtRegMap.cpp.

Definition at line 717 of file VirtRegMap.cpp.

Definition at line 321 of file VirtRegMap.cpp.

Definition at line 320 of file VirtRegMap.cpp.

Definition at line 726 of file VirtRegMap.cpp.




This web site is hosted by the Computer Science Department at the University of Illinois at Urbana-Champaign.