LLVM 20.0.0git
|
#include "llvm/CodeGen/ModuloSchedule.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Analysis/MemoryLocation.h"
#include "llvm/CodeGen/LiveIntervals.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/InitializePasses.h"
#include "llvm/MC/MCContext.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "pipeliner" |
Functions | |
static void | getPhiRegs (MachineInstr &Phi, MachineBasicBlock *Loop, unsigned &InitVal, unsigned &LoopVal) |
Return the register values for the operands of a Phi instruction. | |
static unsigned | getInitPhiReg (MachineInstr &Phi, MachineBasicBlock *LoopBB) |
Return the Phi register value that comes from the incoming block. | |
static unsigned | getLoopPhiReg (MachineInstr &Phi, MachineBasicBlock *LoopBB) |
Return the Phi register value that comes the loop block. | |
static void | replaceRegUsesAfterLoop (unsigned FromReg, unsigned ToReg, MachineBasicBlock *MBB, MachineRegisterInfo &MRI, LiveIntervals &LIS) |
Replace all uses of FromReg that appear outside the specified basic block with ToReg. | |
static bool | hasUseAfterLoop (unsigned Reg, MachineBasicBlock *BB, MachineRegisterInfo &MRI) |
Return true if the register has a use that occurs outside the specified loop. | |
static void | removePhis (MachineBasicBlock *BB, MachineBasicBlock *Incoming) |
Remove the incoming block from the Phis in a basic block. | |
static MachineBasicBlock * | createDedicatedExit (MachineBasicBlock *Loop, MachineBasicBlock *Exit) |
Create a dedicated exit for Loop. | |
static MachineInstr * | getLoopPhiUser (Register Reg, MachineBasicBlock *Loop) |
Return a phi if Reg is referenced by the phi. | |
static void | replacePhiSrc (MachineInstr &Phi, Register OrigReg, Register NewReg, MachineBasicBlock *NewMBB) |
INITIALIZE_PASS_BEGIN (ModuloScheduleTest, "modulo-schedule-test", "Modulo Schedule test pass", false, false) INITIALIZE_PASS_END(ModuloScheduleTest | |
static void | parseSymbolString (StringRef S, int &Cycle, int &Stage) |
Variables | |
static cl::opt< bool > | SwapBranchTargetsMVE ("pipeliner-swap-branch-targets-mve", cl::Hidden, cl::init(false), cl::desc("Swap target blocks of a conditional branch for MVE expander")) |
modulo schedule | test |
modulo schedule Modulo Schedule test | pass |
modulo schedule Modulo Schedule test | false |
#define DEBUG_TYPE "pipeliner" |
Definition at line 22 of file ModuloSchedule.cpp.
|
static |
Create a dedicated exit for Loop.
Exit is the original exit for Loop. If it is already dedicated exit, return it. Otherwise, insert a new block between them and return the new block.
Definition at line 2119 of file ModuloSchedule.cpp.
References llvm::MachineBasicBlock::addSuccessor(), llvm::HexagonInstrInfo::analyzeBranch(), Cond, llvm::MachineFunction::CreateMachineBasicBlock(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::MachineFunction::getSubtarget(), llvm::MachineFunction::insert(), llvm::HexagonInstrInfo::insertBranch(), llvm_unreachable, llvm::HexagonInstrInfo::removeBranch(), TBB, and TII.
|
static |
Return the Phi register value that comes from the incoming block.
Definition at line 56 of file ModuloSchedule.cpp.
|
static |
Return the Phi register value that comes the loop block.
Definition at line 64 of file ModuloSchedule.cpp.
|
static |
Return a phi if Reg is referenced by the phi.
canApply() guarantees that at most only one such phi exists.
Definition at line 2364 of file ModuloSchedule.cpp.
References getPhiRegs().
|
static |
Return the register values for the operands of a Phi instruction.
This function assume the instruction is a Phi.
Definition at line 40 of file ModuloSchedule.cpp.
References assert().
|
static |
Return true if the register has a use that occurs outside the specified loop.
Definition at line 358 of file ModuloSchedule.cpp.
References MRI.
INITIALIZE_PASS_BEGIN | ( | ModuloScheduleTest | , |
"modulo-schedule-test" | , | ||
"Modulo Schedule test pass" | , | ||
false | , | ||
false | |||
) |
|
static |
Definition at line 2794 of file ModuloSchedule.cpp.
References llvm::dbgs(), and llvm_unreachable.
|
static |
Remove the incoming block from the Phis in a basic block.
Definition at line 848 of file ModuloSchedule.cpp.
References MI.
|
static |
Definition at line 2450 of file ModuloSchedule.cpp.
References Idx.
|
static |
Replace all uses of FromReg that appear outside the specified basic block with ToReg.
Definition at line 344 of file ModuloSchedule.cpp.
References llvm::LiveIntervals::createEmptyInterval(), llvm::LiveIntervals::hasInterval(), llvm::make_early_inc_range(), MBB, and MRI.
modulo schedule Modulo Schedule test false |
Definition at line 2781 of file ModuloSchedule.cpp.
modulo schedule Modulo Schedule test pass |
Definition at line 2781 of file ModuloSchedule.cpp.
|
static |
modulo schedule test |
Definition at line 2780 of file ModuloSchedule.cpp.
Referenced by llvm::SmallBitVector::anyCommon(), llvm::GCNSubtarget::initializeSubtargetDependencies(), llvm::SmallBitVector::operator&=(), llvm::Bitset< NumBits >::operator<(), llvm::FeatureBitset::operator<(), llvm::detail::zip_longest_iterator< Iters >::operator==(), llvm::SmallBitVector::operator^=(), llvm::SmallBitVector::operator|=(), llvm::CoalescingBitVector< IndexT >::set(), llvm::SmallBitVector::test(), llvm::CoalescingBitVector< IndexT >::test_and_set(), llvm::SparseBitVectorElement< ElementSize >::test_and_set(), and llvm::SparseBitVector< ElementSize >::test_and_set().