X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FTarget%2FTargetFrameLowering.h;h=cadd07d71f12d8a46bc04710518ded1657277985;hb=2b762697564ca1e12e0e974e93ceeb4c3420505c;hp=3485ed6df8b4423b9d2ad0a5c5646def8223655d;hpb=3b3752c898d041fcab9455581136ebc6de921610;p=oota-llvm.git diff --git a/include/llvm/Target/TargetFrameLowering.h b/include/llvm/Target/TargetFrameLowering.h index 3485ed6df8b..cadd07d71f1 100644 --- a/include/llvm/Target/TargetFrameLowering.h +++ b/include/llvm/Target/TargetFrameLowering.h @@ -150,7 +150,7 @@ public: virtual bool enableShrinkWrapping(const MachineFunction &MF) const { return false; } - + /// emitProlog/emitEpilog - These methods insert prolog and epilog code into /// the function. virtual void emitPrologue(MachineFunction &MF, @@ -158,6 +158,10 @@ public: virtual void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const = 0; + /// Replace a StackProbe stub (if any) with the actual probe code inline + virtual void inlineStackProbe(MachineFunction &MF, + MachineBasicBlock &PrologueMBB) const {} + /// Adjust the prologue to have the function use segmented stacks. This works /// by adding a check even before the "normal" function prologue. virtual void adjustForSegmentedStacks(MachineFunction &MF, @@ -236,10 +240,11 @@ public: unsigned &FrameReg) const; /// Same as above, except that the 'base register' will always be RSP, not - /// RBP on x86. This is used exclusively for lowering STATEPOINT nodes. + /// RBP on x86. This is generally used for emitting statepoint or EH tables + /// that use offsets from RSP. /// TODO: This should really be a parameterizable choice. virtual int getFrameIndexReferenceFromSP(const MachineFunction &MF, int FI, - unsigned &FrameReg) const { + unsigned &FrameReg) const { // default to calling normal version, we override this on x86 only llvm_unreachable("unimplemented for non-x86"); return 0; @@ -264,6 +269,10 @@ public: RegScavenger *RS = nullptr) const { } + virtual unsigned getWinEHParentFrameOffset(const MachineFunction &MF) const { + report_fatal_error("WinEH not implemented for this target"); + } + /// eliminateCallFramePseudoInstr - This method is called during prolog/epilog /// code insertion to eliminate call frame setup and destroy pseudo /// instructions (but only if the Target is using them). It is responsible