diff options
author | Adrian Prantl <aprantl@apple.com> | 2017-11-01 23:12:35 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2017-11-01 23:12:35 +0000 |
commit | bfa77c4c85dbe28c8b651b6e692b7673c8cfb349 (patch) | |
tree | 6304aceaaf32e93f15832529dc89a645a7114741 /llvm/lib/Transforms/Utils/LoopUnroll.cpp | |
parent | 06becf8f99ca7c8b35a36ba860312ea4537d2c47 (diff) | |
download | llvm-bfa77c4c85dbe28c8b651b6e692b7673c8cfb349.zip llvm-bfa77c4c85dbe28c8b651b6e692b7673c8cfb349.tar.gz llvm-bfa77c4c85dbe28c8b651b6e692b7673c8cfb349.tar.bz2 |
loop-unroll: teach remapInstruction to update dbg.value intrinsics.
Fixes PR35112.
https://bugs.llvm.org/show_bug.cgi?id=35112
llvm-svn: 317138
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUnroll.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopUnroll.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUnroll.cpp b/llvm/lib/Transforms/Utils/LoopUnroll.cpp index ece9809..2ed059b 100644 --- a/llvm/lib/Transforms/Utils/LoopUnroll.cpp +++ b/llvm/lib/Transforms/Utils/LoopUnroll.cpp @@ -68,9 +68,23 @@ static inline void remapInstruction(Instruction *I, ValueToValueMapTy &VMap) { for (unsigned op = 0, E = I->getNumOperands(); op != E; ++op) { Value *Op = I->getOperand(op); + + // Unwrap arguments of dbg.value intrinsics. + bool Wrapped = false; + if (auto *V = dyn_cast<MetadataAsValue>(Op)) + if (auto *Unwrapped = dyn_cast<ValueAsMetadata>(V->getMetadata())) { + Op = Unwrapped->getValue(); + Wrapped = true; + } + + auto wrap = [&](Value *V) { + auto &C = I->getContext(); + return Wrapped ? MetadataAsValue::get(C, ValueAsMetadata::get(V)) : V; + }; + ValueToValueMapTy::iterator It = VMap.find(Op); if (It != VMap.end()) - I->setOperand(op, It->second); + I->setOperand(op, wrap(It->second)); } if (PHINode *PN = dyn_cast<PHINode>(I)) { |