On Wed, May 15, 2013 at 5:41 PM, Adrian Prantl <[email protected]> wrote:
> Author: adrian > Date: Wed May 15 19:41:26 2013 > New Revision: 181957 > > URL: http://llvm.org/viewvc/llvm-project?rev=181957&view=rev > Log: > Cleanup: Use a member variable to store the SourceLocation for EH code. > rdar://problem/13888152 > What's the actual bug this is addressing? A performance problem due to recomputing the location? Or a correctness issue? (in which case a test case would be nice) > > Modified: > cfe/trunk/lib/CodeGen/CGCleanup.cpp > cfe/trunk/lib/CodeGen/CodeGenFunction.cpp > cfe/trunk/lib/CodeGen/CodeGenFunction.h > > Modified: cfe/trunk/lib/CodeGen/CGCleanup.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCleanup.cpp?rev=181957&r1=181956&r2=181957&view=diff > > ============================================================================== > --- cfe/trunk/lib/CodeGen/CGCleanup.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGCleanup.cpp Wed May 15 19:41:26 2013 > @@ -371,8 +371,7 @@ void CodeGenFunction::ResolveBranchFixup > } > > /// Pops cleanup blocks until the given savepoint is reached. > -void CodeGenFunction::PopCleanupBlocks(EHScopeStack::stable_iterator Old, > - SourceLocation EHLoc) { > +void CodeGenFunction::PopCleanupBlocks(EHScopeStack::stable_iterator Old) > { > assert(Old.isValid()); > > while (EHStack.stable_begin() != Old) { > @@ -384,7 +383,7 @@ void CodeGenFunction::PopCleanupBlocks(E > bool FallThroughIsBranchThrough = > Old.strictlyEncloses(Scope.getEnclosingNormalCleanup()); > > - PopCleanupBlock(FallThroughIsBranchThrough, EHLoc); > + PopCleanupBlock(FallThroughIsBranchThrough); > } > } > > @@ -533,8 +532,7 @@ static void destroyOptimisticNormalEntry > /// Pops a cleanup block. If the block includes a normal cleanup, the > /// current insertion point is threaded through the cleanup, as are > /// any branch fixups on the cleanup. > -void CodeGenFunction::PopCleanupBlock(bool FallthroughIsBranchThrough, > - SourceLocation EHLoc) { > +void CodeGenFunction::PopCleanupBlock(bool FallthroughIsBranchThrough) { > assert(!EHStack.empty() && "cleanup stack is empty!"); > assert(isa<EHCleanupScope>(*EHStack.begin()) && "top not a cleanup!"); > EHCleanupScope &Scope = cast<EHCleanupScope>(*EHStack.begin()); > @@ -836,7 +834,7 @@ void CodeGenFunction::PopCleanupBlock(bo > // Emit the EH cleanup if required. > if (RequiresEHCleanup) { > if (CGDebugInfo *DI = getDebugInfo()) > - DI->EmitLocation(Builder, EHLoc); > + DI->EmitLocation(Builder, CurEHLocation); > > CGBuilderTy::InsertPoint SavedIP = Builder.saveAndClearIP(); > > > Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=181957&r1=181956&r2=181957&view=diff > > ============================================================================== > --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original) > +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Wed May 15 19:41:26 2013 > @@ -209,7 +209,7 @@ void CodeGenFunction::FinishFunction(Sou > // edges will be *really* confused. > bool EmitRetDbgLoc = true; > if (EHStack.stable_begin() != PrologueCleanupDepth) { > - PopCleanupBlocks(PrologueCleanupDepth, EndLoc); > + PopCleanupBlocks(PrologueCleanupDepth); > > // Make sure the line table doesn't jump back into the body for > // the ret after it's been at EndLoc. > @@ -666,6 +666,7 @@ void CodeGenFunction::GenerateCode(Globa > > SourceRange BodyRange; > if (Stmt *Body = FD->getBody()) BodyRange = Body->getSourceRange(); > + CurEHLocation = BodyRange.getEnd(); > > // CalleeWithThisReturn keeps track of the last callee inside this > function > // that returns 'this'. Before starting the function, we set it to null. > > Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=181957&r1=181956&r2=181957&view=diff > > ============================================================================== > --- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original) > +++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Wed May 15 19:41:26 2013 > @@ -844,9 +844,7 @@ public: > > /// PopCleanupBlock - Will pop the cleanup entry on the stack and > /// process all branch fixups. > - /// \param EHLoc - Optional debug location for EH code. > - void PopCleanupBlock(bool FallThroughIsBranchThrough = false, > - SourceLocation EHLoc=SourceLocation()); > + void PopCleanupBlock(bool FallThroughIsBranchThrough = false); > > /// DeactivateCleanupBlock - Deactivates the given cleanup block. > /// The block cannot be reactivated. Pops it if it's the top of the > @@ -967,9 +965,7 @@ public: > > /// PopCleanupBlocks - Takes the old cleanup stack size and emits > /// the cleanup blocks that have been added. > - /// \param EHLoc - Optional debug location for EH code. > - void PopCleanupBlocks(EHScopeStack::stable_iterator OldCleanupStackSize, > - SourceLocation EHLoc=SourceLocation()); > + void PopCleanupBlocks(EHScopeStack::stable_iterator > OldCleanupStackSize); > > void ResolveBranchFixups(llvm::BasicBlock *Target); > > @@ -1339,6 +1335,10 @@ private: > /// The current lexical scope. > LexicalScope *CurLexicalScope; > > + /// The current source location that should be used for exception > + /// handling code. > + SourceLocation CurEHLocation; > + > /// ByrefValueInfoMap - For each __block variable, contains a pair of > the LLVM > /// type as well as the field number that contains the actual data. > llvm::DenseMap<const ValueDecl *, std::pair<llvm::Type *, > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
