mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 18:24:23 +00:00
[CaptureTracker] Provide an ordered basic block to PointerMayBeCapturedBefore
This patch is a follow up from r240560 and is a step further into mitigating the compile time performance issues in CaptureTracker. By providing the CaptureTracker with a "cached ordered basic block" instead of computing it every time, MemDepAnalysis can use this cache throughout its calls to AA->callCapturesBefore, avoiding to recompute it for every scanned instruction. In the same testcase used in r240560, compile time is reduced from 2min to 30s. This also fixes PR22348. rdar://problem/19230319 Differential Revision: http://reviews.llvm.org/D11364 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243750 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -335,13 +335,18 @@ ModRefInfo AliasAnalysis::getModRefInfo(const AtomicRMWInst *RMW,
|
||||
return MRI_ModRef;
|
||||
}
|
||||
|
||||
// FIXME: this is really just shoring-up a deficiency in alias analysis.
|
||||
// BasicAA isn't willing to spend linear time determining whether an alloca
|
||||
// was captured before or after this particular call, while we are. However,
|
||||
// with a smarter AA in place, this test is just wasting compile time.
|
||||
/// \brief Return information about whether a particular call site modifies
|
||||
/// or reads the specified memory location \p MemLoc before instruction \p I
|
||||
/// in a BasicBlock. A ordered basic block \p OBB can be used to speed up
|
||||
/// instruction-ordering queries inside the BasicBlock containing \p I.
|
||||
/// FIXME: this is really just shoring-up a deficiency in alias analysis.
|
||||
/// BasicAA isn't willing to spend linear time determining whether an alloca
|
||||
/// was captured before or after this particular call, while we are. However,
|
||||
/// with a smarter AA in place, this test is just wasting compile time.
|
||||
ModRefInfo AliasAnalysis::callCapturesBefore(const Instruction *I,
|
||||
const MemoryLocation &MemLoc,
|
||||
DominatorTree *DT) {
|
||||
DominatorTree *DT,
|
||||
OrderedBasicBlock *OBB) {
|
||||
if (!DT)
|
||||
return MRI_ModRef;
|
||||
|
||||
@ -356,7 +361,8 @@ ModRefInfo AliasAnalysis::callCapturesBefore(const Instruction *I,
|
||||
|
||||
if (llvm::PointerMayBeCapturedBefore(Object, /* ReturnCaptures */ true,
|
||||
/* StoreCaptures */ true, I, DT,
|
||||
/* include Object */ true))
|
||||
/* include Object */ true,
|
||||
/* OrderedBasicBlock */ OBB))
|
||||
return MRI_ModRef;
|
||||
|
||||
unsigned ArgNo = 0;
|
||||
|
Reference in New Issue
Block a user