Lines Matching refs:MF
54 WebAssemblyFrameLowering::getLocalForStackObject(MachineFunction &MF, in getLocalForStackObject() argument
56 MachineFrameInfo &MFI = MF.getFrameInfo(); in getLocalForStackObject()
72 *MF.getSubtarget<WebAssemblySubtarget>().getTargetLowering(); in getLocalForStackObject()
73 WebAssemblyFunctionInfo *FuncInfo = MF.getInfo<WebAssemblyFunctionInfo>(); in getLocalForStackObject()
74 ComputeValueVTs(TLI, MF.getDataLayout(), AI->getAllocatedType(), ValueVTs); in getLocalForStackObject()
93 bool WebAssemblyFrameLowering::hasBP(const MachineFunction &MF) const { in hasBP()
95 MF.getSubtarget<WebAssemblySubtarget>().getRegisterInfo(); in hasBP()
96 return RegInfo->hasStackRealignment(MF); in hasBP()
101 bool WebAssemblyFrameLowering::hasFP(const MachineFunction &MF) const { in hasFP()
102 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasFP()
111 bool NeedsFixedReference = !hasBP(MF) || HasFixedSizedObjects; in hasFP()
124 const MachineFunction &MF) const { in hasReservedCallFrame()
125 return !MF.getFrameInfo().hasVarSizedObjects(); in hasReservedCallFrame()
131 const MachineFunction &MF) const { in needsSPForLocalFrame()
132 auto &MFI = MF.getFrameInfo(); in needsSPForLocalFrame()
133 auto &MRI = MF.getRegInfo(); in needsSPForLocalFrame()
137 any_of(MRI.use_operands(getSPReg(MF)), in needsSPForLocalFrame()
140 return MFI.getStackSize() || MFI.adjustsStack() || hasFP(MF) || in needsSPForLocalFrame()
148 const MachineFunction &MF) const { in needsPrologForEH()
149 auto EHType = MF.getTarget().getMCAsmInfo()->getExceptionHandlingType(); in needsPrologForEH()
151 MF.getFunction().hasPersonalityFn() && MF.getFrameInfo().hasCalls(); in needsPrologForEH()
157 bool WebAssemblyFrameLowering::needsSP(const MachineFunction &MF) const { in needsSP()
158 return needsSPForLocalFrame(MF) || needsPrologForEH(MF); in needsSP()
166 const MachineFunction &MF) const { in needsSPWriteback()
167 auto &MFI = MF.getFrameInfo(); in needsSPWriteback()
168 assert(needsSP(MF)); in needsSPWriteback()
177 !MF.getFunction().hasFnAttribute(Attribute::NoRedZone); in needsSPWriteback()
178 return needsSPForLocalFrame(MF) && !CanUseRedZone; in needsSPWriteback()
181 unsigned WebAssemblyFrameLowering::getSPReg(const MachineFunction &MF) { in getSPReg() argument
182 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64() in getSPReg()
187 unsigned WebAssemblyFrameLowering::getFPReg(const MachineFunction &MF) { in getFPReg() argument
188 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64() in getFPReg()
194 WebAssemblyFrameLowering::getOpcConst(const MachineFunction &MF) { in getOpcConst() argument
195 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64() in getOpcConst()
200 unsigned WebAssemblyFrameLowering::getOpcAdd(const MachineFunction &MF) { in getOpcAdd() argument
201 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64() in getOpcAdd()
206 unsigned WebAssemblyFrameLowering::getOpcSub(const MachineFunction &MF) { in getOpcSub() argument
207 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64() in getOpcSub()
212 unsigned WebAssemblyFrameLowering::getOpcAnd(const MachineFunction &MF) { in getOpcAnd() argument
213 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64() in getOpcAnd()
219 WebAssemblyFrameLowering::getOpcGlobGet(const MachineFunction &MF) { in getOpcGlobGet() argument
220 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64() in getOpcGlobGet()
226 WebAssemblyFrameLowering::getOpcGlobSet(const MachineFunction &MF) { in getOpcGlobSet() argument
227 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64() in getOpcGlobSet()
233 unsigned SrcReg, MachineFunction &MF, MachineBasicBlock &MBB, in writeSPToGlobal() argument
235 const auto *TII = MF.getSubtarget<WebAssemblySubtarget>().getInstrInfo(); in writeSPToGlobal()
238 auto *SPSymbol = MF.createExternalSymbolName(ES); in writeSPToGlobal()
240 BuildMI(MBB, InsertStore, DL, TII->get(getOpcGlobSet(MF))) in writeSPToGlobal()
247 MachineFunction &MF, MachineBasicBlock &MBB, in eliminateCallFramePseudoInstr() argument
249 assert(!I->getOperand(0).getImm() && (hasFP(MF) || hasBP(MF)) && in eliminateCallFramePseudoInstr()
251 auto &ST = MF.getSubtarget<WebAssemblySubtarget>(); in eliminateCallFramePseudoInstr()
254 needsSPWriteback(MF)) { in eliminateCallFramePseudoInstr()
256 writeSPToGlobal(getSPReg(MF), MF, MBB, I, DL); in eliminateCallFramePseudoInstr()
261 void WebAssemblyFrameLowering::emitPrologue(MachineFunction &MF, in emitPrologue() argument
264 auto &MFI = MF.getFrameInfo(); in emitPrologue()
268 if (!needsSP(MF)) in emitPrologue()
272 auto &ST = MF.getSubtarget<WebAssemblySubtarget>(); in emitPrologue()
274 auto &MRI = MF.getRegInfo(); in emitPrologue()
283 MRI.getTargetRegisterInfo()->getPointerRegClass(MF); in emitPrologue()
284 unsigned SPReg = getSPReg(MF); in emitPrologue()
289 auto *SPSymbol = MF.createExternalSymbolName(ES); in emitPrologue()
290 BuildMI(MBB, InsertPt, DL, TII->get(getOpcGlobGet(MF)), SPReg) in emitPrologue()
293 bool HasBP = hasBP(MF); in emitPrologue()
295 auto FI = MF.getInfo<WebAssemblyFunctionInfo>(); in emitPrologue()
304 BuildMI(MBB, InsertPt, DL, TII->get(getOpcConst(MF)), OffsetReg) in emitPrologue()
306 BuildMI(MBB, InsertPt, DL, TII->get(getOpcSub(MF)), getSPReg(MF)) in emitPrologue()
313 BuildMI(MBB, InsertPt, DL, TII->get(getOpcConst(MF)), BitmaskReg) in emitPrologue()
315 BuildMI(MBB, InsertPt, DL, TII->get(getOpcAnd(MF)), getSPReg(MF)) in emitPrologue()
316 .addReg(getSPReg(MF)) in emitPrologue()
319 if (hasFP(MF)) { in emitPrologue()
323 BuildMI(MBB, InsertPt, DL, TII->get(WebAssembly::COPY), getFPReg(MF)) in emitPrologue()
324 .addReg(getSPReg(MF)); in emitPrologue()
326 if (StackSize && needsSPWriteback(MF)) { in emitPrologue()
327 writeSPToGlobal(getSPReg(MF), MF, MBB, InsertPt, DL); in emitPrologue()
331 void WebAssemblyFrameLowering::emitEpilogue(MachineFunction &MF, in emitEpilogue() argument
333 uint64_t StackSize = MF.getFrameInfo().getStackSize(); in emitEpilogue()
334 if (!needsSP(MF) || !needsSPWriteback(MF)) in emitEpilogue()
336 auto &ST = MF.getSubtarget<WebAssemblySubtarget>(); in emitEpilogue()
338 auto &MRI = MF.getRegInfo(); in emitEpilogue()
348 unsigned SPFPReg = hasFP(MF) ? getFPReg(MF) : getSPReg(MF); in emitEpilogue()
349 if (hasBP(MF)) { in emitEpilogue()
350 auto FI = MF.getInfo<WebAssemblyFunctionInfo>(); in emitEpilogue()
354 MRI.getTargetRegisterInfo()->getPointerRegClass(MF); in emitEpilogue()
356 BuildMI(MBB, InsertPt, DL, TII->get(getOpcConst(MF)), OffsetReg) in emitEpilogue()
362 BuildMI(MBB, InsertPt, DL, TII->get(getOpcAdd(MF)), SPReg) in emitEpilogue()
369 writeSPToGlobal(SPReg, MF, MBB, InsertPt, DL); in emitEpilogue()
383 WebAssemblyFrameLowering::getDwarfFrameBase(const MachineFunction &MF) const { in getDwarfFrameBase()
386 const WebAssemblyFunctionInfo &MFI = *MF.getInfo<WebAssemblyFunctionInfo>(); in getDwarfFrameBase()
387 if (needsSP(MF) && MFI.isFrameBaseVirtual()) { in getDwarfFrameBase()