LLVM 22.0.0git
ThumbRegisterInfo.cpp File Reference

Go to the source code of this file.

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.

Functions

static void emitThumb1LoadConstPool (MachineBasicBlock &MBB, MachineBasicBlock::iterator &MBBI, const DebugLoc &dl, unsigned DestReg, unsigned SubIdx, int Val, ARMCC::CondCodes Pred, unsigned PredReg, unsigned MIFlags)
static void emitThumb2LoadConstPool (MachineBasicBlock &MBB, MachineBasicBlock::iterator &MBBI, const DebugLoc &dl, unsigned DestReg, unsigned SubIdx, int Val, ARMCC::CondCodes Pred, unsigned PredReg, unsigned MIFlags)
static void emitThumbRegPlusImmInReg (MachineBasicBlock &MBB, MachineBasicBlock::iterator &MBBI, const DebugLoc &dl, Register DestReg, Register BaseReg, int NumBytes, bool CanChangeCC, const TargetInstrInfo &TII, const ARMBaseRegisterInfo &MRI, unsigned MIFlags=MachineInstr::NoFlags)
 emitThumbRegPlusImmInReg - Emits a series of instructions to materialize a destreg = basereg + immediate in Thumb code.
static void removeOperands (MachineInstr &MI, unsigned i)
static unsigned convertToNonSPOpcode (unsigned Opcode)
 convertToNonSPOpcode - Change the opcode to the non-SP version, because we're replacing the frame index with a non-SP register.

Variables

cl::opt< boolllvm::ReuseFrameIndexVals

Function Documentation

◆ convertToNonSPOpcode()

unsigned convertToNonSPOpcode ( unsigned Opcode)
static

convertToNonSPOpcode - Change the opcode to the non-SP version, because we're replacing the frame index with a non-SP register.

Definition at line 410 of file ThumbRegisterInfo.cpp.

Referenced by llvm::ThumbRegisterInfo::rewriteFrameIndex().

◆ emitThumb1LoadConstPool()

◆ emitThumb2LoadConstPool()

◆ emitThumbRegPlusImmInReg()

void emitThumbRegPlusImmInReg ( MachineBasicBlock & MBB,
MachineBasicBlock::iterator & MBBI,
const DebugLoc & dl,
Register DestReg,
Register BaseReg,
int NumBytes,
bool CanChangeCC,
const TargetInstrInfo & TII,
const ARMBaseRegisterInfo & MRI,
unsigned MIFlags = MachineInstr::NoFlags )
static

emitThumbRegPlusImmInReg - Emits a series of instructions to materialize a destreg = basereg + immediate in Thumb code.

Materialize the immediate in a register using mov / mvn (armv6-M >) sequences, movs / lsls / adds / lsls / adds / lsls / adds sequences (armv6-M) or load the immediate from a constpool entry.

Definition at line 122 of file ThumbRegisterInfo.cpp.

References llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::ARMCC::AL, llvm::any_of(), assert(), llvm::BuildMI(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), llvm::RegState::Implicit, llvm::isARMLowRegister(), llvm::Register::isVirtual(), llvm::RegState::Kill, MBB, MBBI, MRI, llvm::MachineInstr::NoFlags, Opc, llvm::predOps(), llvm::MachineInstrBuilder::setMIFlags(), llvm::t1CondCodeOp(), and TII.

Referenced by llvm::ThumbRegisterInfo::eliminateFrameIndex(), and llvm::emitThumbRegPlusImmediate().

◆ removeOperands()

void removeOperands ( MachineInstr & MI,
unsigned i )
static

Definition at line 402 of file ThumbRegisterInfo.cpp.

References MI.

Referenced by llvm::ThumbRegisterInfo::eliminateFrameIndex().