[llvm] r221167 - IR: MDNode => Value: Instruction::getAllMetadataOtherThanDebugLoc()

David Blaikie dblaikie at gmail.com
Mon Nov 3 10:40:42 PST 2014


On Mon, Nov 3, 2014 at 10:13 AM, Duncan P. N. Exon Smith <
dexonsmith at apple.com> wrote:

> Author: dexonsmith
> Date: Mon Nov  3 12:13:57 2014
> New Revision: 221167
>
> URL: http://llvm.org/viewvc/llvm-project?rev=221167&view=rev
> Log:
> IR: MDNode => Value: Instruction::getAllMetadataOtherThanDebugLoc()
>
> Change `Instruction::getAllMetadataOtherThanDebugLoc()` from a vector of
> `MDNode` to one of `Value`.  Part of PR21433.
>

This does seem like a rather unfortunate loss in type safety - is there no
common type here other than Value*? Should we introduce one.

(more broadly, I do wonder if there's some common API we could expose via
MDNode so as not to end up with two kinds of metadata... but I've not
really been able to wrap my head around this enough to have a well informed
perspective)


>
> Modified:
>     llvm/trunk/include/llvm/IR/Instruction.h
>     llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
>     llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp
>     llvm/trunk/lib/IR/Instruction.cpp
>     llvm/trunk/lib/IR/Metadata.cpp
>     llvm/trunk/lib/IR/TypeFinder.cpp
>     llvm/trunk/lib/Target/R600/SITypeRewriter.cpp
>     llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp
>     llvm/trunk/lib/Transforms/Utils/Local.cpp
>     llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
>     llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp
>
> Modified: llvm/trunk/include/llvm/IR/Instruction.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Instruction.h?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/Instruction.h (original)
> +++ llvm/trunk/include/llvm/IR/Instruction.h Mon Nov  3 12:13:57 2014
> @@ -182,8 +182,8 @@ public:
>
>    /// getAllMetadataOtherThanDebugLoc - This does the same thing as
>    /// getAllMetadata, except that it filters out the debug location.
> -  void getAllMetadataOtherThanDebugLoc(SmallVectorImpl<std::pair<unsigned,
> -                                       MDNode*> > &MDs) const {
> +  void getAllMetadataOtherThanDebugLoc(
> +      SmallVectorImpl<std::pair<unsigned, Value *>> &MDs) const {
>      if (hasMetadataOtherThanDebugLoc())
>        getAllMetadataOtherThanDebugLocImpl(MDs);
>    }
> @@ -296,8 +296,8 @@ private:
>    MDNode *getMDNodeImpl(StringRef Kind) const;
>    void
>    getAllMetadataImpl(SmallVectorImpl<std::pair<unsigned, Value *>> &)
> const;
> -  void
> getAllMetadataOtherThanDebugLocImpl(SmallVectorImpl<std::pair<unsigned,
> -                                           MDNode*> > &) const;
> +  void getAllMetadataOtherThanDebugLocImpl(
> +      SmallVectorImpl<std::pair<unsigned, Value *>> &) const;
>    void clearMetadataHashEntries();
>  public:
>
>  //===--------------------------------------------------------------------===//
>
> Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
> +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Mon Nov  3 12:13:57
> 2014
> @@ -848,7 +848,7 @@ static void WriteMetadataAttachment(cons
>
>    // Write metadata attachments
>    // METADATA_ATTACHMENT - [m x [value, [n x [id, mdnode]]]
> -  SmallVector<std::pair<unsigned, MDNode*>, 4> MDs;
> +  SmallVector<std::pair<unsigned, Value *>, 4> MDs;
>
>    for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E;
> ++BB)
>      for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
>
> Modified: llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp (original)
> +++ llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp Mon Nov  3 12:13:57
> 2014
> @@ -321,7 +321,7 @@ ValueEnumerator::ValueEnumerator(const M
>    EnumerateValueSymbolTable(M->getValueSymbolTable());
>    EnumerateNamedMetadata(M);
>
> -  SmallVector<std::pair<unsigned, MDNode*>, 8> MDs;
> +  SmallVector<std::pair<unsigned, Value *>, 8> MDs;
>
>    // Enumerate types used by function bodies and argument lists.
>    for (const Function &F : *M) {
> @@ -347,7 +347,7 @@ ValueEnumerator::ValueEnumerator(const M
>          MDs.clear();
>          I.getAllMetadataOtherThanDebugLoc(MDs);
>          for (unsigned i = 0, e = MDs.size(); i != e; ++i)
> -          EnumerateMetadata(MDs[i].second);
> +          EnumerateMetadata(cast<MDNode>(MDs[i].second));
>
>          if (!I.getDebugLoc().isUnknown()) {
>            MDNode *Scope, *IA;
> @@ -741,10 +741,10 @@ void ValueEnumerator::incorporateFunctio
>              FnLocalMDVector.push_back(MD);
>        }
>
> -      SmallVector<std::pair<unsigned, MDNode*>, 8> MDs;
> +      SmallVector<std::pair<unsigned, Value *>, 8> MDs;
>        I->getAllMetadataOtherThanDebugLoc(MDs);
>        for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
> -        MDNode *N = MDs[i].second;
> +        auto *N = cast<MDNode>(MDs[i].second);
>          if (N->isFunctionLocal() && N->getFunction())
>            FnLocalMDVector.push_back(N);
>        }
>
> Modified: llvm/trunk/lib/IR/Instruction.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Instruction.cpp?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/Instruction.cpp (original)
> +++ llvm/trunk/lib/IR/Instruction.cpp Mon Nov  3 12:13:57 2014
> @@ -548,7 +548,7 @@ Instruction *Instruction::clone() const
>
>    // Otherwise, enumerate and copy over metadata from the old instruction
> to the
>    // new one.
> -  SmallVector<std::pair<unsigned, MDNode*>, 4> TheMDs;
> +  SmallVector<std::pair<unsigned, Value *>, 4> TheMDs;
>    getAllMetadataOtherThanDebugLoc(TheMDs);
>    for (const auto &MD : TheMDs)
>      New->setMetadata(MD.first, MD.second);
>
> Modified: llvm/trunk/lib/IR/Metadata.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Metadata.cpp?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/Metadata.cpp (original)
> +++ llvm/trunk/lib/IR/Metadata.cpp Mon Nov  3 12:13:57 2014
> @@ -770,9 +770,8 @@ void Instruction::getAllMetadataImpl(
>      array_pod_sort(Result.begin(), Result.end());
>  }
>
> -void Instruction::
> -getAllMetadataOtherThanDebugLocImpl(SmallVectorImpl<std::pair<unsigned,
> -                                    MDNode*> > &Result) const {
> +void Instruction::getAllMetadataOtherThanDebugLocImpl(
> +    SmallVectorImpl<std::pair<unsigned, Value *>> &Result) const {
>    Result.clear();
>    assert(hasMetadataHashEntry() &&
>           getContext().pImpl->MetadataStore.count(this) &&
>
> Modified: llvm/trunk/lib/IR/TypeFinder.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/TypeFinder.cpp?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/TypeFinder.cpp (original)
> +++ llvm/trunk/lib/IR/TypeFinder.cpp Mon Nov  3 12:13:57 2014
> @@ -40,7 +40,7 @@ void TypeFinder::run(const Module &M, bo
>    }
>
>    // Get types from functions.
> -  SmallVector<std::pair<unsigned, MDNode*>, 4> MDForInst;
> +  SmallVector<std::pair<unsigned, Value *>, 4> MDForInst;
>    for (Module::const_iterator FI = M.begin(), E = M.end(); FI != E; ++FI)
> {
>      incorporateType(FI->getType());
>
> @@ -71,7 +71,7 @@ void TypeFinder::run(const Module &M, bo
>          // Incorporate types hiding in metadata.
>          I.getAllMetadataOtherThanDebugLoc(MDForInst);
>          for (unsigned i = 0, e = MDForInst.size(); i != e; ++i)
> -          incorporateMDNode(MDForInst[i].second);
> +          incorporateMDNode(cast<MDNode>(MDForInst[i].second));
>
>          MDForInst.clear();
>        }
>
> Modified: llvm/trunk/lib/Target/R600/SITypeRewriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/SITypeRewriter.cpp?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/SITypeRewriter.cpp (original)
> +++ llvm/trunk/lib/Target/R600/SITypeRewriter.cpp Mon Nov  3 12:13:57 2014
> @@ -87,7 +87,8 @@ void SITypeRewriter::visitLoadInst(LoadI
>      Value *BitCast = Builder.CreateBitCast(Ptr,
>          PointerType::get(v4i32,PtrTy->getPointerAddressSpace()));
>      LoadInst *Load = Builder.CreateLoad(BitCast);
> -    SmallVector <std::pair<unsigned, MDNode*>, 8> MD;
> +    // FIXME: Should the DebugLoc really get dropped here?
> +    SmallVector<std::pair<unsigned, Value *>, 8> MD;
>      I.getAllMetadataOtherThanDebugLoc(MD);
>      for (unsigned i = 0, e = MD.size(); i != e; ++i) {
>        Load->setMetadata(MD[i].first, MD[i].second);
>
> Modified: llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/Scalarizer.cpp Mon Nov  3 12:13:57
> 2014
> @@ -327,12 +327,11 @@ bool Scalarizer::canTransferMetadata(uns
>  // Transfer metadata from Op to the instructions in CV if it is known
>  // to be safe to do so.
>  void Scalarizer::transferMetadata(Instruction *Op, const ValueVector &CV)
> {
> -  SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
> +  SmallVector<std::pair<unsigned, Value *>, 4> MDs;
>    Op->getAllMetadataOtherThanDebugLoc(MDs);
>    for (unsigned I = 0, E = CV.size(); I != E; ++I) {
>      if (Instruction *New = dyn_cast<Instruction>(CV[I])) {
> -      for (SmallVectorImpl<std::pair<unsigned, MDNode *> >::iterator
> -             MI = MDs.begin(), ME = MDs.end(); MI != ME; ++MI)
> +      for (auto MI = MDs.begin(), ME = MDs.end(); MI != ME; ++MI)
>          if (canTransferMetadata(MI->first))
>            New->setMetadata(MI->first, MI->second);
>        New->setDebugLoc(Op->getDebugLoc());
>
> Modified: llvm/trunk/lib/Transforms/Utils/Local.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/Local.cpp?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/Local.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/Local.cpp Mon Nov  3 12:13:57 2014
> @@ -1308,13 +1308,13 @@ bool llvm::removeUnreachableBlocks(Funct
>  }
>
>  void llvm::combineMetadata(Instruction *K, const Instruction *J,
> ArrayRef<unsigned> KnownIDs) {
> -  SmallVector<std::pair<unsigned, MDNode*>, 4> Metadata;
> +  SmallVector<std::pair<unsigned, Value *>, 4> Metadata;
>    K->dropUnknownMetadata(KnownIDs);
>    K->getAllMetadataOtherThanDebugLoc(Metadata);
>    for (unsigned i = 0, n = Metadata.size(); i < n; ++i) {
>      unsigned Kind = Metadata[i].first;
>      MDNode *JMD = J->getMDNode(Kind);
> -    MDNode *KMD = Metadata[i].second;
> +    MDNode *KMD = cast<MDNode>(Metadata[i].second);
>
>      switch (Kind) {
>        default:
>
> Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
> +++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Mon Nov  3
> 12:13:57 2014
> @@ -531,7 +531,7 @@ static std::string getDebugLocString(con
>
>  /// \brief Propagate known metadata from one instruction to another.
>  static void propagateMetadata(Instruction *To, const Instruction *From) {
> -  SmallVector<std::pair<unsigned, MDNode *>, 4> Metadata;
> +  SmallVector<std::pair<unsigned, Value *>, 4> Metadata;
>    From->getAllMetadataOtherThanDebugLoc(Metadata);
>
>    for (auto M : Metadata) {
>
> Modified: llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp?rev=221167&r1=221166&r2=221167&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp (original)
> +++ llvm/trunk/lib/Transforms/Vectorize/SLPVectorizer.cpp Mon Nov  3
> 12:13:57 2014
> @@ -188,12 +188,12 @@ static void propagateIRFlags(Value *I, A
>  /// \returns \p I after propagating metadata from \p VL.
>  static Instruction *propagateMetadata(Instruction *I, ArrayRef<Value *>
> VL) {
>    Instruction *I0 = cast<Instruction>(VL[0]);
> -  SmallVector<std::pair<unsigned, MDNode *>, 4> Metadata;
> +  SmallVector<std::pair<unsigned, Value *>, 4> Metadata;
>    I0->getAllMetadataOtherThanDebugLoc(Metadata);
>
>    for (unsigned i = 0, n = Metadata.size(); i != n; ++i) {
>      unsigned Kind = Metadata[i].first;
> -    MDNode *MD = Metadata[i].second;
> +    MDNode *MD = cast_or_null<MDNode>(Metadata[i].second);
>
>      for (int i = 1, e = VL.size(); MD && i != e; i++) {
>        Instruction *I = cast<Instruction>(VL[i]);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141103/a7f51c6e/attachment.html>


More information about the llvm-commits mailing list