diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-14 01:20:27 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-14 01:20:27 +0000 |
| commit | 47d82981d660b9380554fb9671cf1a0a6cea63b9 (patch) | |
| tree | 88c509b06a4fc7b27a63f1f98786fb630ceaf2c6 /llvm/lib/Transforms/Utils/ValueMapper.cpp | |
| parent | ae38f30d7b79319510c15a0413cccd65474f12ac (diff) | |
| download | bcm5719-llvm-47d82981d660b9380554fb9671cf1a0a6cea63b9.tar.gz bcm5719-llvm-47d82981d660b9380554fb9671cf1a0a6cea63b9.zip | |
Utils: Add mapping for uniqued MDLocations
Still doesn't handle distinct ones. Part of PR21433.
llvm-svn: 225914
Diffstat (limited to 'llvm/lib/Transforms/Utils/ValueMapper.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Utils/ValueMapper.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Utils/ValueMapper.cpp b/llvm/lib/Transforms/Utils/ValueMapper.cpp index 825aee66964..533b265ef04 100644 --- a/llvm/lib/Transforms/Utils/ValueMapper.cpp +++ b/llvm/lib/Transforms/Utils/ValueMapper.cpp @@ -219,8 +219,8 @@ static bool shouldRemapUniquedNode(const UniquableMDNode *Node, return false; } -static Metadata *cloneMDTuple(const UniquableMDNode *Node, - ValueToValueMapTy &VM, RemapFlags Flags, +static Metadata *cloneMDTuple(const MDTuple *Node, ValueToValueMapTy &VM, + RemapFlags Flags, ValueMapTypeRemapper *TypeMapper, ValueMaterializer *Materializer) { SmallVector<Metadata *, 4> Elts; @@ -232,6 +232,16 @@ static Metadata *cloneMDTuple(const UniquableMDNode *Node, return MDTuple::get(Node->getContext(), Elts); } +static Metadata *cloneMDLocation(const MDLocation *Node, ValueToValueMapTy &VM, + RemapFlags Flags, + ValueMapTypeRemapper *TypeMapper, + ValueMaterializer *Materializer) { + return MDLocation::get( + Node->getContext(), Node->getLine(), Node->getColumn(), + mapMetadataOp(Node->getScope(), VM, Flags, TypeMapper, Materializer), + mapMetadataOp(Node->getInlinedAt(), VM, Flags, TypeMapper, Materializer)); +} + /// \brief Map a uniqued MDNode. /// /// Uniqued nodes may not need to be recreated (they may map to themselves). @@ -254,7 +264,17 @@ static Metadata *mapUniquedNode(const UniquableMDNode *Node, } // At least one operand needs remapping. - Metadata *NewMD = cloneMDTuple(Node, VM, Flags, TypeMapper, Materializer); + Metadata *NewMD; + switch (Node->getMetadataID()) { + default: + llvm_unreachable("Invalid UniquableMDNode subclass"); +#define HANDLE_UNIQUABLE_LEAF(CLASS) \ + case Metadata::CLASS##Kind: \ + NewMD = \ + clone##CLASS(cast<CLASS>(Node), VM, Flags, TypeMapper, Materializer); \ + break; +#include "llvm/IR/Metadata.def" + } Dummy->replaceAllUsesWith(NewMD); MDNode::deleteTemporary(Dummy); return mapToMetadata(VM, Node, NewMD); |

