r248062 - CGDebugInfo: Make creating a skeleton CU in getOrCreateModuleRef optional.

Adrian Prantl via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 18 16:05:34 PDT 2015


> On Sep 18, 2015, at 4:01 PM, Adrian Prantl via cfe-commits <cfe-commits at lists.llvm.org> wrote:
> 
> Author: adrian
> Date: Fri Sep 18 18:01:45 2015
> New Revision: 248062
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=248062&view=rev
> Log:
> CGDebugInfo: Make creating a skeleton CU in getOrCreateModuleRef optional.
> We don't want a skeleton CU when generating debug info for the module
> itself.
> 
> NFC.
> 
> Modified:
>    cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>    cfe/trunk/lib/CodeGen/CGDebugInfo.h
> 
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=248062&r1=248061&r2=248062&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Fri Sep 18 18:01:45 2015
> @@ -1673,7 +1673,8 @@ llvm::DIType *CGDebugInfo::CreateType(co
> }
> 
> llvm::DIModule *
> -CGDebugInfo::getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod) {
> +CGDebugInfo::getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod,
> +                                  bool CreateSkeletonCU) {
>   auto &ModRef = ModuleRefCache[Mod.ModuleName];
>   if (ModRef)
>     return cast<llvm::DIModule>(ModRef);
> @@ -1700,15 +1701,20 @@ CGDebugInfo::getOrCreateModuleRef(Extern
>       OS << '\"';
>     }
>   }
> -  llvm::DIBuilder DIB(CGM.getModule());
> -  auto *CU = DIB.createCompileUnit(TheCU->getSourceLanguage(), Mod.ModuleName,
> -                                   Mod.Path, TheCU->getProducer(), true,
> -                                   StringRef(), 0, Mod.ASTFile,
> -                                   llvm::DIBuilder::FullDebug, Mod.Signature);
> -  llvm::DIModule *M =
> -      DIB.createModule(CU, Mod.ModuleName, ConfigMacros, Mod.Path,
> -                       CGM.getHeaderSearchOpts().Sysroot);
> -  DIB.finalize();
> +
> +  llvm::DIModule *M = nullptr;
> +  if (CreateSkeletonCU) {
> +    llvm::DIBuilder DIB(CGM.getModule());
> +    auto *CU = DIB.createCompileUnit(TheCU->getSourceLanguage(), Mod.ModuleName,
> +                                     Mod.Path, TheCU->getProducer(), true,
> +                                     StringRef(), 0, Mod.ASTFile,
> +                                     llvm::DIBuilder::FullDebug, Mod.Signature);
> +    M = DIB.createModule(CU, Mod.ModuleName, ConfigMacros, Mod.Path,
> +                         CGM.getHeaderSearchOpts().Sysroot);
> +    DIB.finalize();
> +  } else
> +    M = DBuilder.createModule(TheCU, Mod.ModuleName, ConfigMacros, Mod.Path,
> +                              CGM.getHeaderSearchOpts().Sysroot);
>   ModRef.reset(M);
>   return M;
> }
> @@ -2158,12 +2164,13 @@ llvm::DIModule *CGDebugInfo::getParentMo
>   if (!DebugTypeExtRefs || !D->isFromASTFile())
>     return nullptr;
> 
> +  // Record a reference to an imported clang module or precompiled header.
>   llvm::DIModule *ModuleRef = nullptr;
>   auto *Reader = CGM.getContext().getExternalSource();
>   auto Idx = D->getOwningModuleID();
>   auto Info = Reader->getSourceDescriptor(Idx);
>   if (Info)
> -    ModuleRef = getOrCreateModuleRef(*Info);
> +    ModuleRef = getOrCreateModuleRef(*Info, true);
>   return ModuleRef;
> }
> 
> @@ -3387,9 +3394,9 @@ void CGDebugInfo::EmitImportDecl(const I
>   auto *Reader = CGM.getContext().getExternalSource();
>   auto Info = Reader->getSourceDescriptor(*ID.getImportedModule());
>   DBuilder.createImportedDeclaration(
> -    getCurrentContextDescriptor(cast<Decl>(ID.getDeclContext())),
> -                                getOrCreateModuleRef(Info),
> -                                getLineNumber(ID.getLocation()));
> +      getCurrentContextDescriptor(cast<Decl>(ID.getDeclContext())),
> +      getOrCreateModuleRef(Info, DebugTypeExtRefs),

I just realized that this line is not actually as NFC as advertised. Clang will no longer emit skeleton CUs (only DW_TAG_modules) for imported modules unless compiling with -gmodules.

-- adrian

> +      getLineNumber(ID.getLocation()));
> }
> 
> llvm::DIImportedEntity *
> 
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=248062&r1=248061&r2=248062&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Fri Sep 18 18:01:45 2015
> @@ -403,9 +403,11 @@ private:
>   /// Get the type from the cache or create a new type if necessary.
>   llvm::DIType *getOrCreateType(QualType Ty, llvm::DIFile *Fg);
> 
> -  /// Get a reference to a clang module.
> +  /// Get a reference to a clang module.  If \p CreateSkeletonCU is true,
> +  /// this also creates a split dwarf skeleton compile unit.
>   llvm::DIModule *
> -  getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod);
> +  getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod,
> +                       bool CreateSkeletonCU);
> 
>   /// DebugTypeExtRefs: If \p D originated in a clang module, return it.
>   llvm::DIModule *getParentModuleOrNull(const Decl *D);
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list