1*9880d681SAndroid Build Coastguard Worker //===-- LanaiRegisterInfo.cpp - Lanai Register Information ------*- C++ -*-===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker //
10*9880d681SAndroid Build Coastguard Worker // This file contains the Lanai implementation of the TargetRegisterInfo class.
11*9880d681SAndroid Build Coastguard Worker //
12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker #include "LanaiRegisterInfo.h"
15*9880d681SAndroid Build Coastguard Worker #include "Lanai.h"
16*9880d681SAndroid Build Coastguard Worker #include "LanaiSubtarget.h"
17*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/BitVector.h"
18*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/STLExtras.h"
19*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/MachineFrameInfo.h"
20*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/MachineFunction.h"
21*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/MachineInstrBuilder.h"
22*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/RegisterScavenging.h"
23*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Function.h"
24*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Type.h"
25*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ErrorHandling.h"
26*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetFrameLowering.h"
27*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetInstrInfo.h"
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker #define GET_REGINFO_TARGET_DESC
30*9880d681SAndroid Build Coastguard Worker #include "LanaiGenRegisterInfo.inc"
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker using namespace llvm;
33*9880d681SAndroid Build Coastguard Worker
LanaiRegisterInfo()34*9880d681SAndroid Build Coastguard Worker LanaiRegisterInfo::LanaiRegisterInfo() : LanaiGenRegisterInfo(Lanai::RCA) {}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker const uint16_t *
getCalleeSavedRegs(const MachineFunction * MF) const37*9880d681SAndroid Build Coastguard Worker LanaiRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
38*9880d681SAndroid Build Coastguard Worker return CSR_SaveList;
39*9880d681SAndroid Build Coastguard Worker }
40*9880d681SAndroid Build Coastguard Worker
getReservedRegs(const MachineFunction & MF) const41*9880d681SAndroid Build Coastguard Worker BitVector LanaiRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
42*9880d681SAndroid Build Coastguard Worker BitVector Reserved(getNumRegs());
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::R0);
45*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::R1);
46*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::PC);
47*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::R2);
48*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::SP);
49*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::R4);
50*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::FP);
51*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::R5);
52*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::RR1);
53*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::R10);
54*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::RR2);
55*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::R11);
56*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::RCA);
57*9880d681SAndroid Build Coastguard Worker Reserved.set(Lanai::R15);
58*9880d681SAndroid Build Coastguard Worker if (hasBasePointer(MF))
59*9880d681SAndroid Build Coastguard Worker Reserved.set(getBaseRegister());
60*9880d681SAndroid Build Coastguard Worker return Reserved;
61*9880d681SAndroid Build Coastguard Worker }
62*9880d681SAndroid Build Coastguard Worker
requiresRegisterScavenging(const MachineFunction & MF) const63*9880d681SAndroid Build Coastguard Worker bool LanaiRegisterInfo::requiresRegisterScavenging(
64*9880d681SAndroid Build Coastguard Worker const MachineFunction &MF) const {
65*9880d681SAndroid Build Coastguard Worker return true;
66*9880d681SAndroid Build Coastguard Worker }
67*9880d681SAndroid Build Coastguard Worker
trackLivenessAfterRegAlloc(const MachineFunction & MF) const68*9880d681SAndroid Build Coastguard Worker bool LanaiRegisterInfo::trackLivenessAfterRegAlloc(
69*9880d681SAndroid Build Coastguard Worker const MachineFunction &MF) const {
70*9880d681SAndroid Build Coastguard Worker return true;
71*9880d681SAndroid Build Coastguard Worker }
72*9880d681SAndroid Build Coastguard Worker
isALUArithLoOpcode(unsigned Opcode)73*9880d681SAndroid Build Coastguard Worker static bool isALUArithLoOpcode(unsigned Opcode) {
74*9880d681SAndroid Build Coastguard Worker switch (Opcode) {
75*9880d681SAndroid Build Coastguard Worker case Lanai::ADD_I_LO:
76*9880d681SAndroid Build Coastguard Worker case Lanai::SUB_I_LO:
77*9880d681SAndroid Build Coastguard Worker case Lanai::ADD_F_I_LO:
78*9880d681SAndroid Build Coastguard Worker case Lanai::SUB_F_I_LO:
79*9880d681SAndroid Build Coastguard Worker case Lanai::ADDC_I_LO:
80*9880d681SAndroid Build Coastguard Worker case Lanai::SUBB_I_LO:
81*9880d681SAndroid Build Coastguard Worker case Lanai::ADDC_F_I_LO:
82*9880d681SAndroid Build Coastguard Worker case Lanai::SUBB_F_I_LO:
83*9880d681SAndroid Build Coastguard Worker return true;
84*9880d681SAndroid Build Coastguard Worker default:
85*9880d681SAndroid Build Coastguard Worker return false;
86*9880d681SAndroid Build Coastguard Worker }
87*9880d681SAndroid Build Coastguard Worker }
88*9880d681SAndroid Build Coastguard Worker
getOppositeALULoOpcode(unsigned Opcode)89*9880d681SAndroid Build Coastguard Worker static unsigned getOppositeALULoOpcode(unsigned Opcode) {
90*9880d681SAndroid Build Coastguard Worker switch (Opcode) {
91*9880d681SAndroid Build Coastguard Worker case Lanai::ADD_I_LO:
92*9880d681SAndroid Build Coastguard Worker return Lanai::SUB_I_LO;
93*9880d681SAndroid Build Coastguard Worker case Lanai::SUB_I_LO:
94*9880d681SAndroid Build Coastguard Worker return Lanai::ADD_I_LO;
95*9880d681SAndroid Build Coastguard Worker case Lanai::ADD_F_I_LO:
96*9880d681SAndroid Build Coastguard Worker return Lanai::SUB_F_I_LO;
97*9880d681SAndroid Build Coastguard Worker case Lanai::SUB_F_I_LO:
98*9880d681SAndroid Build Coastguard Worker return Lanai::ADD_F_I_LO;
99*9880d681SAndroid Build Coastguard Worker case Lanai::ADDC_I_LO:
100*9880d681SAndroid Build Coastguard Worker return Lanai::SUBB_I_LO;
101*9880d681SAndroid Build Coastguard Worker case Lanai::SUBB_I_LO:
102*9880d681SAndroid Build Coastguard Worker return Lanai::ADDC_I_LO;
103*9880d681SAndroid Build Coastguard Worker case Lanai::ADDC_F_I_LO:
104*9880d681SAndroid Build Coastguard Worker return Lanai::SUBB_F_I_LO;
105*9880d681SAndroid Build Coastguard Worker case Lanai::SUBB_F_I_LO:
106*9880d681SAndroid Build Coastguard Worker return Lanai::ADDC_F_I_LO;
107*9880d681SAndroid Build Coastguard Worker default:
108*9880d681SAndroid Build Coastguard Worker llvm_unreachable("Invalid ALU lo opcode");
109*9880d681SAndroid Build Coastguard Worker }
110*9880d681SAndroid Build Coastguard Worker }
111*9880d681SAndroid Build Coastguard Worker
getRRMOpcodeVariant(unsigned Opcode)112*9880d681SAndroid Build Coastguard Worker static unsigned getRRMOpcodeVariant(unsigned Opcode) {
113*9880d681SAndroid Build Coastguard Worker switch (Opcode) {
114*9880d681SAndroid Build Coastguard Worker case Lanai::LDBs_RI:
115*9880d681SAndroid Build Coastguard Worker return Lanai::LDBs_RR;
116*9880d681SAndroid Build Coastguard Worker case Lanai::LDBz_RI:
117*9880d681SAndroid Build Coastguard Worker return Lanai::LDBz_RR;
118*9880d681SAndroid Build Coastguard Worker case Lanai::LDHs_RI:
119*9880d681SAndroid Build Coastguard Worker return Lanai::LDHs_RR;
120*9880d681SAndroid Build Coastguard Worker case Lanai::LDHz_RI:
121*9880d681SAndroid Build Coastguard Worker return Lanai::LDHz_RR;
122*9880d681SAndroid Build Coastguard Worker case Lanai::LDW_RI:
123*9880d681SAndroid Build Coastguard Worker return Lanai::LDW_RR;
124*9880d681SAndroid Build Coastguard Worker case Lanai::STB_RI:
125*9880d681SAndroid Build Coastguard Worker return Lanai::STB_RR;
126*9880d681SAndroid Build Coastguard Worker case Lanai::STH_RI:
127*9880d681SAndroid Build Coastguard Worker return Lanai::STH_RR;
128*9880d681SAndroid Build Coastguard Worker case Lanai::SW_RI:
129*9880d681SAndroid Build Coastguard Worker return Lanai::SW_RR;
130*9880d681SAndroid Build Coastguard Worker default:
131*9880d681SAndroid Build Coastguard Worker llvm_unreachable("Opcode has no RRM variant");
132*9880d681SAndroid Build Coastguard Worker }
133*9880d681SAndroid Build Coastguard Worker }
134*9880d681SAndroid Build Coastguard Worker
eliminateFrameIndex(MachineBasicBlock::iterator II,int SPAdj,unsigned FIOperandNum,RegScavenger * RS) const135*9880d681SAndroid Build Coastguard Worker void LanaiRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
136*9880d681SAndroid Build Coastguard Worker int SPAdj, unsigned FIOperandNum,
137*9880d681SAndroid Build Coastguard Worker RegScavenger *RS) const {
138*9880d681SAndroid Build Coastguard Worker assert(SPAdj == 0 && "Unexpected");
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker MachineInstr &MI = *II;
141*9880d681SAndroid Build Coastguard Worker MachineFunction &MF = *MI.getParent()->getParent();
142*9880d681SAndroid Build Coastguard Worker const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo();
143*9880d681SAndroid Build Coastguard Worker const TargetFrameLowering *TFI = MF.getSubtarget().getFrameLowering();
144*9880d681SAndroid Build Coastguard Worker bool HasFP = TFI->hasFP(MF);
145*9880d681SAndroid Build Coastguard Worker DebugLoc DL = MI.getDebugLoc();
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker int FrameIndex = MI.getOperand(FIOperandNum).getIndex();
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker int Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex) +
150*9880d681SAndroid Build Coastguard Worker MI.getOperand(FIOperandNum + 1).getImm();
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker // Addressable stack objects are addressed using neg. offsets from fp
153*9880d681SAndroid Build Coastguard Worker // or pos. offsets from sp/basepointer
154*9880d681SAndroid Build Coastguard Worker if (!HasFP || (needsStackRealignment(MF) && FrameIndex >= 0))
155*9880d681SAndroid Build Coastguard Worker Offset += MF.getFrameInfo()->getStackSize();
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker unsigned FrameReg = getFrameRegister(MF);
158*9880d681SAndroid Build Coastguard Worker if (FrameIndex >= 0) {
159*9880d681SAndroid Build Coastguard Worker if (hasBasePointer(MF))
160*9880d681SAndroid Build Coastguard Worker FrameReg = getBaseRegister();
161*9880d681SAndroid Build Coastguard Worker else if (needsStackRealignment(MF))
162*9880d681SAndroid Build Coastguard Worker FrameReg = Lanai::SP;
163*9880d681SAndroid Build Coastguard Worker }
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Worker // Replace frame index with a frame pointer reference.
166*9880d681SAndroid Build Coastguard Worker // If the offset is small enough to fit in the immediate field, directly
167*9880d681SAndroid Build Coastguard Worker // encode it.
168*9880d681SAndroid Build Coastguard Worker // Otherwise scavenge a register and encode it into a MOVHI, OR_I_LO sequence.
169*9880d681SAndroid Build Coastguard Worker if ((isSPLSOpcode(MI.getOpcode()) && !isInt<10>(Offset)) ||
170*9880d681SAndroid Build Coastguard Worker !isInt<16>(Offset)) {
171*9880d681SAndroid Build Coastguard Worker assert(RS && "Register scavenging must be on");
172*9880d681SAndroid Build Coastguard Worker unsigned Reg = RS->FindUnusedReg(&Lanai::GPRRegClass);
173*9880d681SAndroid Build Coastguard Worker if (!Reg)
174*9880d681SAndroid Build Coastguard Worker Reg = RS->scavengeRegister(&Lanai::GPRRegClass, II, SPAdj);
175*9880d681SAndroid Build Coastguard Worker assert(Reg && "Register scavenger failed");
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Worker bool HasNegOffset = false;
178*9880d681SAndroid Build Coastguard Worker // ALU ops have unsigned immediate values. If the Offset is negative, we
179*9880d681SAndroid Build Coastguard Worker // negate it here and reverse the opcode later.
180*9880d681SAndroid Build Coastguard Worker if (Offset < 0) {
181*9880d681SAndroid Build Coastguard Worker HasNegOffset = true;
182*9880d681SAndroid Build Coastguard Worker Offset = -Offset;
183*9880d681SAndroid Build Coastguard Worker }
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker if (!isInt<16>(Offset)) {
186*9880d681SAndroid Build Coastguard Worker // Reg = hi(offset) | lo(offset)
187*9880d681SAndroid Build Coastguard Worker BuildMI(*MI.getParent(), II, DL, TII->get(Lanai::MOVHI), Reg)
188*9880d681SAndroid Build Coastguard Worker .addImm(static_cast<uint32_t>(Offset) >> 16);
189*9880d681SAndroid Build Coastguard Worker BuildMI(*MI.getParent(), II, DL, TII->get(Lanai::OR_I_LO), Reg)
190*9880d681SAndroid Build Coastguard Worker .addReg(Reg)
191*9880d681SAndroid Build Coastguard Worker .addImm(Offset & 0xffffU);
192*9880d681SAndroid Build Coastguard Worker } else {
193*9880d681SAndroid Build Coastguard Worker // Reg = mov(offset)
194*9880d681SAndroid Build Coastguard Worker BuildMI(*MI.getParent(), II, DL, TII->get(Lanai::ADD_I_LO), Reg)
195*9880d681SAndroid Build Coastguard Worker .addImm(0)
196*9880d681SAndroid Build Coastguard Worker .addImm(Offset);
197*9880d681SAndroid Build Coastguard Worker }
198*9880d681SAndroid Build Coastguard Worker // Reg = FrameReg OP Reg
199*9880d681SAndroid Build Coastguard Worker if (MI.getOpcode() == Lanai::ADD_I_LO) {
200*9880d681SAndroid Build Coastguard Worker BuildMI(*MI.getParent(), II, DL,
201*9880d681SAndroid Build Coastguard Worker HasNegOffset ? TII->get(Lanai::SUB_R) : TII->get(Lanai::ADD_R),
202*9880d681SAndroid Build Coastguard Worker MI.getOperand(0).getReg())
203*9880d681SAndroid Build Coastguard Worker .addReg(FrameReg)
204*9880d681SAndroid Build Coastguard Worker .addReg(Reg)
205*9880d681SAndroid Build Coastguard Worker .addImm(LPCC::ICC_T);
206*9880d681SAndroid Build Coastguard Worker MI.eraseFromParent();
207*9880d681SAndroid Build Coastguard Worker return;
208*9880d681SAndroid Build Coastguard Worker }
209*9880d681SAndroid Build Coastguard Worker if (isSPLSOpcode(MI.getOpcode()) || isRMOpcode(MI.getOpcode())) {
210*9880d681SAndroid Build Coastguard Worker MI.setDesc(TII->get(getRRMOpcodeVariant(MI.getOpcode())));
211*9880d681SAndroid Build Coastguard Worker if (HasNegOffset) {
212*9880d681SAndroid Build Coastguard Worker // Change the ALU op (operand 3) from LPAC::ADD (the default) to
213*9880d681SAndroid Build Coastguard Worker // LPAC::SUB with the already negated offset.
214*9880d681SAndroid Build Coastguard Worker assert((MI.getOperand(3).getImm() == LPAC::ADD) &&
215*9880d681SAndroid Build Coastguard Worker "Unexpected ALU op in RRM instruction");
216*9880d681SAndroid Build Coastguard Worker MI.getOperand(3).setImm(LPAC::SUB);
217*9880d681SAndroid Build Coastguard Worker }
218*9880d681SAndroid Build Coastguard Worker } else
219*9880d681SAndroid Build Coastguard Worker llvm_unreachable("Unexpected opcode in frame index operation");
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker MI.getOperand(FIOperandNum).ChangeToRegister(FrameReg, /*isDef=*/false);
222*9880d681SAndroid Build Coastguard Worker MI.getOperand(FIOperandNum + 1)
223*9880d681SAndroid Build Coastguard Worker .ChangeToRegister(Reg, /*isDef=*/false, /*isImp=*/false,
224*9880d681SAndroid Build Coastguard Worker /*isKill=*/true);
225*9880d681SAndroid Build Coastguard Worker return;
226*9880d681SAndroid Build Coastguard Worker }
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Worker // ALU arithmetic ops take unsigned immediates. If the offset is negative,
229*9880d681SAndroid Build Coastguard Worker // we replace the instruction with one that inverts the opcode and negates
230*9880d681SAndroid Build Coastguard Worker // the immediate.
231*9880d681SAndroid Build Coastguard Worker if ((Offset < 0) && isALUArithLoOpcode(MI.getOpcode())) {
232*9880d681SAndroid Build Coastguard Worker unsigned NewOpcode = getOppositeALULoOpcode(MI.getOpcode());
233*9880d681SAndroid Build Coastguard Worker // We know this is an ALU op, so we know the operands are as follows:
234*9880d681SAndroid Build Coastguard Worker // 0: destination register
235*9880d681SAndroid Build Coastguard Worker // 1: source register (frame register)
236*9880d681SAndroid Build Coastguard Worker // 2: immediate
237*9880d681SAndroid Build Coastguard Worker BuildMI(*MI.getParent(), II, DL, TII->get(NewOpcode),
238*9880d681SAndroid Build Coastguard Worker MI.getOperand(0).getReg())
239*9880d681SAndroid Build Coastguard Worker .addReg(FrameReg)
240*9880d681SAndroid Build Coastguard Worker .addImm(-Offset);
241*9880d681SAndroid Build Coastguard Worker MI.eraseFromParent();
242*9880d681SAndroid Build Coastguard Worker } else {
243*9880d681SAndroid Build Coastguard Worker MI.getOperand(FIOperandNum).ChangeToRegister(FrameReg, /*isDef=*/false);
244*9880d681SAndroid Build Coastguard Worker MI.getOperand(FIOperandNum + 1).ChangeToImmediate(Offset);
245*9880d681SAndroid Build Coastguard Worker }
246*9880d681SAndroid Build Coastguard Worker }
247*9880d681SAndroid Build Coastguard Worker
hasBasePointer(const MachineFunction & MF) const248*9880d681SAndroid Build Coastguard Worker bool LanaiRegisterInfo::hasBasePointer(const MachineFunction &MF) const {
249*9880d681SAndroid Build Coastguard Worker const MachineFrameInfo *MFI = MF.getFrameInfo();
250*9880d681SAndroid Build Coastguard Worker // When we need stack realignment and there are dynamic allocas, we can't
251*9880d681SAndroid Build Coastguard Worker // reference off of the stack pointer, so we reserve a base pointer.
252*9880d681SAndroid Build Coastguard Worker if (needsStackRealignment(MF) && MFI->hasVarSizedObjects())
253*9880d681SAndroid Build Coastguard Worker return true;
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Worker return false;
256*9880d681SAndroid Build Coastguard Worker }
257*9880d681SAndroid Build Coastguard Worker
getRARegister() const258*9880d681SAndroid Build Coastguard Worker unsigned LanaiRegisterInfo::getRARegister() const { return Lanai::RCA; }
259*9880d681SAndroid Build Coastguard Worker
getFrameRegister(const MachineFunction & MF) const260*9880d681SAndroid Build Coastguard Worker unsigned LanaiRegisterInfo::getFrameRegister(const MachineFunction &MF) const {
261*9880d681SAndroid Build Coastguard Worker return Lanai::FP;
262*9880d681SAndroid Build Coastguard Worker }
263*9880d681SAndroid Build Coastguard Worker
getBaseRegister() const264*9880d681SAndroid Build Coastguard Worker unsigned LanaiRegisterInfo::getBaseRegister() const { return Lanai::R14; }
265*9880d681SAndroid Build Coastguard Worker
canRealignStack(const MachineFunction & MF) const266*9880d681SAndroid Build Coastguard Worker bool LanaiRegisterInfo::canRealignStack(const MachineFunction &MF) const {
267*9880d681SAndroid Build Coastguard Worker if (!TargetRegisterInfo::canRealignStack(MF))
268*9880d681SAndroid Build Coastguard Worker return false;
269*9880d681SAndroid Build Coastguard Worker return true;
270*9880d681SAndroid Build Coastguard Worker }
271*9880d681SAndroid Build Coastguard Worker
getEHExceptionRegister() const272*9880d681SAndroid Build Coastguard Worker unsigned LanaiRegisterInfo::getEHExceptionRegister() const {
273*9880d681SAndroid Build Coastguard Worker llvm_unreachable("no exception support");
274*9880d681SAndroid Build Coastguard Worker return 0;
275*9880d681SAndroid Build Coastguard Worker }
276*9880d681SAndroid Build Coastguard Worker
getEHHandlerRegister() const277*9880d681SAndroid Build Coastguard Worker unsigned LanaiRegisterInfo::getEHHandlerRegister() const {
278*9880d681SAndroid Build Coastguard Worker llvm_unreachable("no exception support");
279*9880d681SAndroid Build Coastguard Worker return 0;
280*9880d681SAndroid Build Coastguard Worker }
281*9880d681SAndroid Build Coastguard Worker
282*9880d681SAndroid Build Coastguard Worker const uint32_t *
getCallPreservedMask(const MachineFunction & MF,CallingConv::ID CC) const283*9880d681SAndroid Build Coastguard Worker LanaiRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
284*9880d681SAndroid Build Coastguard Worker CallingConv::ID CC) const {
285*9880d681SAndroid Build Coastguard Worker return CSR_RegMask;
286*9880d681SAndroid Build Coastguard Worker }
287