aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/LoopUnroll.cpp
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2017-11-01 23:12:35 +0000
committerAdrian Prantl <aprantl@apple.com>2017-11-01 23:12:35 +0000
commitbfa77c4c85dbe28c8b651b6e692b7673c8cfb349 (patch)
tree6304aceaaf32e93f15832529dc89a645a7114741 /llvm/lib/Transforms/Utils/LoopUnroll.cpp
parent06becf8f99ca7c8b35a36ba860312ea4537d2c47 (diff)
downloadllvm-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.cpp16
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)) {