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