LLVM 20.0.0git
Macros | Functions | Variables
SplitKit.cpp File Reference
#include "SplitKit.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/CodeGen/LiveRangeEdit.h"
#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
#include "llvm/CodeGen/MachineDominators.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.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/IR/DebugLoc.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/BlockFrequency.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <iterator>
#include <limits>
#include <tuple>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "regalloc"
 

Functions

 STATISTIC (NumFinished, "Number of splits finished")
 
 STATISTIC (NumSimple, "Number of splits that were simple")
 
 STATISTIC (NumCopies, "Number of copies inserted for splitting")
 
 STATISTIC (NumRemats, "Number of rematerialized defs for splitting")
 
template<typename T >
auto & getSubrangeImpl (LaneBitmask LM, T &LI)
 Find a subrange corresponding to the exact lane mask LM in the live interval LI.
 
LiveInterval::SubRangegetSubRangeForMaskExact (LaneBitmask LM, LiveInterval &LI)
 
const LiveInterval::SubRangegetSubRangeForMaskExact (LaneBitmask LM, const LiveInterval &LI)
 
const LiveInterval::SubRangegetSubRangeForMask (LaneBitmask LM, const LiveInterval &LI)
 Find a subrange corresponding to the lane mask LM, or a superset of it, in the live interval LI.
 
static bool hasTiedUseOf (MachineInstr &MI, unsigned Reg)
 
static bool removeDeadSegment (SlotIndex Def, LiveRange &LR)
 

Variables

static cl::opt< boolEnableLoopIVHeuristic ("enable-split-loopiv-heuristic", cl::desc("Enable loop iv regalloc heuristic"), cl::init(true))
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "regalloc"

Definition at line 45 of file SplitKit.cpp.

Function Documentation

◆ getSubRangeForMask()

const LiveInterval::SubRange & getSubRangeForMask ( LaneBitmask  LM,
const LiveInterval LI 
)

Find a subrange corresponding to the lane mask LM, or a superset of it, in the live interval LI.

The interval LI is assumed to contain such a subrange. This function is used to find corresponding subranges between the original interval and the new intervals.

Definition at line 421 of file SplitKit.cpp.

References llvm_unreachable, and llvm::LiveInterval::subranges().

◆ getSubRangeForMaskExact() [1/2]

const LiveInterval::SubRange & getSubRangeForMaskExact ( LaneBitmask  LM,
const LiveInterval LI 
)

Definition at line 412 of file SplitKit.cpp.

References getSubrangeImpl().

◆ getSubRangeForMaskExact() [2/2]

LiveInterval::SubRange & getSubRangeForMaskExact ( LaneBitmask  LM,
LiveInterval LI 
)

Definition at line 407 of file SplitKit.cpp.

References getSubrangeImpl().

◆ getSubrangeImpl()

template<typename T >
auto & getSubrangeImpl ( LaneBitmask  LM,
T LI 
)

Find a subrange corresponding to the exact lane mask LM in the live interval LI.

The interval LI is assumed to contain such a subrange. This function is used to find corresponding subranges between the original interval and the new intervals.

Definition at line 400 of file SplitKit.cpp.

References llvm_unreachable.

Referenced by getSubRangeForMaskExact().

◆ hasTiedUseOf()

static bool hasTiedUseOf ( MachineInstr MI,
unsigned  Reg 
)
static

Definition at line 817 of file SplitKit.cpp.

References llvm::any_of(), and MI.

Referenced by llvm::SplitEditor::overlapIntv().

◆ removeDeadSegment()

static bool removeDeadSegment ( SlotIndex  Def,
LiveRange LR 
)
static

◆ STATISTIC() [1/4]

STATISTIC ( NumCopies  ,
"Number of copies inserted for splitting"   
)

◆ STATISTIC() [2/4]

STATISTIC ( NumFinished  ,
"Number of splits finished"   
)

◆ STATISTIC() [3/4]

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

◆ STATISTIC() [4/4]

STATISTIC ( NumSimple  ,
"Number of splits that were simple"   
)

Variable Documentation

◆ EnableLoopIVHeuristic

cl::opt< bool > EnableLoopIVHeuristic("enable-split-loopiv-heuristic", cl::desc("Enable loop iv regalloc heuristic"), cl::init(true)) ( "enable-split-loopiv-heuristic"  ,
cl::desc("Enable loop iv regalloc heuristic")  ,
cl::init(true  
)
static