LLVM  14.0.0git
Macros | Functions | Variables
InlineSpiller.cpp File Reference
#include "SplitKit.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/None.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/CodeGen/LiveInterval.h"
#include "llvm/CodeGen/LiveIntervalCalc.h"
#include "llvm/CodeGen/LiveIntervals.h"
#include "llvm/CodeGen/LiveRangeEdit.h"
#include "llvm/CodeGen/LiveStacks.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
#include "llvm/CodeGen/MachineDominators.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineInstrBundle.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/SlotIndexes.h"
#include "llvm/CodeGen/Spiller.h"
#include "llvm/CodeGen/StackMaps.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/CodeGen/TargetOpcodes.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/CodeGen/VirtRegMap.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/Support/BlockFrequency.h"
#include "llvm/Support/BranchProbability.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <iterator>
#include <tuple>
#include <utility>
#include <vector>
Include dependency graph for InlineSpiller.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "regalloc"
 

Functions

 STATISTIC (NumSpilledRanges, "Number of spilled live ranges")
 
 STATISTIC (NumSnippets, "Number of spilled snippets")
 
 STATISTIC (NumSpills, "Number of spills inserted")
 
 STATISTIC (NumSpillsRemoved, "Number of spills removed")
 
 STATISTIC (NumReloads, "Number of reloads inserted")
 
 STATISTIC (NumReloadsRemoved, "Number of reloads removed")
 
 STATISTIC (NumFolded, "Number of folded stack accesses")
 
 STATISTIC (NumFoldedLoads, "Number of folded loads")
 
 STATISTIC (NumRemats, "Number of rematerialized defs for spilling")
 
static Register isFullCopyOf (const MachineInstr &MI, Register Reg)
 isFullCopyOf - If MI is a COPY to or from Reg, return the other register, otherwise return 0. More...
 
static void getVDefInterval (const MachineInstr &MI, LiveIntervals &LIS)
 
static LLVM_DUMP_METHOD void dumpMachineInstrRangeWithSlotIndex (MachineBasicBlock::iterator B, MachineBasicBlock::iterator E, LiveIntervals const &LIS, const char *const header, Register VReg=Register())
 
static bool isRealSpill (const MachineInstr &Def)
 Check if Def fully defines a VReg with an undefined value. More...
 

Variables

static cl::opt< bool > DisableHoisting ("disable-spill-hoist", cl::Hidden, cl::desc("Disable inline spill hoisting"))
 
static cl::opt< bool > RestrictStatepointRemat ("restrict-statepoint-remat", cl::init(false), cl::Hidden, cl::desc("Restrict remat for statepoint operands"))
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "regalloc"

Definition at line 65 of file InlineSpiller.cpp.

Function Documentation

◆ dumpMachineInstrRangeWithSlotIndex()

static LLVM_DUMP_METHOD void dumpMachineInstrRangeWithSlotIndex ( MachineBasicBlock::iterator  B,
MachineBasicBlock::iterator  E,
LiveIntervals const LIS,
const char *const  header,
Register  VReg = Register() 
)
static

◆ getVDefInterval()

static void getVDefInterval ( const MachineInstr MI,
LiveIntervals LIS 
)
static

◆ isFullCopyOf()

static Register isFullCopyOf ( const MachineInstr MI,
Register  Reg 
)
static

isFullCopyOf - If MI is a COPY to or from Reg, return the other register, otherwise return 0.

Definition at line 266 of file InlineSpiller.cpp.

References MI, and Reg.

◆ isRealSpill()

static bool isRealSpill ( const MachineInstr Def)
static

Check if Def fully defines a VReg with an undefined value.

If that's the case, that means the value of VReg is actually not relevant.

Definition at line 1019 of file InlineSpiller.cpp.

References assert(), and llvm::tgtok::Def.

◆ STATISTIC() [1/9]

STATISTIC ( NumFolded  ,
"Number of folded stack accesses"   
)

◆ STATISTIC() [2/9]

STATISTIC ( NumFoldedLoads  ,
"Number of folded loads"   
)

◆ STATISTIC() [3/9]

STATISTIC ( NumReloads  ,
"Number of reloads inserted"   
)

◆ STATISTIC() [4/9]

STATISTIC ( NumReloadsRemoved  ,
"Number of reloads removed  
)

◆ STATISTIC() [5/9]

STATISTIC ( NumRemats  ,
"Number of rematerialized defs for spilling"   
)

◆ STATISTIC() [6/9]

STATISTIC ( NumSnippets  ,
"Number of spilled snippets"   
)

◆ STATISTIC() [7/9]

STATISTIC ( NumSpilledRanges  ,
"Number of spilled live ranges"   
)

◆ STATISTIC() [8/9]

STATISTIC ( NumSpills  ,
"Number of spills inserted"   
)

◆ STATISTIC() [9/9]

STATISTIC ( NumSpillsRemoved  ,
"Number of spills removed  
)

Variable Documentation

◆ DisableHoisting

cl::opt<bool> DisableHoisting("disable-spill-hoist", cl::Hidden, cl::desc("Disable inline spill hoisting"))
static

◆ RestrictStatepointRemat

cl::opt<bool> RestrictStatepointRemat("restrict-statepoint-remat", cl::init(false), cl::Hidden, cl::desc("Restrict remat for statepoint operands"))
static