summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2017-10-31 21:03:22 +0000
committerAdrian Prantl <aprantl@apple.com>2017-10-31 21:03:22 +0000
commitdeb437b038ffad2f23fc21dd3ffb2b66cdd76b02 (patch)
tree12d83d3b2a8ee5e3427f7491fec9a3b34f6590f9 /llvm/lib/Transforms
parent0747700ce1621429fee5498b83c2349ae0c7a753 (diff)
downloadbcm5719-llvm-deb437b038ffad2f23fc21dd3ffb2b66cdd76b02.tar.gz
bcm5719-llvm-deb437b038ffad2f23fc21dd3ffb2b66cdd76b02.zip
loop-rotate: simplify code by using llvm::findDbgValues(). (NFC)
llvm-svn: 317037
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Scalar/LoopRotation.cpp54
1 files changed, 23 insertions, 31 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopRotation.cpp b/llvm/lib/Transforms/Scalar/LoopRotation.cpp
index 8353e7b2331..8581198cc7d 100644
--- a/llvm/lib/Transforms/Scalar/LoopRotation.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopRotation.cpp
@@ -141,37 +141,29 @@ static void RewriteUsesOfClonedInstructions(BasicBlock *OrigHeader,
// Replace MetadataAsValue(ValueAsMetadata(OrigHeaderVal)) uses in debug
// intrinsics.
- LLVMContext &C = OrigHeader->getContext();
- if (auto *VAM = ValueAsMetadata::getIfExists(OrigHeaderVal)) {
- if (auto *MAV = MetadataAsValue::getIfExists(C, VAM)) {
- for (auto UI = MAV->use_begin(), E = MAV->use_end(); UI != E;) {
- // Grab the use before incrementing the iterator. Otherwise, altering
- // the Use will invalidate the iterator.
- Use &U = *UI++;
- DbgInfoIntrinsic *UserInst = dyn_cast<DbgInfoIntrinsic>(U.getUser());
- if (!UserInst)
- continue;
-
- // The original users in the OrigHeader are already using the original
- // definitions.
- BasicBlock *UserBB = UserInst->getParent();
- if (UserBB == OrigHeader)
- continue;
-
- // Users in the OrigPreHeader need to use the value to which the
- // original definitions are mapped and anything else can be handled by
- // the SSAUpdater. To avoid adding PHINodes, check if the value is
- // available in UserBB, if not substitute undef.
- Value *NewVal;
- if (UserBB == OrigPreheader)
- NewVal = OrigPreHeaderVal;
- else if (SSA.HasValueForBlock(UserBB))
- NewVal = SSA.GetValueInMiddleOfBlock(UserBB);
- else
- NewVal = UndefValue::get(OrigHeaderVal->getType());
- U = MetadataAsValue::get(C, ValueAsMetadata::get(NewVal));
- }
- }
+ SmallVector<DbgValueInst *, 1> DbgValues;
+ llvm::findDbgValues(DbgValues, OrigHeaderVal);
+ for (auto &DbgValue : DbgValues) {
+ // The original users in the OrigHeader are already using the original
+ // definitions.
+ BasicBlock *UserBB = DbgValue->getParent();
+ if (UserBB == OrigHeader)
+ continue;
+
+ // Users in the OrigPreHeader need to use the value to which the
+ // original definitions are mapped and anything else can be handled by
+ // the SSAUpdater. To avoid adding PHINodes, check if the value is
+ // available in UserBB, if not substitute undef.
+ Value *NewVal;
+ if (UserBB == OrigPreheader)
+ NewVal = OrigPreHeaderVal;
+ else if (SSA.HasValueForBlock(UserBB))
+ NewVal = SSA.GetValueInMiddleOfBlock(UserBB);
+ else
+ NewVal = UndefValue::get(OrigHeaderVal->getType());
+ DbgValue->setOperand(0,
+ MetadataAsValue::get(OrigHeaderVal->getContext(),
+ ValueAsMetadata::get(NewVal)));
}
}
}
OpenPOWER on IntegriCloud