[WebAssembly] Implement WebAssemblyInstrInfo::copyPhysReg
[oota-llvm.git] / lib / Target / WebAssembly / WebAssemblyFrameLowering.cpp
index 3d9050ae216ba787336ae8d69d2a72d6ea0d8a19..8a2cf1ad46e2fd32f9959dfdf9697bfabb596a79 100644 (file)
@@ -39,7 +39,12 @@ using namespace llvm;
 /// Return true if the specified function should have a dedicated frame pointer
 /// register.
 bool WebAssemblyFrameLowering::hasFP(const MachineFunction &MF) const {
-  llvm_unreachable("TODO: implement hasFP");
+  const MachineFrameInfo *MFI = MF.getFrameInfo();
+  const auto *RegInfo =
+      MF.getSubtarget<WebAssemblySubtarget>().getRegisterInfo();
+  return MFI->hasCalls() || MFI->hasVarSizedObjects() ||
+         MFI->isFrameAddressTaken() || MFI->hasStackMap() ||
+         MFI->hasPatchPoint() || RegInfo->needsStackRealignment(MF);
 }
 
 /// Under normal circumstances, when a frame pointer is not required, we reserve
@@ -60,16 +65,10 @@ void WebAssemblyFrameLowering::eliminateCallFramePseudoInstr(
 
 void WebAssemblyFrameLowering::emitPrologue(MachineFunction &MF,
                                             MachineBasicBlock &MBB) const {
-  llvm_unreachable("TODO: implement emitPrologue");
+  // FIXME: Implement WebAssemblyFrameLowering::emitPrologue.
 }
 
 void WebAssemblyFrameLowering::emitEpilogue(MachineFunction &MF,
                                             MachineBasicBlock &MBB) const {
   llvm_unreachable("TODO: implement emitEpilogue");
 }
-
-void WebAssemblyFrameLowering::determineCalleeSaves(MachineFunction &MF,
-                                                    BitVector &SavedRegs,
-                                                    RegScavenger *RS) const {
-  llvm_unreachable("TODO: implement determineCalleeSaves");
-}