|
LLVM 24.0.0git
|
#include "InlineSpiller.h"#include "AllocationOrder.h"#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/CodeGen/LiveInterval.h"#include "llvm/CodeGen/LiveIntervals.h"#include "llvm/CodeGen/LiveRangeEdit.h"#include "llvm/CodeGen/LiveRegMatrix.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/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, Register Reg) |
Check if Def defines Reg 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 62 of file InlineSpiller.cpp.
|
static |
Definition at line 966 of file InlineSpiller.cpp.
References B(), llvm::dbgs(), E(), llvm::LiveIntervals::getInstructionIndex(), llvm::SlotIndex::getRegSlot(), I, and llvm::MachineOperand::isEarlyClobber().
|
static |
Definition at line 317 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 262 of file InlineSpiller.cpp.
References llvm::DstOp::getReg(), llvm::SrcOp::getReg(), MI, Reg, Register, and TII.
Referenced by isCopyOfBundle().
|
static |
Check for a copy bundle as formed by SplitKit.
Definition at line 281 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, Reg, Register, and TII.
|
static |
Check if Def defines Reg with an undefined value.
If that's the case, that means the value of Reg is actually not relevant.
Definition at line 1264 of file InlineSpiller.cpp.
References llvm::any_of(), and Reg.
| 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" | ) |
|
static |
Referenced by llvm::canGuaranteeAssignmentAfterRemat().