LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Thumb2RegisterInfo.cpp
Go to the documentation of this file.
1 //===-- Thumb2RegisterInfo.cpp - Thumb-2 Register Information -------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains the Thumb-2 implementation of the TargetRegisterInfo
11 // class.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "Thumb2RegisterInfo.h"
16 #include "ARM.h"
17 #include "ARMBaseInstrInfo.h"
18 #include "ARMSubtarget.h"
22 #include "llvm/IR/Constants.h"
23 #include "llvm/IR/DerivedTypes.h"
24 #include "llvm/IR/Function.h"
25 using namespace llvm;
26 
28  : ARMBaseRegisterInfo(sti) {
29 }
30 
31 /// emitLoadConstPool - Emits a load from constpool to materialize the
32 /// specified immediate.
33 void
36  DebugLoc dl,
37  unsigned DestReg, unsigned SubIdx,
38  int Val,
39  ARMCC::CondCodes Pred, unsigned PredReg,
40  unsigned MIFlags) const {
41  MachineFunction &MF = *MBB.getParent();
42  const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
44  const Constant *C = ConstantInt::get(
46  unsigned Idx = ConstantPool->getConstantPoolIndex(C, 4);
47 
48  BuildMI(MBB, MBBI, dl, TII.get(ARM::t2LDRpci))
49  .addReg(DestReg, getDefRegState(true), SubIdx)
50  .addConstantPoolIndex(Idx).addImm((int64_t)ARMCC::AL).addReg(0)
51  .setMIFlags(MIFlags);
52 }
Thumb2RegisterInfo(const ARMSubtarget &STI)
const MachineFunction * getParent() const
The machine constant pool.
LLVMContext & getContext() const
Definition: Function.cpp:167
const Function * getFunction() const
const HexagonInstrInfo * TII
const MachineInstrBuilder & addImm(int64_t Val) const
void emitLoadConstPool(MachineBasicBlock &MBB, MachineBasicBlock::iterator &MBBI, DebugLoc dl, unsigned DestReg, unsigned SubIdx, int Val, ARMCC::CondCodes Pred=ARMCC::AL, unsigned PredReg=0, unsigned MIFlags=MachineInstr::NoFlags) const
unsigned getDefRegState(bool B)
bundle_iterator< MachineInstr, instr_iterator > iterator
LLVM Constant Representation.
Definition: Constant.h:41
const MachineInstrBuilder & setMIFlags(unsigned Flags) const
MachineConstantPool * getConstantPool()
MachineInstrBuilder BuildMI(MachineFunction &MF, DebugLoc DL, const MCInstrDesc &MCID)
const MCInstrDesc & get(unsigned Opcode) const
Definition: MCInstrInfo.h:48
virtual const TargetInstrInfo * getInstrInfo() const
static Constant * get(Type *Ty, uint64_t V, bool isSigned=false)
Definition: Constants.cpp:492
static IntegerType * getInt32Ty(LLVMContext &C)
Definition: Type.cpp:241
const TargetMachine & getTarget() const
const MachineInstrBuilder & addReg(unsigned RegNo, unsigned flags=0, unsigned SubReg=0) const
unsigned getConstantPoolIndex(const Constant *C, unsigned Alignment)