r189277 - Simplify/clean up debug info suppression in CodeGenFunction

David Blaikie dblaikie at gmail.com
Mon Aug 26 13:39:05 PDT 2013


On Mon, Aug 26, 2013 at 1:33 PM, David Blaikie <dblaikie at gmail.com> wrote:
> Author: dblaikie
> Date: Mon Aug 26 15:33:21 2013
> New Revision: 189277
>
> URL: http://llvm.org/viewvc/llvm-project?rev=189277&view=rev
> Log:
> Simplify/clean up debug info suppression in CodeGenFunction
>
> CodeGenFunction is run on only one function - a new object is made for
> each new function. I would add an assertion/flag to this effect, but
> there's an exception: ObjC properties involve emitting helper functions
> that are all emitted by the same CodeGenFunction object, so such a check
> is not possible/correct.

Accidentally committed parts of the test case in r189276.

>
> Modified:
>     cfe/trunk/lib/CodeGen/CGBlocks.cpp
>     cfe/trunk/lib/CodeGen/CGDeclCXX.cpp
>     cfe/trunk/lib/CodeGen/CGObjC.cpp
>     cfe/trunk/lib/CodeGen/CGStmt.cpp
>     cfe/trunk/lib/CodeGen/CGVTables.cpp
>     cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
>     cfe/trunk/lib/CodeGen/CodeGenFunction.h
>     cfe/trunk/test/CodeGenCXX/debug-info-globalinit.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGBlocks.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBlocks.cpp?rev=189277&r1=189276&r2=189277&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGBlocks.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGBlocks.cpp Mon Aug 26 15:33:21 2013
> @@ -1089,8 +1089,6 @@ CodeGenFunction::GenerateBlockFunction(G
>                                         bool IsLambdaConversionToBlock) {
>    const BlockDecl *blockDecl = blockInfo.getBlockDecl();
>
> -  // Check if we should generate debug info for this block function.
> -  maybeInitializeDebugInfo();
>    CurGD = GD;
>
>    BlockInfo = &blockInfo;
> @@ -1303,9 +1301,6 @@ CodeGenFunction::GenerateCopyHelperFunct
>    IdentifierInfo *II
>      = &CGM.getContext().Idents.get("__copy_helper_block_");
>
> -  // Check if we should generate debug info for this block helper function.
> -  maybeInitializeDebugInfo();
> -
>    FunctionDecl *FD = FunctionDecl::Create(C,
>                                            C.getTranslationUnitDecl(),
>                                            SourceLocation(),
> @@ -1478,9 +1473,6 @@ CodeGenFunction::GenerateDestroyHelperFu
>      llvm::Function::Create(LTy, llvm::GlobalValue::InternalLinkage,
>                             "__destroy_helper_block_", &CGM.getModule());
>
> -  // Check if we should generate debug info for this block destroy function.
> -  maybeInitializeDebugInfo();
> -
>    IdentifierInfo *II
>      = &CGM.getContext().Idents.get("__destroy_helper_block_");
>
> @@ -1783,8 +1775,6 @@ generateByrefCopyHelper(CodeGenFunction
>                                            SC_Static,
>                                            false, false);
>
> -  // Initialize debug info if necessary.
> -  CGF.maybeInitializeDebugInfo();
>    CGF.StartFunction(FD, R, Fn, FI, args, SourceLocation());
>
>    if (byrefInfo.needsCopy()) {
> @@ -1856,8 +1846,6 @@ generateByrefDisposeHelper(CodeGenFuncti
>                                            SourceLocation(), II, R, 0,
>                                            SC_Static,
>                                            false, false);
> -  // Initialize debug info if necessary.
> -  CGF.maybeInitializeDebugInfo();
>    CGF.StartFunction(FD, R, Fn, FI, args, SourceLocation());
>
>    if (byrefInfo.needsDispose()) {
>
> Modified: cfe/trunk/lib/CodeGen/CGDeclCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDeclCXX.cpp?rev=189277&r1=189276&r2=189277&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDeclCXX.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Mon Aug 26 15:33:21 2013
> @@ -172,9 +172,6 @@ static llvm::Constant *createAtExitStub(
>
>    CodeGenFunction CGF(CGM);
>
> -  // Initialize debug info if needed.
> -  CGF.maybeInitializeDebugInfo();
> -
>    CGF.StartFunction(GlobalDecl(), CGM.getContext().VoidTy, fn,
>                      CGM.getTypes().arrangeNullaryFunction(),
>                      FunctionArgList(), SourceLocation());
> @@ -399,8 +396,8 @@ void CodeGenFunction::GenerateCXXGlobalV
>                                                   llvm::GlobalVariable *Addr,
>                                                         bool PerformInit) {
>    // Check if we need to emit debug info for variable initializer.
> -  if (!D->hasAttr<NoDebugAttr>())
> -    maybeInitializeDebugInfo();
> +  if (D->hasAttr<NoDebugAttr>())
> +    DebugInfo = NULL; // disable debug info indefinitely for this function
>
>    StartFunction(GlobalDecl(D), getContext().VoidTy, Fn,
>                  getTypes().arrangeNullaryFunction(),
> @@ -423,9 +420,6 @@ void
>  CodeGenFunction::GenerateCXXGlobalInitFunc(llvm::Function *Fn,
>                                             ArrayRef<llvm::Constant *> Decls,
>                                             llvm::GlobalVariable *Guard) {
> -  // Initialize debug info if needed.
> -  maybeInitializeDebugInfo();
> -
>    StartFunction(GlobalDecl(), getContext().VoidTy, Fn,
>                  getTypes().arrangeNullaryFunction(),
>                  FunctionArgList(), SourceLocation());
> @@ -472,9 +466,6 @@ CodeGenFunction::GenerateCXXGlobalInitFu
>  void CodeGenFunction::GenerateCXXGlobalDtorsFunc(llvm::Function *Fn,
>                    const std::vector<std::pair<llvm::WeakVH, llvm::Constant*> >
>                                                  &DtorsAndObjects) {
> -  // Initialize debug info if needed.
> -  maybeInitializeDebugInfo();
> -
>    StartFunction(GlobalDecl(), getContext().VoidTy, Fn,
>                  getTypes().arrangeNullaryFunction(),
>                  FunctionArgList(), SourceLocation());
> @@ -511,9 +502,6 @@ CodeGenFunction::generateDestroyHelper(l
>    llvm::Function *fn =
>      CreateGlobalInitOrDestructFunction(CGM, FTy, "__cxx_global_array_dtor");
>
> -  // Initialize debug info if needed.
> -  maybeInitializeDebugInfo();
> -
>    StartFunction(GlobalDecl(), getContext().VoidTy, fn, FI, args,
>                  SourceLocation());
>
>
> Modified: cfe/trunk/lib/CodeGen/CGObjC.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp?rev=189277&r1=189276&r2=189277&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGObjC.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGObjC.cpp Mon Aug 26 15:33:21 2013
> @@ -468,8 +468,8 @@ void CodeGenFunction::StartObjCMethod(co
>                                        SourceLocation StartLoc) {
>    FunctionArgList args;
>    // Check if we should generate debug info for this method.
> -  if (!OMD->hasAttr<NoDebugAttr>())
> -    maybeInitializeDebugInfo();
> +  if (OMD->hasAttr<NoDebugAttr>())
> +    DebugInfo = NULL; // disable debug info indefinitely for this function
>
>    llvm::Function *Fn = CGM.getObjCRuntime().GenerateMethod(OMD, CD);
>
> @@ -2905,9 +2905,6 @@ CodeGenFunction::GenerateObjCAtomicSette
>                             "__assign_helper_atomic_property_",
>                             &CGM.getModule());
>
> -  // Initialize debug info if needed.
> -  maybeInitializeDebugInfo();
> -
>    StartFunction(FD, C.VoidTy, Fn, FI, args, SourceLocation());
>
>    DeclRefExpr DstExpr(&dstDecl, false, DestTy,
> @@ -2988,9 +2985,6 @@ CodeGenFunction::GenerateObjCAtomicGette
>    llvm::Function::Create(LTy, llvm::GlobalValue::InternalLinkage,
>                           "__copy_helper_atomic_property_", &CGM.getModule());
>
> -  // Initialize debug info if needed.
> -  maybeInitializeDebugInfo();
> -
>    StartFunction(FD, C.VoidTy, Fn, FI, args, SourceLocation());
>
>    DeclRefExpr SrcExpr(&srcDecl, false, SrcTy,
>
> Modified: cfe/trunk/lib/CodeGen/CGStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmt.cpp?rev=189277&r1=189276&r2=189277&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGStmt.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGStmt.cpp Mon Aug 26 15:33:21 2013
> @@ -1817,9 +1817,6 @@ CodeGenFunction::GenerateCapturedStmtFun
>    assert(CapturedStmtInfo &&
>      "CapturedStmtInfo should be set when generating the captured function");
>
> -  // Check if we should generate debug info for this function.
> -  maybeInitializeDebugInfo();
> -
>    // Build the argument list.
>    ASTContext &Ctx = CGM.getContext();
>    FunctionArgList Args;
>
> Modified: cfe/trunk/lib/CodeGen/CGVTables.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGVTables.cpp?rev=189277&r1=189276&r2=189277&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGVTables.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGVTables.cpp Mon Aug 26 15:33:21 2013
> @@ -315,9 +315,6 @@ void CodeGenFunction::GenerateThunk(llvm
>      FunctionArgs.push_back(Param);
>    }
>
> -  // Initialize debug info if needed.
> -  maybeInitializeDebugInfo();
> -
>    StartFunction(GlobalDecl(), ResultType, Fn, FnInfo, FunctionArgs,
>                  SourceLocation());
>
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=189277&r1=189276&r2=189277&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Mon Aug 26 15:33:21 2013
> @@ -31,25 +31,23 @@ using namespace clang;
>  using namespace CodeGen;
>
>  CodeGenFunction::CodeGenFunction(CodeGenModule &cgm, bool suppressNewContext)
> -  : CodeGenTypeCache(cgm), CGM(cgm), Target(cgm.getTarget()),
> -    Builder(cgm.getModule().getContext()),
> -    CapturedStmtInfo(0),
> -    SanitizePerformTypeCheck(CGM.getSanOpts().Null |
> -                             CGM.getSanOpts().Alignment |
> -                             CGM.getSanOpts().ObjectSize |
> -                             CGM.getSanOpts().Vptr),
> -    SanOpts(&CGM.getSanOpts()),
> -    AutoreleaseResult(false), BlockInfo(0), BlockPointer(0),
> -    LambdaThisCaptureField(0), NormalCleanupDest(0), NextCleanupDestIndex(1),
> -    FirstBlockInfo(0), EHResumeBlock(0), ExceptionSlot(0), EHSelectorSlot(0),
> -    DebugInfo(0), DisableDebugInfo(false), DidCallStackSave(false),
> -    IndirectBranch(0), SwitchInsn(0), CaseRangeBlock(0), UnreachableBlock(0),
> -    NumReturnExprs(0), NumSimpleReturnExprs(0),
> -    CXXABIThisDecl(0), CXXABIThisValue(0), CXXThisValue(0),
> -    CXXDefaultInitExprThis(0),
> -    CXXStructorImplicitParamDecl(0), CXXStructorImplicitParamValue(0),
> -    OutermostConditional(0), CurLexicalScope(0), TerminateLandingPad(0),
> -    TerminateHandler(0), TrapBB(0) {
> +    : CodeGenTypeCache(cgm), CGM(cgm), Target(cgm.getTarget()),
> +      Builder(cgm.getModule().getContext()), CapturedStmtInfo(0),
> +      SanitizePerformTypeCheck(CGM.getSanOpts().Null |
> +                               CGM.getSanOpts().Alignment |
> +                               CGM.getSanOpts().ObjectSize |
> +                               CGM.getSanOpts().Vptr),
> +      SanOpts(&CGM.getSanOpts()), AutoreleaseResult(false), BlockInfo(0),
> +      BlockPointer(0), LambdaThisCaptureField(0), NormalCleanupDest(0),
> +      NextCleanupDestIndex(1), FirstBlockInfo(0), EHResumeBlock(0),
> +      ExceptionSlot(0), EHSelectorSlot(0), DebugInfo(CGM.getModuleDebugInfo()),
> +      DisableDebugInfo(false), DidCallStackSave(false), IndirectBranch(0),
> +      SwitchInsn(0), CaseRangeBlock(0), UnreachableBlock(0), NumReturnExprs(0),
> +      NumSimpleReturnExprs(0), CXXABIThisDecl(0), CXXABIThisValue(0),
> +      CXXThisValue(0), CXXDefaultInitExprThis(0),
> +      CXXStructorImplicitParamDecl(0), CXXStructorImplicitParamValue(0),
> +      OutermostConditional(0), CurLexicalScope(0), TerminateLandingPad(0),
> +      TerminateHandler(0), TrapBB(0) {
>    if (!suppressNewContext)
>      CGM.getCXXABI().getMangleContext().startNewFunction();
>
> @@ -660,8 +658,8 @@ void CodeGenFunction::GenerateCode(Globa
>    const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
>
>    // Check if we should generate debug info for this function.
> -  if (!FD->hasAttr<NoDebugAttr>())
> -    maybeInitializeDebugInfo();
> +  if (FD->hasAttr<NoDebugAttr>())
> +    DebugInfo = NULL; // disable debug info indefinitely for this function
>
>    FunctionArgList Args;
>    QualType ResTy = FD->getResultType();
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=189277&r1=189276&r2=189277&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Mon Aug 26 15:33:21 2013
> @@ -953,14 +953,6 @@ public:
>
>    CodeGenTypes &getTypes() const { return CGM.getTypes(); }
>    ASTContext &getContext() const { return CGM.getContext(); }
> -  /// Returns true if DebugInfo is actually initialized.
> -  bool maybeInitializeDebugInfo() {
> -    if (CGM.getModuleDebugInfo()) {
> -      DebugInfo = CGM.getModuleDebugInfo();
> -      return true;
> -    }
> -    return false;
> -  }
>    CGDebugInfo *getDebugInfo() {
>      if (DisableDebugInfo)
>        return NULL;
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-globalinit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-globalinit.cpp?rev=189277&r1=189276&r2=189277&view=diff
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/debug-info-globalinit.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-globalinit.cpp Mon Aug 26 15:33:21 2013
> @@ -35,4 +35,4 @@ int main(void) {}
>  // CHECK: store i32 %[[C2]], i32* @_ZL1k, align 4, !dbg
>  //
>  // CHECK: ![[LINE]] = metadata !{i32 13, i32
> -// CHECK: ![[LINE]] = metadata !{i32 15, i32
> +// CHECK: ![[LINE2]] = metadata !{i32 15, i32
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list