LLVM 20.0.0git
|
SplitAnalysis - Analyze a LiveInterval, looking for live range splitting opportunities. More...
#include "CodeGen/SplitKit.h"
Classes | |
struct | BlockInfo |
Additional information about basic blocks where the current variable is live. More... | |
Public Types | |
using | BlockPtrSet = SmallPtrSet< const MachineBasicBlock *, 16 > |
Public Member Functions | |
SplitAnalysis (const VirtRegMap &vrm, const LiveIntervals &lis, const MachineLoopInfo &mli) | |
void | analyze (const LiveInterval *li) |
analyze - set CurLI to the specified interval, and analyze how it may be split. | |
void | clear () |
clear - clear all data structures so SplitAnalysis is ready to analyze a new interval. | |
const LiveInterval & | getParent () const |
getParent - Return the last analyzed interval. | |
bool | isOriginalEndpoint (SlotIndex Idx) const |
isOriginalEndpoint - Return true if the original live range was killed or (re-)defined at Idx. | |
ArrayRef< SlotIndex > | getUseSlots () const |
getUseSlots - Return an array of SlotIndexes of instructions using CurLI. | |
ArrayRef< BlockInfo > | getUseBlocks () const |
getUseBlocks - Return an array of BlockInfo objects for the basic blocks where CurLI has uses. | |
unsigned | getNumThroughBlocks () const |
getNumThroughBlocks - Return the number of through blocks. | |
bool | isThroughBlock (unsigned MBB) const |
isThroughBlock - Return true if CurLI is live through MBB without uses. | |
const BitVector & | getThroughBlocks () const |
getThroughBlocks - Return the set of through blocks. | |
unsigned | getNumLiveBlocks () const |
getNumLiveBlocks - Return the number of blocks where CurLI is live. | |
bool | looksLikeLoopIV () const |
unsigned | countLiveBlocks (const LiveInterval *li) const |
countLiveBlocks - Return the number of blocks where li is live. | |
bool | shouldSplitSingleBlock (const BlockInfo &BI, bool SingleInstrs) const |
shouldSplitSingleBlock - Returns true if it would help to create a local live range for the instructions in BI. | |
SlotIndex | getLastSplitPoint (unsigned Num) |
SlotIndex | getLastSplitPoint (MachineBasicBlock *BB) |
MachineBasicBlock::iterator | getLastSplitPointIter (MachineBasicBlock *BB) |
SlotIndex | getFirstSplitPoint (unsigned Num) |
Public Attributes | |
const MachineFunction & | MF |
const VirtRegMap & | VRM |
const LiveIntervals & | LIS |
const MachineLoopInfo & | Loops |
const TargetInstrInfo & | TII |
SplitAnalysis - Analyze a LiveInterval, looking for live range splitting opportunities.
Definition at line 96 of file SplitKit.h.
using llvm::SplitAnalysis::BlockPtrSet = SmallPtrSet<const MachineBasicBlock *, 16> |
Definition at line 223 of file SplitKit.h.
SplitAnalysis::SplitAnalysis | ( | const VirtRegMap & | vrm, |
const LiveIntervals & | lis, | ||
const MachineLoopInfo & | mli | ||
) |
Definition at line 155 of file SplitKit.cpp.
void SplitAnalysis::analyze | ( | const LiveInterval * | li | ) |
analyze - set CurLI to the specified interval, and analyze how it may be split.
Definition at line 348 of file SplitKit.cpp.
References clear().
void SplitAnalysis::clear | ( | ) |
clear - clear all data structures so SplitAnalysis is ready to analyze a new interval.
Definition at line 160 of file SplitKit.cpp.
References llvm::BitVector::clear().
Referenced by analyze().
unsigned SplitAnalysis::countLiveBlocks | ( | const LiveInterval * | li | ) | const |
countLiveBlocks - Return the number of blocks where li is live.
This is guaranteed to return the same number as getNumLiveBlocks() after calling analyze(li).
Definition at line 310 of file SplitKit.cpp.
References llvm::LiveRange::advanceTo(), llvm::LiveRange::begin(), llvm::LiveRange::empty(), llvm::LiveRange::end(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::LiveIntervals::getMBBEndIdx(), llvm::LiveIntervals::getMBBFromIndex(), and LIS.
Definition at line 247 of file SplitKit.h.
References llvm::MachineFunction::getBlockNumbered(), and llvm::InsertPointAnalysis::getFirstInsertPoint().
|
inline |
Definition at line 239 of file SplitKit.h.
References llvm::InsertPointAnalysis::getLastInsertPoint().
Definition at line 235 of file SplitKit.h.
References llvm::MachineFunction::getBlockNumbered(), and llvm::InsertPointAnalysis::getLastInsertPoint().
Referenced by llvm::SplitEditor::enterIntvAtEnd(), llvm::SplitEditor::splitLiveThroughBlock(), llvm::SplitEditor::splitRegInBlock(), llvm::SplitEditor::splitRegOutBlock(), and llvm::SplitEditor::splitSingleBlock().
|
inline |
Definition at line 243 of file SplitKit.h.
References llvm::InsertPointAnalysis::getLastInsertPointIter().
Referenced by llvm::SplitEditor::enterIntvAtEnd().
|
inline |
getNumLiveBlocks - Return the number of blocks where CurLI is live.
Definition at line 212 of file SplitKit.h.
|
inline |
getNumThroughBlocks - Return the number of through blocks.
Definition at line 203 of file SplitKit.h.
|
inline |
getParent - Return the last analyzed interval.
Definition at line 185 of file SplitKit.h.
getThroughBlocks - Return the set of through blocks.
Definition at line 209 of file SplitKit.h.
getUseBlocks - Return an array of BlockInfo objects for the basic blocks where CurLI has uses.
Definition at line 200 of file SplitKit.h.
getUseSlots - Return an array of SlotIndexes of instructions using CurLI.
This include both use and def operands, at most one entry per instruction.
Definition at line 196 of file SplitKit.h.
isOriginalEndpoint - Return true if the original live range was killed or (re-)defined at Idx.
Idx should be the 'def' slot for a normal kill/def, and 'use' for an early-clobber def. This can be used to recognize code inserted by earlier live range splitting.
Definition at line 334 of file SplitKit.cpp.
References assert(), llvm::LiveRange::begin(), llvm::LiveRange::empty(), llvm::LiveRange::end(), llvm::LiveRange::find(), llvm::LiveIntervals::getInterval(), llvm::VirtRegMap::getOriginal(), I, Idx, LIS, llvm::LiveInterval::reg(), and VRM.
Referenced by shouldSplitSingleBlock().
isThroughBlock - Return true if CurLI is live through MBB without uses.
Definition at line 206 of file SplitKit.h.
References MBB, and llvm::BitVector::test().
|
inline |
Definition at line 216 of file SplitKit.h.
shouldSplitSingleBlock - Returns true if it would help to create a local live range for the instructions in BI.
There is normally no benefit to creating a live range for a single instruction, but it does enable register class inflation if the instruction has a restricted register class.
BI | The block to be isolated. |
SingleInstrs | True when single instructions should be isolated. |
Definition at line 1588 of file SplitKit.cpp.
References llvm::SplitAnalysis::BlockInfo::FirstInstr, llvm::LiveIntervals::getInstructionFromIndex(), llvm::TargetInstrInfo::isCopyInstr(), llvm::SplitAnalysis::BlockInfo::isOneInstr(), isOriginalEndpoint(), LIS, llvm::SplitAnalysis::BlockInfo::LiveIn, llvm::SplitAnalysis::BlockInfo::LiveOut, MI, and TII.
const LiveIntervals& llvm::SplitAnalysis::LIS |
Definition at line 100 of file SplitKit.h.
Referenced by countLiveBlocks(), isOriginalEndpoint(), and shouldSplitSingleBlock().
const MachineLoopInfo& llvm::SplitAnalysis::Loops |
Definition at line 101 of file SplitKit.h.
const MachineFunction& llvm::SplitAnalysis::MF |
Definition at line 98 of file SplitKit.h.
const TargetInstrInfo& llvm::SplitAnalysis::TII |
Definition at line 102 of file SplitKit.h.
Referenced by shouldSplitSingleBlock().
const VirtRegMap& llvm::SplitAnalysis::VRM |
Definition at line 99 of file SplitKit.h.
Referenced by isOriginalEndpoint().