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" 19#include "llvm/CodeGen/MachineConstantPool.h" 20#include "llvm/CodeGen/MachineFunction.h" 21#include "llvm/CodeGen/MachineInstrBuilder.h" 22#include "llvm/IR/Constants.h" 23#include "llvm/IR/DerivedTypes.h" 24#include "llvm/IR/Function.h" 25using namespace llvm; 26 27Thumb2RegisterInfo::Thumb2RegisterInfo(const ARMSubtarget &sti) 28 : ARMBaseRegisterInfo(sti) { 29} 30 31/// emitLoadConstPool - Emits a load from constpool to materialize the 32/// specified immediate. 33void 34Thumb2RegisterInfo::emitLoadConstPool(MachineBasicBlock &MBB, 35 MachineBasicBlock::iterator &MBBI, 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(); 43 MachineConstantPool *ConstantPool = MF.getConstantPool(); 44 const Constant *C = ConstantInt::get( 45 Type::getInt32Ty(MBB.getParent()->getFunction()->getContext()), Val); 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} 53