Lines Matching defs:MF

52 WebAssemblyFrameLowering::getLocalForStackObject(MachineFunction &MF,
54 MachineFrameInfo &MFI = MF.getFrameInfo();
70 *MF.getSubtarget<WebAssemblySubtarget>().getTargetLowering();
71 WebAssemblyFunctionInfo *FuncInfo = MF.getInfo<WebAssemblyFunctionInfo>();
72 ComputeValueVTs(TLI, MF.getDataLayout(), AI->getAllocatedType(), ValueVTs);
91 bool WebAssemblyFrameLowering::hasBP(const MachineFunction &MF) const {
93 MF.getSubtarget<WebAssemblySubtarget>().getRegisterInfo();
94 return RegInfo->hasStackRealignment(MF);
99 bool WebAssemblyFrameLowering::hasFPImpl(const MachineFunction &MF) const {
100 const MachineFrameInfo &MFI = MF.getFrameInfo();
109 bool NeedsFixedReference = !hasBP(MF) || HasFixedSizedObjects;
122 const MachineFunction &MF) const {
123 return !MF.getFrameInfo().hasVarSizedObjects();
129 const MachineFunction &MF) const {
130 auto &MFI = MF.getFrameInfo();
131 auto &MRI = MF.getRegInfo();
135 any_of(MRI.use_operands(getSPReg(MF)),
138 return MFI.getStackSize() || MFI.adjustsStack() || hasFP(MF) ||
146 const MachineFunction &MF) const {
147 auto EHType = MF.getTarget().getMCAsmInfo()->getExceptionHandlingType();
149 MF.getFunction().hasPersonalityFn() && MF.getFrameInfo().hasCalls();
155 bool WebAssemblyFrameLowering::needsSP(const MachineFunction &MF) const {
156 return needsSPForLocalFrame(MF) || needsPrologForEH(MF);
164 const MachineFunction &MF) const {
165 auto &MFI = MF.getFrameInfo();
166 assert(needsSP(MF));
175 !MF.getFunction().hasFnAttribute(Attribute::NoRedZone);
176 return needsSPForLocalFrame(MF) && !CanUseRedZone;
179 unsigned WebAssemblyFrameLowering::getSPReg(const MachineFunction &MF) {
180 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64()
185 unsigned WebAssemblyFrameLowering::getFPReg(const MachineFunction &MF) {
186 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64()
192 WebAssemblyFrameLowering::getOpcConst(const MachineFunction &MF) {
193 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64()
198 unsigned WebAssemblyFrameLowering::getOpcAdd(const MachineFunction &MF) {
199 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64()
204 unsigned WebAssemblyFrameLowering::getOpcSub(const MachineFunction &MF) {
205 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64()
210 unsigned WebAssemblyFrameLowering::getOpcAnd(const MachineFunction &MF) {
211 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64()
217 WebAssemblyFrameLowering::getOpcGlobGet(const MachineFunction &MF) {
218 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64()
224 WebAssemblyFrameLowering::getOpcGlobSet(const MachineFunction &MF) {
225 return MF.getSubtarget<WebAssemblySubtarget>().hasAddr64()
231 unsigned SrcReg, MachineFunction &MF, MachineBasicBlock &MBB,
233 const auto *TII = MF.getSubtarget<WebAssemblySubtarget>().getInstrInfo();
236 auto *SPSymbol = MF.createExternalSymbolName(ES);
238 BuildMI(MBB, InsertStore, DL, TII->get(getOpcGlobSet(MF)))
245 MachineFunction &MF, MachineBasicBlock &MBB,
247 assert(!I->getOperand(0).getImm() && (hasFP(MF) || hasBP(MF)) &&
249 auto &ST = MF.getSubtarget<WebAssemblySubtarget>();
252 needsSPWriteback(MF)) {
254 writeSPToGlobal(getSPReg(MF), MF, MBB, I, DL);
259 void WebAssemblyFrameLowering::emitPrologue(MachineFunction &MF,
262 auto &MFI = MF.getFrameInfo();
266 if (!needsSP(MF))
270 auto &ST = MF.getSubtarget<WebAssemblySubtarget>();
272 auto &MRI = MF.getRegInfo();
281 MRI.getTargetRegisterInfo()->getPointerRegClass(MF);
282 unsigned SPReg = getSPReg(MF);
287 auto *SPSymbol = MF.createExternalSymbolName(ES);
288 BuildMI(MBB, InsertPt, DL, TII->get(getOpcGlobGet(MF)), SPReg)
291 bool HasBP = hasBP(MF);
293 auto FI = MF.getInfo<WebAssemblyFunctionInfo>();
302 BuildMI(MBB, InsertPt, DL, TII->get(getOpcConst(MF)), OffsetReg)
304 BuildMI(MBB, InsertPt, DL, TII->get(getOpcSub(MF)), getSPReg(MF))
311 BuildMI(MBB, InsertPt, DL, TII->get(getOpcConst(MF)), BitmaskReg)
313 BuildMI(MBB, InsertPt, DL, TII->get(getOpcAnd(MF)), getSPReg(MF))
314 .addReg(getSPReg(MF))
317 if (hasFP(MF)) {
321 BuildMI(MBB, InsertPt, DL, TII->get(WebAssembly::COPY), getFPReg(MF))
322 .addReg(getSPReg(MF));
324 if (StackSize && needsSPWriteback(MF)) {
325 writeSPToGlobal(getSPReg(MF), MF, MBB, InsertPt, DL);
329 void WebAssemblyFrameLowering::emitEpilogue(MachineFunction &MF,
331 uint64_t StackSize = MF.getFrameInfo().getStackSize();
332 if (!needsSP(MF) || !needsSPWriteback(MF))
334 auto &ST = MF.getSubtarget<WebAssemblySubtarget>();
336 auto &MRI = MF.getRegInfo();
346 unsigned SPFPReg = hasFP(MF) ? getFPReg(MF) : getSPReg(MF);
347 if (hasBP(MF)) {
348 auto FI = MF.getInfo<WebAssemblyFunctionInfo>();
352 MRI.getTargetRegisterInfo()->getPointerRegClass(MF);
354 BuildMI(MBB, InsertPt, DL, TII->get(getOpcConst(MF)), OffsetReg)
360 BuildMI(MBB, InsertPt, DL, TII->get(getOpcAdd(MF)), SPReg)
367 writeSPToGlobal(SPReg, MF, MBB, InsertPt, DL);
381 WebAssemblyFrameLowering::getDwarfFrameBase(const MachineFunction &MF) const {
384 const WebAssemblyFunctionInfo &MFI = *MF.getInfo<WebAssemblyFunctionInfo>();
385 if (needsSP(MF) && MFI.isFrameBaseVirtual()) {