LLVM 19.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/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/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/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>

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 isCopyOf (const MachineInstr &MI, Register Reg, const TargetInstrInfo &TII)
 isFullCopyOf - If MI is a COPY to or from Reg, return the other register, otherwise return 0.
 
static Register isCopyOfBundle (const MachineInstr &FirstMI, Register Reg, const TargetInstrInfo &TII)
 Check for a copy bundle as formed by SplitKit.
 
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.
 

Variables

static cl::opt< boolDisableHoisting ("disable-spill-hoist", cl::Hidden, cl::desc("Disable inline spill hoisting"))
 
static cl::opt< boolRestrictStatepointRemat ("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 61 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

Definition at line 310 of file InlineSpiller.cpp.

References llvm::LiveIntervals::getInterval(), and MI.

◆ isCopyOf()

static Register isCopyOf ( const MachineInstr MI,
Register  Reg,
const TargetInstrInfo TII 
)
static

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

Definition at line 255 of file InlineSpiller.cpp.

References llvm::DstOp::getReg(), llvm::SrcOp::getReg(), MI, and TII.

Referenced by isCopyOfBundle().

◆ isCopyOfBundle()

static Register isCopyOfBundle ( const MachineInstr FirstMI,
Register  Reg,
const TargetInstrInfo TII 
)
static

◆ 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 1094 of file InlineSpiller.cpp.

◆ 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")) ( "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")) ( "restrict-statepoint-remat"  ,
cl::init(false)  ,
cl::Hidden  ,
cl::desc("Restrict remat for statepoint operands")   
)
static