summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/CodeMetrics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Analysis/CodeMetrics.cpp')
-rw-r--r--llvm/lib/Analysis/CodeMetrics.cpp36
1 files changed, 12 insertions, 24 deletions
diff --git a/llvm/lib/Analysis/CodeMetrics.cpp b/llvm/lib/Analysis/CodeMetrics.cpp
index bdffdd8eb27..859adf0eb94 100644
--- a/llvm/lib/Analysis/CodeMetrics.cpp
+++ b/llvm/lib/Analysis/CodeMetrics.cpp
@@ -76,20 +76,12 @@ void CodeMetrics::collectEphemeralValues(
SmallPtrSet<const Value *, 32> Visited;
SmallVector<const Value *, 16> Worklist;
- for (auto &AssumeVH : AC->assumptions()) {
- if (!AssumeVH)
- continue;
- Instruction *I = cast<Instruction>(AssumeVH);
-
- // Filter out call sites outside of the loop so we don't do a function's
- // worth of work for each of its loops (and, in the common case, ephemeral
- // values in the loop are likely due to @llvm.assume calls in the loop).
- if (!L->contains(I->getParent()))
- continue;
-
- if (EphValues.insert(I).second)
- appendSpeculatableOperands(I, Visited, Worklist);
- }
+ for (auto &B : L->blocks())
+ for (auto &I : *B)
+ if (auto *II = dyn_cast<IntrinsicInst>(&I))
+ if (II->getIntrinsicID() == Intrinsic::assume &&
+ EphValues.insert(II).second)
+ appendSpeculatableOperands(II, Visited, Worklist);
completeEphemeralValues(Visited, Worklist, EphValues);
}
@@ -100,16 +92,12 @@ void CodeMetrics::collectEphemeralValues(
SmallPtrSet<const Value *, 32> Visited;
SmallVector<const Value *, 16> Worklist;
- for (auto &AssumeVH : AC->assumptions()) {
- if (!AssumeVH)
- continue;
- Instruction *I = cast<Instruction>(AssumeVH);
- assert(I->getParent()->getParent() == F &&
- "Found assumption for the wrong function!");
-
- if (EphValues.insert(I).second)
- appendSpeculatableOperands(I, Visited, Worklist);
- }
+ for (auto &B : *F)
+ for (auto &I : B)
+ if (auto *II = dyn_cast<IntrinsicInst>(&I))
+ if (II->getIntrinsicID() == Intrinsic::assume &&
+ EphValues.insert(II).second)
+ appendSpeculatableOperands(II, Visited, Worklist);
completeEphemeralValues(Visited, Worklist, EphValues);
}
OpenPOWER on IntegriCloud