Go to the documentation of this file.
21 #define DEBUG_TYPE "arm-bb-utils"
31 switch(
MI->getOpcode()) {
85 assert(
I !=
MBB->
end() &&
"Didn't find MI in its own basic block?");
95 unsigned MaxDisp)
const {
96 unsigned PCAdj = isThumb ? 4 : 8;
98 unsigned DestOffset = BBInfo[DestBB->
getNumber()].Offset;
103 <<
" to " << DestOffset <<
" offset "
104 <<
int(DestOffset - BrOffset) <<
"\t" << *
MI);
106 if (BrOffset <= DestOffset) {
108 if (DestOffset-BrOffset <= MaxDisp)
111 if (BrOffset-DestOffset <= MaxDisp)
119 "Basic block is not a child of the current function.\n");
121 unsigned BBNum =
BB->getNumber();
123 <<
" - name: " <<
BB->getName() <<
"\n"
124 <<
" - number: " <<
BB->getNumber() <<
"\n"
125 <<
" - function: " << MF.
getName() <<
"\n"
132 const unsigned Offset = BBInfo[
i - 1].postOffset(
Align);
139 BBInfo[
i].Offset == Offset &&
143 BBInfo[
i].Offset = Offset;
This is an optimization pass for GlobalISel generic memory operations.
Printable printMBBReference(const MachineBasicBlock &MBB)
Prints a machine basic block reference.
unsigned getNumBlockIDs() const
getNumBlockIDs - Return the number of MBB ID's allocated.
void ensureAlignment(Align A)
ensureAlignment - Make sure the function is at least A bytes aligned.
bool isBBInRange(MachineInstr *MI, MachineBasicBlock *DestBB, unsigned MaxDisp) const
isBBInRange - Returns true if the distance between specific MI and specific BB can fit in MI's displa...
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
BasicBlockInfo - Information about the offset and size of a single basic block.
static bool mayOptimizeThumb2Instruction(const MachineInstr *MI)
void computeBlockSize(MachineBasicBlock *MBB)
unsigned getInstSizeInBytes(const MachineInstr &MI) const override
GetInstSize - Returns the size of the specified MachineInstr.
This struct is a compact representation of a valid (non-zero power of two) alignment.
Representation of each machine instruction.
Align PostAlign
PostAlign - When > 1, the block terminator contains a .align directive, so the end of the block is al...
Align getAlignment() const
Return alignment of the basic block.
StringRef getName() const
getName - Return the name of the corresponding LLVM function.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
const MachineFunction * getParent() const
Return the MachineFunction containing this basic block.
uint8_t Unalign
Unalign - When non-zero, the block contains instructions (inline asm) of unknown size.
unsigned Size
Size - Size of the basic block in bytes.
int getNumber() const
MachineBasicBlocks are uniquely numbered at the function level, unless they're not in a MachineFuncti...
unsigned getOpcode() const
Returns the opcode of this MachineInstr.
void adjustBBOffsetsAfter(MachineBasicBlock *MBB)
MachineBasicBlock * getBlockNumbered(unsigned N) const
getBlockNumbered - MachineBasicBlocks are automatically numbered when they are inserted into the mach...
unsigned getOffsetOf(MachineInstr *MI) const
getOffsetOf - Return the current offset of the specified machine instruction from the start of the fu...
Common register allocation spilling lr str ldr sxth r3 ldr mla r4 can lr mov lr str ldr sxth r3 mla r4 and then merge mul and lr str ldr sxth r3 mla r4 It also increase the likelihood the store may become dead bb27 Successors according to LLVM BB
StringRef getName() const
Return the name of the corresponding LLVM basic block, or an empty string.