r181957 - Cleanup: Use a member variable to store the SourceLocation for EH code.
David Blaikie
dblaikie at gmail.com
Wed May 15 17:46:48 PDT 2013
On Wed, May 15, 2013 at 5:41 PM, Adrian Prantl <aprantl at apple.com> 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130515/ecfdaa5c/attachment.html>
More information about the cfe-commits
mailing list