1 //===- Thumb2RegisterInfo.cpp - Thumb-2 Register Information ----*- C++ -*-===// 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 "ARM.h" 16 #include "ARMSubtarget.h" 17 #include "Thumb2InstrInfo.h" 18 #include "Thumb2RegisterInfo.h" 19 #include "llvm/Constants.h" 20 #include "llvm/DerivedTypes.h" 21 #include "llvm/Function.h" 22 #include "llvm/CodeGen/MachineConstantPool.h" 23 #include "llvm/CodeGen/MachineFunction.h" 24 #include "llvm/CodeGen/MachineInstrBuilder.h" 25 using namespace llvm; 26 27 Thumb2RegisterInfo::Thumb2RegisterInfo(const ARMBaseInstrInfo &tii, 28 const ARMSubtarget &sti) 29 : ARMBaseRegisterInfo(tii, sti) { 30 } 31 32 /// emitLoadConstPool - Emits a load from constpool to materialize the 33 /// specified immediate. 34 void 35 Thumb2RegisterInfo::emitLoadConstPool(MachineBasicBlock &MBB, 36 MachineBasicBlock::iterator &MBBI, 37 DebugLoc dl, 38 unsigned DestReg, unsigned SubIdx, 39 int Val, 40 ARMCC::CondCodes Pred, unsigned PredReg, 41 unsigned MIFlags) const { 42 MachineFunction &MF = *MBB.getParent(); 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