55 case ARM::LDR_PRE_IMM:
56 case ARM::LDR_PRE_REG:
57 case ARM::LDR_POST_IMM:
58 case ARM::LDR_POST_REG:
63 case ARM::LDRB_PRE_IMM:
64 case ARM::LDRB_PRE_REG:
65 case ARM::LDRB_POST_IMM:
66 case ARM::LDRB_POST_REG:
74 case ARM::STR_PRE_IMM:
75 case ARM::STR_PRE_REG:
76 case ARM::STR_POST_IMM:
77 case ARM::STR_POST_REG:
82 case ARM::STRB_PRE_IMM:
83 case ARM::STRB_PRE_REG:
84 case ARM::STRB_POST_IMM:
85 case ARM::STRB_POST_REG:
111 cast<GlobalValue>((*MI->memoperands_begin())->getValue());
120 unsigned Reg = MI->getOperand(0).getReg();
123 MIB =
BuildMI(MBB, MI, DL,
get(ARM::MOV_ga_pcrel_ldr), Reg)
129 MIB =
BuildMI(MBB, MI, DL,
get(ARM::LDRi12), Reg);
131 MIB.
setMemRefs(MI->memoperands_begin(), MI->memoperands_end());
158 unsigned PCAdj = STI.
isThumb() ? 4 : 8;
160 *Context,
"_GLOBAL_OFFSET_TABLE_", ARMPCLabelIndex, PCAdj);
171 unsigned Opc = STI.
isThumb2() ? ARM::t2LDRpci : ARM::LDRcp;
174 TII.
get(Opc), TempReg)
175 .addConstantPoolIndex(Idx);
176 if (Opc == ARM::LDRcp)
182 Opc = STI.
isThumb2() ? ARM::tPICADD : ARM::PICADD;
186 if (Opc == ARM::PICADD)
192 const char *getPassName()
const override {
193 return "ARM PIC Global Base Reg Initialization";
The memory access reads data.
const MachineFunction * getParent() const
getParent - Return the MachineFunction containing this basic block.
LLVMContext & getContext() const
getContext - Return a reference to the LLVMContext associated with this function. ...
void getNoopForMachoTarget(MCInst &NopInst) const override
getNoopForMachoTarget - Return the noop instruction to use for a noop.
Reloc::Model getRelocationModel() const
Returns the code generation relocation model.
FunctionPass * createARMGlobalBaseRegPass()
unsigned createVirtualRegister(const TargetRegisterClass *RegClass)
createVirtualRegister - Create and return a new virtual register in the function with the specified r...
ARMConstantPoolValue - ARM specific constantpool value.
unsigned getPrefTypeAlignment(Type *Ty) const
Returns the preferred stack/global alignment for the specified type.
static PointerType * getInt32PtrTy(LLVMContext &C, unsigned AS=0)
const Function * getFunction() const
getFunction - Return the LLVM function that this machine code represents
bool isThumb1Only() const
MachineMemOperand * getMachineMemOperand(MachinePointerInfo PtrInfo, unsigned f, uint64_t s, unsigned base_alignment, const AAMDNodes &AAInfo=AAMDNodes(), const MDNode *Ranges=nullptr)
getMachineMemOperand - Allocate a new MachineMemOperand.
unsigned createPICLabelUId()
GlobalBaseReg - On Darwin, this node represents the result of the mflr at function entry...
const ARMBaseInstrInfo * getInstrInfo() const override
ARMInstrInfo(const ARMSubtarget &STI)
static const MachineInstrBuilder & AddDefaultPred(const MachineInstrBuilder &MIB)
MachineMemOperand - A description of a memory reference used in the backend.
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
static MCOperand createReg(unsigned Reg)
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
const HexagonInstrInfo * TII
Reg
All possible values of the reg field in the ModR/M byte.
const MachineInstrBuilder & addImm(int64_t Val) const
addImm - Add a new immediate operand.
const MachineBasicBlock & front() const
Instances of this class represent a single low-level machine instruction.
Flag
These should be considered private to the implementation of the MCInstrDesc class.
TargetInstrInfo - Interface to description of machine instruction set.
bundle_iterator< MachineInstr, instr_iterator > iterator
const MachineInstrBuilder & setMemRefs(MachineInstr::mmo_iterator b, MachineInstr::mmo_iterator e) const
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
This is an important class for using LLVM in a threaded context.
unsigned getGlobalBaseReg() const
DebugLoc findDebugLoc(instr_iterator MBBI)
findDebugLoc - find the next valid DebugLoc starting at MBBI, skipping any DBG_VALUE instructions...
Represent the analysis usage information of a pass.
Ty * getInfo()
getInfo - Keep track of various per-function pieces of information for backends that would like to do...
FunctionPass class - This class is used to implement most global optimizations.
unsigned getUnindexedOpcode(unsigned Opc) const override
MachineConstantPool * getConstantPool()
getConstantPool - Return the constant pool object for the current function.
MachineInstrBuilder BuildMI(MachineFunction &MF, DebugLoc DL, const MCInstrDesc &MCID)
BuildMI - Builder interface.
const MCInstrDesc & get(unsigned Opcode) const
Return the machine instruction descriptor that corresponds to the specified instruction opcode...
The memory access is invariant.
void setOpcode(unsigned Op)
bool GVIsIndirectSymbol(const GlobalValue *GV, Reloc::Model RelocM) const
GVIsIndirectSymbol - true if the GV will be accessed via an indirect symbol.
const DataLayout * getDataLayout() const
Deprecated in 3.7, will be removed in 3.8.
void setPreservesCFG()
This function should be called by the pass, iff they do not:
static cl::opt< AlignMode > Align(cl::desc("Load/store alignment support"), cl::Hidden, cl::init(NoStrictAlign), cl::values(clEnumValN(StrictAlign,"aarch64-strict-align","Disallow all unaligned memory accesses"), clEnumValN(NoStrictAlign,"aarch64-no-strict-align","Allow unaligned memory accesses"), clEnumValEnd))
static ARMConstantPoolSymbol * Create(LLVMContext &C, const char *s, unsigned ID, unsigned char PCAdj)
const MachineInstrBuilder & addGlobalAddress(const GlobalValue *GV, int64_t Offset=0, unsigned char TargetFlags=0) const
static MachinePointerInfo getGOT()
getGOT - Return a MachinePointerInfo record that refers to a GOT entry.
MachineRegisterInfo & getRegInfo()
getRegInfo - Return information about the registers currently in use.
ARMFunctionInfo - This class is derived from MachineFunctionInfo and contains private ARM-specific in...
const MachineInstrBuilder & addMemOperand(MachineMemOperand *MMO) const
const TargetMachine & getTarget() const
getTarget - Return the target machine this machine code is compiled with
bool useMovt(const MachineFunction &MF) const
MO_NONLAZY - This is an independent flag, on a symbol operand "FOO" it represents a symbol which...
Primary interface to the complete machine description for the target machine.
void addOperand(const MCOperand &Op)
void expandLoadStackGuardBase(MachineBasicBlock::iterator MI, unsigned LoadImmOpc, unsigned LoadOpc, Reloc::Model RM) const
const MachineInstrBuilder & addReg(unsigned RegNo, unsigned flags=0, unsigned SubReg=0) const
addReg - Add a new virtual register operand...
static MCOperand createImm(int64_t Val)
unsigned getConstantPoolIndex(const Constant *C, unsigned Alignment)
getConstantPoolIndex - Create a new entry in the constant pool or return an existing one...