[PATCH] D17664: Move discriminator assignment to the right place.
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 26 16:32:41 PST 2016
I'm sure it's probably obvious, but you've not mentioned it here - why is
the "right place" the function, and not the module?
On Fri, Feb 26, 2016 at 4:23 PM, Dehao Chen via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> danielcdh created this revision.
> danielcdh added reviewers: dnovillo, davidxl.
> danielcdh added a subscriber: llvm-commits.
>
> Now discriminator is assigned per-function instead of per-module.
>
> http://reviews.llvm.org/D17664
>
> Files:
> include/llvm/IR/DebugInfoMetadata.h
> lib/IR/DebugInfoMetadata.cpp
> lib/Transforms/Utils/AddDiscriminators.cpp
>
> Index: lib/Transforms/Utils/AddDiscriminators.cpp
> ===================================================================
> --- lib/Transforms/Utils/AddDiscriminators.cpp
> +++ lib/Transforms/Utils/AddDiscriminators.cpp
> @@ -173,8 +173,10 @@
> typedef std::pair<StringRef, unsigned> Location;
> typedef DenseMap<const BasicBlock *, Metadata *> BBScopeMap;
> typedef DenseMap<Location, BBScopeMap> LocationBBMap;
> + typedef DenseMap<Location, unsigned> LocationDiscriminatorMap;
>
> LocationBBMap LBM;
> + LocationDiscriminatorMap LDM;
>
> // Traverse all instructions in the function. If the source line
> location
> // of the instruction appears in other basic block, assign a new
> @@ -199,8 +201,7 @@
> auto *Scope = DIL->getScope();
> auto *File =
> Builder.createFile(DIL->getFilename(), Scope->getDirectory());
> - NewScope = Builder.createLexicalBlockFile(
> - Scope, File, DIL->computeNewDiscriminator());
> + NewScope = Builder.createLexicalBlockFile(Scope, File, ++LDM[L]);
> }
> I.setDebugLoc(DILocation::get(Ctx, DIL->getLine(), DIL->getColumn(),
> NewScope, DIL->getInlinedAt()));
> @@ -230,8 +231,10 @@
> auto *Scope = FirstDIL->getScope();
> auto *File = Builder.createFile(FirstDIL->getFilename(),
> Scope->getDirectory());
> - auto *NewScope = Builder.createLexicalBlockFile(
> - Scope, File, FirstDIL->computeNewDiscriminator());
> + Location L =
> + std::make_pair(FirstDIL->getFilename(),
> FirstDIL->getLine());
> + auto *NewScope =
> + Builder.createLexicalBlockFile(Scope, File, ++LDM[L]);
> Current->setDebugLoc(DILocation::get(
> Ctx, CurrentDIL->getLine(), CurrentDIL->getColumn(),
> NewScope,
> CurrentDIL->getInlinedAt()));
> Index: lib/IR/DebugInfoMetadata.cpp
> ===================================================================
> --- lib/IR/DebugInfoMetadata.cpp
> +++ lib/IR/DebugInfoMetadata.cpp
> @@ -66,23 +66,6 @@
> Storage, Context.pImpl->DILocations);
> }
>
> -unsigned DILocation::computeNewDiscriminator() const {
> - // FIXME: This seems completely wrong.
> - //
> - // 1. If two modules are generated in the same context, then the second
> - // Module will get different discriminators than it would have if
> it were
> - // generated in its own context.
> - // 2. If this function is called after round-tripping to bitcode
> instead of
> - // before, it will give a different (and potentially incorrect!)
> return.
> - //
> - // The discriminator should instead be calculated from local information
> - // where it's actually needed. This logic should be moved to
> - // AddDiscriminators::runOnFunction(), where it doesn't pollute the
> - // LLVMContext.
> - std::pair<const char *, unsigned> Key(getFilename().data(), getLine());
> - return ++getContext().pImpl->DiscriminatorTable[Key];
> -}
> -
> unsigned DINode::getFlag(StringRef Flag) {
> return StringSwitch<unsigned>(Flag)
> #define HANDLE_DI_FLAG(ID, NAME) .Case("DIFlag" #NAME, Flag##NAME)
> Index: include/llvm/IR/DebugInfoMetadata.h
> ===================================================================
> --- include/llvm/IR/DebugInfoMetadata.h
> +++ include/llvm/IR/DebugInfoMetadata.h
> @@ -1192,15 +1192,6 @@
> /// instructions that are on different basic blocks.
> inline unsigned getDiscriminator() const;
>
> - /// \brief Compute new discriminator in the given context.
> - ///
> - /// This modifies the \a LLVMContext that \c this is in to increment
> the next
> - /// discriminator for \c this's line/filename combination.
> - ///
> - /// FIXME: Delete this. See comments in implementation and at the only
> call
> - /// site in \a AddDiscriminators::runOnFunction().
> - unsigned computeNewDiscriminator() const;
> -
> Metadata *getRawScope() const { return getOperand(0); }
> Metadata *getRawInlinedAt() const {
> if (getNumOperands() == 2)
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160226/e113ce58/attachment.html>
More information about the llvm-commits
mailing list