|
@@ -25,6 +25,7 @@
|
|
|
#include "llvm/CodeGen/MachineInstr.h"
|
|
|
#include "llvm/CodeGen/MachineLoopInfo.h"
|
|
|
#include "llvm/CodeGen/MachineModuleInfo.h"
|
|
|
+#include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h"
|
|
|
#include "llvm/CodeGen/MachineRegisterInfo.h"
|
|
|
#include "llvm/CodeGen/Passes.h"
|
|
|
#include "llvm/CodeGen/RegisterScavenging.h"
|
|
@@ -98,6 +99,9 @@ private:
|
|
|
// FrameIndexVirtualScavenging is used.
|
|
|
bool FrameIndexEliminationScavenging;
|
|
|
|
|
|
+ // Emit remarks.
|
|
|
+ MachineOptimizationRemarkEmitter *ORE = nullptr;
|
|
|
+
|
|
|
void calculateCallFrameInfo(MachineFunction &Fn);
|
|
|
void calculateSaveRestoreBlocks(MachineFunction &Fn);
|
|
|
void doSpillCalleeSavedRegs(MachineFunction &MF);
|
|
@@ -122,6 +126,7 @@ INITIALIZE_PASS_BEGIN(PEI, DEBUG_TYPE, "Prologue/Epilogue Insertion", false,
|
|
|
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
|
|
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
|
|
INITIALIZE_PASS_DEPENDENCY(StackProtector)
|
|
|
+INITIALIZE_PASS_DEPENDENCY(MachineOptimizationRemarkEmitterPass)
|
|
|
INITIALIZE_PASS_END(PEI, DEBUG_TYPE,
|
|
|
"Prologue/Epilogue Insertion & Frame Finalization", false,
|
|
|
false)
|
|
@@ -138,6 +143,7 @@ void PEI::getAnalysisUsage(AnalysisUsage &AU) const {
|
|
|
AU.addPreserved<MachineLoopInfo>();
|
|
|
AU.addPreserved<MachineDominatorTree>();
|
|
|
AU.addRequired<StackProtector>();
|
|
|
+ AU.addRequired<MachineOptimizationRemarkEmitterPass>();
|
|
|
MachineFunctionPass::getAnalysisUsage(AU);
|
|
|
}
|
|
|
|
|
@@ -171,6 +177,7 @@ bool PEI::runOnMachineFunction(MachineFunction &Fn) {
|
|
|
FrameIndexVirtualScavenging = TRI->requiresFrameIndexScavenging(Fn);
|
|
|
FrameIndexEliminationScavenging = (RS && !FrameIndexVirtualScavenging) ||
|
|
|
TRI->requiresFrameIndexReplacementScavenging(Fn);
|
|
|
+ ORE = &getAnalysis<MachineOptimizationRemarkEmitterPass>().getORE();
|
|
|
|
|
|
// Calculate the MaxCallFrameSize and AdjustsStack variables for the
|
|
|
// function's frame information. Also eliminates call frame pseudo
|
|
@@ -938,6 +945,12 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &Fn) {
|
|
|
int64_t StackSize = Offset - LocalAreaOffset;
|
|
|
MFI.setStackSize(StackSize);
|
|
|
NumBytesStackSpace += StackSize;
|
|
|
+
|
|
|
+ MachineOptimizationRemarkAnalysis R(
|
|
|
+ DEBUG_TYPE, "StackSize", Fn.getFunction()->getSubprogram(), &Fn.front());
|
|
|
+ R << ore::NV("NumStackBytes", static_cast<unsigned>(StackSize))
|
|
|
+ << " stack bytes in function";
|
|
|
+ ORE->emit(R);
|
|
|
}
|
|
|
|
|
|
/// insertPrologEpilogCode - Scan the function for modified callee saved
|