forked from OSchip/llvm-project
[XRay] Lazily compute MachineLoopInfo instead of requiring it.
Summary: Currently X-Ray Instrumentation pass has a dependency on MachineLoopInfo (and thus on MachineDominatorTree as well) and we have to compute them even if X-Ray is not used. This patch changes it to a lazy computation to save compile time by avoiding these redundant computations. Reviewers: dberris, kubamracek Subscribers: llvm-commits, hiraditya Differential Revision: https://reviews.llvm.org/D44666 llvm-svn: 327999
This commit is contained in:
parent
54b161e47f
commit
fb3f509e01
|
@ -52,7 +52,6 @@ struct XRayInstrumentation : public MachineFunctionPass {
|
|||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.setPreservesCFG();
|
||||
AU.addRequired<MachineLoopInfo>();
|
||||
AU.addPreserved<MachineLoopInfo>();
|
||||
AU.addPreserved<MachineDominatorTree>();
|
||||
MachineFunctionPass::getAnalysisUsage(AU);
|
||||
|
@ -160,11 +159,26 @@ bool XRayInstrumentation::runOnMachineFunction(MachineFunction &MF) {
|
|||
for (const auto &MBB : MF)
|
||||
MICount += MBB.size();
|
||||
|
||||
// Get MachineDominatorTree or compute it on the fly if it's unavailable
|
||||
auto *MDT = getAnalysisIfAvailable<MachineDominatorTree>();
|
||||
MachineDominatorTree ComputedMDT;
|
||||
if (!MDT) {
|
||||
ComputedMDT.getBase().recalculate(MF);
|
||||
MDT = &ComputedMDT;
|
||||
}
|
||||
|
||||
// Get MachineLoopInfo or compute it on the fly if it's unavailable
|
||||
auto *MLI = getAnalysisIfAvailable<MachineLoopInfo>();
|
||||
MachineLoopInfo ComputedMLI;
|
||||
if (!MLI) {
|
||||
ComputedMLI.getBase().analyze(MDT->getBase());
|
||||
MLI = &ComputedMLI;
|
||||
}
|
||||
|
||||
// Check if we have a loop.
|
||||
// FIXME: Maybe make this smarter, and see whether the loops are dependent
|
||||
// on inputs or side-effects?
|
||||
MachineLoopInfo &MLI = getAnalysis<MachineLoopInfo>();
|
||||
if (MLI.empty() && MICount < XRayThreshold)
|
||||
if (MLI->empty() && MICount < XRayThreshold)
|
||||
return false; // Function is too small and has no loops.
|
||||
}
|
||||
|
||||
|
|
|
@ -55,8 +55,6 @@
|
|||
; CHECK-NEXT: StackMap Liveness Analysis
|
||||
; CHECK-NEXT: Live DEBUG_VALUE analysis
|
||||
; CHECK-NEXT: Insert fentry calls
|
||||
; CHECK-NEXT: MachineDominator Tree Construction
|
||||
; CHECK-NEXT: Machine Natural Loop Construction
|
||||
; CHECK-NEXT: Insert XRay ops
|
||||
; CHECK-NEXT: Implement the 'patchable-function' attribute
|
||||
; CHECK-NEXT: X86 Retpoline Thunks
|
||||
|
|
Loading…
Reference in New Issue