LLVM 20.0.0git
|
#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< bool > | RestrictStatepointRemat ("restrict-statepoint-remat", cl::init(false), cl::Hidden, cl::desc("Restrict remat for statepoint operands")) |
#define DEBUG_TYPE "regalloc" |
Definition at line 61 of file InlineSpiller.cpp.
|
static |
Definition at line 850 of file InlineSpiller.cpp.
References B, llvm::dbgs(), llvm::LiveIntervals::getInstructionIndex(), llvm::SlotIndex::getRegSlot(), I, Idx, and llvm::MachineOperand::isEarlyClobber().
|
static |
Definition at line 310 of file InlineSpiller.cpp.
References llvm::LiveIntervals::getInterval(), and MI.
|
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().
|
static |
Check for a copy bundle as formed by SplitKit.
Definition at line 274 of file InlineSpiller.cpp.
References assert(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::DstOp::getReg(), llvm::SrcOp::getReg(), I, llvm::MachineInstr::isBundled(), llvm::MachineInstr::isBundledWithPred(), llvm::MachineInstr::isBundledWithSucc(), isCopyOf(), MI, and TII.
|
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 | ( | NumFolded | , |
"Number of folded stack accesses" | |||
) |
STATISTIC | ( | NumFoldedLoads | , |
"Number of folded loads" | |||
) |
STATISTIC | ( | NumReloads | , |
"Number of reloads inserted" | |||
) |
STATISTIC | ( | NumReloadsRemoved | , |
"Number of reloads removed" | |||
) |
STATISTIC | ( | NumRemats | , |
"Number of rematerialized defs for spilling" | |||
) |
STATISTIC | ( | NumSnippets | , |
"Number of spilled snippets" | |||
) |
STATISTIC | ( | NumSpilledRanges | , |
"Number of spilled live ranges" | |||
) |
STATISTIC | ( | NumSpills | , |
"Number of spills inserted" | |||
) |
STATISTIC | ( | NumSpillsRemoved | , |
"Number of spills removed" | |||
) |