diff options
| -rw-r--r-- | llvm/lib/Transforms/Utils/ValueMapper.cpp | 29 | 
1 files changed, 4 insertions, 25 deletions
diff --git a/llvm/lib/Transforms/Utils/ValueMapper.cpp b/llvm/lib/Transforms/Utils/ValueMapper.cpp index 0dc012e4d91..a8f0f86ddf5 100644 --- a/llvm/lib/Transforms/Utils/ValueMapper.cpp +++ b/llvm/lib/Transforms/Utils/ValueMapper.cpp @@ -14,6 +14,7 @@  #include "llvm/Transforms/Utils/ValueMapper.h"  #include "llvm/BasicBlock.h" +#include "llvm/DerivedTypes.h"  // For getNullValue(Type::Int32Ty)  #include "llvm/Constants.h"  #include "llvm/GlobalValue.h"  #include "llvm/Instruction.h" @@ -30,9 +31,9 @@ Value *llvm::MapValue(const Value *V, ValueMapTy &VM, LLVMContext &Context) {    // NOTE: VMSlot can be invalidated by any reference to VM, which can grow the    // DenseMap.  This includes any recursive calls to MapValue. -  // Global values do not need to be seeded into the ValueMap if they are using -  // the identity mapping. -  if (isa<GlobalValue>(V) || isa<InlineAsm>(V)) +  // Global values and metadata do not need to be seeded into the ValueMap if  +  // they are using the identity mapping. +  if (isa<GlobalValue>(V) || isa<InlineAsm>(V) || isa<MetadataBase>(V))      return VMSlot = const_cast<Value*>(V);    if (Constant *C = const_cast<Constant*>(dyn_cast<Constant>(V))) { @@ -105,32 +106,10 @@ Value *llvm::MapValue(const Value *V, ValueMapTy &VM, LLVMContext &Context) {        }        return VM[V] = C; -    } else if (MDNode *N = dyn_cast<MDNode>(C)) { -      for (MDNode::const_elem_iterator b = N->elem_begin(), i = b, -             e = N->elem_end(); i != e; ++i) { -        if (!*i) continue; - -        Value *MV = MapValue(*i, VM, Context); -        if (MV != *i) { -          // This MDNode must contain a reference to a global, make a new MDNode -          // and return it. -	  SmallVector<Value*, 8> Values; -          Values.reserve(N->getNumElements()); -          for (MDNode::const_elem_iterator j = b; j != i; ++j) -            Values.push_back(*j); -          Values.push_back(MV); -          for (++i; i != e; ++i) -            Values.push_back(MapValue(*i, VM, Context)); -          return VM[V] = Context.getMDNode(Values.data(), Values.size()); -        } -      } -      return VM[V] = C; -      } else {        llvm_unreachable("Unknown type of constant!");      }    } -    return 0;  }  | 

