17#define DEBUG_TYPE "aarch64-post-coalescer-pass"
32 return "AArch64 Post Coalescer pass";
42char AArch64PostCoalescer::ID = 0;
47 "AArch64 Post Coalescer Pass",
false,
false)
53 if (skipFunction(MF.getFunction()))
57 if (!FuncInfo->hasStreamingModeChanges())
60 MRI = &MF.getRegInfo();
61 LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS();
66 switch (
MI.getOpcode()) {
69 case AArch64::COALESCER_BARRIER_FPR16:
70 case AArch64::COALESCER_BARRIER_FPR32:
71 case AArch64::COALESCER_BARRIER_FPR64:
72 case AArch64::COALESCER_BARRIER_FPR128: {
76 MRI->replaceRegWith(Dst, Src);
80 LIS->RemoveMachineInstrFromMaps(
MI);
83 LIS->removeInterval(Src);
84 LIS->createAndComputeVirtRegInterval(Src);
97 return new AArch64PostCoalescer();
unsigned const MachineRegisterInfo * MRI
for(const MachineOperand &MO :llvm::drop_begin(OldMI.operands(), Desc.getNumOperands()))
#define INITIALIZE_PASS_DEPENDENCY(depName)
#define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis)
#define INITIALIZE_PASS_BEGIN(passName, arg, name, cfg, analysis)
AArch64FunctionInfo - This class is derived from MachineFunctionInfo and contains private AArch64-spe...
Represent the analysis usage information of a pass.
AnalysisUsage & addRequired()
void setPreservesAll()
Set by analyses that do not transform their input at all.
FunctionPass class - This class is used to implement most global optimizations.
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
Representation of each machine instruction.
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
Wrapper class representing virtual and physical registers.
StringRef - Represent a constant reference to a string, i.e.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
This is an optimization pass for GlobalISel generic memory operations.
FunctionPass * createAArch64PostCoalescerPass()
iterator_range< early_inc_iterator_impl< detail::IterOfRange< RangeT > > > make_early_inc_range(RangeT &&Range)
Make a range that does early increment to allow mutation of the underlying range without disrupting i...