1c5707112e7635d1dd2f2cc9c4f42e79a51302ccaJia Liu//===-- MipsMachineFunctionInfo.cpp - Private data used for Mips ----------===// 22d24e2a396a1d211baaeedf32148a3b657240170David Blaikie// 32d24e2a396a1d211baaeedf32148a3b657240170David Blaikie// The LLVM Compiler Infrastructure 42d24e2a396a1d211baaeedf32148a3b657240170David Blaikie// 52d24e2a396a1d211baaeedf32148a3b657240170David Blaikie// This file is distributed under the University of Illinois Open Source 62d24e2a396a1d211baaeedf32148a3b657240170David Blaikie// License. See LICENSE.TXT for details. 72d24e2a396a1d211baaeedf32148a3b657240170David Blaikie// 82d24e2a396a1d211baaeedf32148a3b657240170David Blaikie//===----------------------------------------------------------------------===// 92d24e2a396a1d211baaeedf32148a3b657240170David Blaikie 102d24e2a396a1d211baaeedf32148a3b657240170David Blaikie#include "MipsMachineFunction.h" 11648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka#include "MipsInstrInfo.h" 12648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka#include "MipsSubtarget.h" 13648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka#include "MCTargetDesc/MipsBaseInfo.h" 14648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka#include "llvm/Function.h" 15648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka#include "llvm/CodeGen/MachineInstrBuilder.h" 16648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka#include "llvm/CodeGen/MachineRegisterInfo.h" 17648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka#include "llvm/Support/CommandLine.h" 182d24e2a396a1d211baaeedf32148a3b657240170David Blaikie 192d24e2a396a1d211baaeedf32148a3b657240170David Blaikieusing namespace llvm; 202d24e2a396a1d211baaeedf32148a3b657240170David Blaikie 21648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanakastatic cl::opt<bool> 22648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira HatanakaFixGlobalBaseReg("mips-fix-global-base-reg", cl::Hidden, cl::init(true), 23648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka cl::desc("Always use $gp as the global base register.")); 24648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka 25648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanakabool MipsFunctionInfo::globalBaseRegSet() const { 26648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka return GlobalBaseReg; 27648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka} 28648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka 29648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanakaunsigned MipsFunctionInfo::getGlobalBaseReg() { 30648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka // Return if it has already been initialized. 31648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka if (GlobalBaseReg) 32648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka return GlobalBaseReg; 33648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka 34648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka const MipsSubtarget &ST = MF.getTarget().getSubtarget<MipsSubtarget>(); 35648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka 363ee306cbc0a295409c464ffaad5ef694de8eb09aAkira Hatanaka const TargetRegisterClass *RC; 373ee306cbc0a295409c464ffaad5ef694de8eb09aAkira Hatanaka if (ST.inMips16Mode()) 383ee306cbc0a295409c464ffaad5ef694de8eb09aAkira Hatanaka RC=(const TargetRegisterClass*)&Mips::CPU16RegsRegClass; 393ee306cbc0a295409c464ffaad5ef694de8eb09aAkira Hatanaka else 403ee306cbc0a295409c464ffaad5ef694de8eb09aAkira Hatanaka RC = ST.isABI_N64() ? 413ee306cbc0a295409c464ffaad5ef694de8eb09aAkira Hatanaka (const TargetRegisterClass*)&Mips::CPU64RegsRegClass : 423ee306cbc0a295409c464ffaad5ef694de8eb09aAkira Hatanaka (const TargetRegisterClass*)&Mips::CPURegsRegClass; 43648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka return GlobalBaseReg = MF.getRegInfo().createVirtualRegister(RC); 44648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka} 45648f00c2f0eb29c0ae2a333fa0bfa55970059f08Akira Hatanaka 462d24e2a396a1d211baaeedf32148a3b657240170David Blaikievoid MipsFunctionInfo::anchor() { } 47