LLVM  4.0.0
Macros | Enumerations | Functions | Variables
ARMExpandPseudoInsts.cpp File Reference
#include "ARM.h"
#include "ARMBaseInstrInfo.h"
#include "ARMBaseRegisterInfo.h"
#include "ARMConstantPoolValue.h"
#include "ARMMachineFunctionInfo.h"
#include "MCTargetDesc/ARMAddressingModes.h"
#include "llvm/CodeGen/LivePhysRegs.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineInstrBundle.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetFrameLowering.h"
#include "llvm/Target/TargetRegisterInfo.h"
Include dependency graph for ARMExpandPseudoInsts.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "arm-pseudo"
 

Enumerations

enum  NEONRegSpacing
 

Functions

static const NEONLdStTableEntry * LookupNEONLdSt (unsigned Opcode)
 LookupNEONLdSt - Search the NEONLdStTable for information about a NEON load or store pseudo instruction. More...
 
static void GetDSubRegs (unsigned Reg, NEONRegSpacing RegSpc, const TargetRegisterInfo *TRI, unsigned &D0, unsigned &D1, unsigned &D2, unsigned &D3)
 GetDSubRegs - Get 4 D subregisters of a Q, QQ, or QQQQ register, corresponding to the specified register spacing. More...
 
static bool IsAnAddressOperand (const MachineOperand &MO)
 
static void addPostLoopLiveIns (MachineBasicBlock *MBB, LivePhysRegs &LiveRegs)
 
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. More...
 

Variables

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

Macro Definition Documentation

#define DEBUG_TYPE   "arm-pseudo"

Definition at line 35 of file ARMExpandPseudoInsts.cpp.

Enumeration Type Documentation

Definition at line 111 of file ARMExpandPseudoInsts.cpp.

Function Documentation

static 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 872 of file ARMExpandPseudoInsts.cpp.

References llvm::MachineInstrBuilder::addReg(), llvm::getKillRegState(), llvm::MachineOperand::getReg(), llvm::MCRegisterInfo::getSubReg(), and llvm::MachineOperand::isDead().

static void addPostLoopLiveIns ( MachineBasicBlock MBB,
LivePhysRegs LiveRegs 
)
static
static void GetDSubRegs ( unsigned  Reg,
NEONRegSpacing  RegSpc,
const TargetRegisterInfo TRI,
unsigned D0,
unsigned D1,
unsigned D2,
unsigned 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 368 of file ARMExpandPseudoInsts.cpp.

References assert(), and llvm::MCRegisterInfo::getSubReg().

static bool IsAnAddressOperand ( const MachineOperand MO)
static
static const NEONLdStTableEntry* LookupNEONLdSt ( unsigned  Opcode)
static

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

Definition at line 347 of file ARMExpandPseudoInsts.cpp.

References assert(), llvm::sys::path::begin(), llvm::sys::path::end(), I, and NEONLdStTable.

Variable Documentation

const NEONLdStTableEntry NEONLdStTable[]
static

Definition at line 149 of file ARMExpandPseudoInsts.cpp.

Referenced by LookupNEONLdSt().

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