LLVM 22.0.0git
ARMExpandPseudoInsts.cpp File Reference

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "arm-pseudo"
#define ARM_EXPAND_PSEUDO_NAME   "ARM pseudo instruction expansion pass"

Functions

 INITIALIZE_PASS (ARMExpandPseudo, DEBUG_TYPE, ARM_EXPAND_PSEUDO_NAME, false, false) namespace
static const NEONLdStTableEntry * LookupNEONLdSt (unsigned Opcode)
 LookupNEONLdSt - Search the NEONLdStTable for information about a NEON load or store pseudo instruction.
static void GetDSubRegs (unsigned Reg, NEONRegSpacing RegSpc, const TargetRegisterInfo *TRI, MCRegister &D0, MCRegister &D1, MCRegister &D2, MCRegister &D3)
 GetDSubRegs - Get 4 D subregisters of a Q, QQ, or QQQQ register, corresponding to the specified register spacing.
static bool IsAnAddressOperand (const MachineOperand &MO)
static MachineOperand makeImplicit (const MachineOperand &MO)
static MachineOperand getMovOperand (const MachineOperand &MO, unsigned TargetFlag)
static void determineGPRegsToClear (const MachineInstr &MI, const std::initializer_list< unsigned > &Regs, SmallVectorImpl< unsigned > &ClearRegs)
static bool determineFPRegsToClear (const MachineInstr &MI, BitVector &ClearRegs)
static bool definesOrUsesFPReg (const MachineInstr &MI)
static void addExclusiveRegPair (MachineInstrBuilder &MIB, MachineOperand &Reg, unsigned Flags, bool IsThumb, const TargetRegisterInfo *TRI)
 ARM's ldrexd/strexd take a consecutive register pair (represented as a single GPRPair register), Thumb's take two separate registers so we need to extract the subregs from the pair.
static void CMSEPushCalleeSaves (const TargetInstrInfo &TII, MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, Register JumpReg, const LivePhysRegs &LiveRegs, bool Thumb1Only)
static void CMSEPopCalleeSaves (const TargetInstrInfo &TII, MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, bool Thumb1Only)

Variables

static cl::opt< boolVerifyARMPseudo ("verify-arm-pseudo-expand", cl::Hidden, cl::desc("Verify machine code after expanding ARM pseudos"))
static const NEONLdStTableEntry NEONLdStTable []
static const int CMSE_FP_SAVE_SIZE = 136

Macro Definition Documentation

◆ ARM_EXPAND_PSEUDO_NAME

#define ARM_EXPAND_PSEUDO_NAME   "ARM pseudo instruction expansion pass"

Definition at line 38 of file ARMExpandPseudoInsts.cpp.

Referenced by INITIALIZE_PASS().

◆ DEBUG_TYPE

#define DEBUG_TYPE   "arm-pseudo"

Definition at line 32 of file ARMExpandPseudoInsts.cpp.

Function Documentation

◆ addExclusiveRegPair()

void addExclusiveRegPair ( MachineInstrBuilder & MIB,
MachineOperand & Reg,
unsigned Flags,
bool IsThumb,
const TargetRegisterInfo * TRI )
static

ARM's ldrexd/strexd take a consecutive register pair (represented as a single GPRPair register), Thumb's take two separate registers so we need to extract the subregs from the pair.

Definition at line 1961 of file ARMExpandPseudoInsts.cpp.

References llvm::MachineInstrBuilder::addReg(), Reg, and TRI.

◆ CMSEPopCalleeSaves()

◆ CMSEPushCalleeSaves()

◆ definesOrUsesFPReg()

bool definesOrUsesFPReg ( const MachineInstr & MI)
static

Definition at line 1786 of file ARMExpandPseudoInsts.cpp.

References MI, and Reg.

◆ determineFPRegsToClear()

bool determineFPRegsToClear ( const MachineInstr & MI,
BitVector & ClearRegs )
static

Definition at line 1211 of file ARMExpandPseudoInsts.cpp.

References MI, Reg, and llvm::BitVector::reset().

◆ determineGPRegsToClear()

◆ GetDSubRegs()

void GetDSubRegs ( unsigned Reg,
NEONRegSpacing RegSpc,
const TargetRegisterInfo * TRI,
MCRegister & D0,
MCRegister & D1,
MCRegister & D2,
MCRegister & D3 )
static

GetDSubRegs - Get 4 D subregisters of a Q, QQ, or QQQQ register, corresponding to the specified register spacing.

Not all of the results are necessarily valid, e.g., a Q register only has 2 D subregisters.

Definition at line 517 of file ARMExpandPseudoInsts.cpp.

References assert(), Reg, and TRI.

◆ getMovOperand()

◆ INITIALIZE_PASS()

INITIALIZE_PASS ( ARMExpandPseudo ,
DEBUG_TYPE ,
ARM_EXPAND_PSEUDO_NAME ,
false ,
false  )

◆ IsAnAddressOperand()

◆ LookupNEONLdSt()

const NEONLdStTableEntry * LookupNEONLdSt ( unsigned Opcode)
static

LookupNEONLdSt - Search the NEONLdStTable for information about a NEON load or store pseudo instruction.

Definition at line 498 of file ARMExpandPseudoInsts.cpp.

References assert(), I, llvm::is_sorted(), llvm::lower_bound(), and NEONLdStTable.

◆ makeImplicit()

MachineOperand makeImplicit ( const MachineOperand & MO)
static

Definition at line 947 of file ARMExpandPseudoInsts.cpp.

References llvm::MachineOperand::setImplicit().

Variable Documentation

◆ CMSE_FP_SAVE_SIZE

const int CMSE_FP_SAVE_SIZE = 136
static

Definition at line 1159 of file ARMExpandPseudoInsts.cpp.

◆ NEONLdStTable

const NEONLdStTableEntry NEONLdStTable[]
static

Definition at line 169 of file ARMExpandPseudoInsts.cpp.

Referenced by LookupNEONLdSt().

◆ VerifyARMPseudo

cl::opt< bool > VerifyARMPseudo("verify-arm-pseudo-expand", cl::Hidden, cl::desc("Verify machine code after expanding ARM pseudos")) ( "verify-arm-pseudo-expand" ,
cl::Hidden ,
cl::desc("Verify machine code after expanding ARM pseudos")  )
static