summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/GuardWidening.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/Scalar/GuardWidening.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/GuardWidening.cpp64
1 files changed, 27 insertions, 37 deletions
diff --git a/llvm/lib/Transforms/Scalar/GuardWidening.cpp b/llvm/lib/Transforms/Scalar/GuardWidening.cpp
index 055fcbc8436..534a1317c4c 100644
--- a/llvm/lib/Transforms/Scalar/GuardWidening.cpp
+++ b/llvm/lib/Transforms/Scalar/GuardWidening.cpp
@@ -66,6 +66,33 @@ STATISTIC(GuardsEliminated, "Number of eliminated guards");
namespace {
+static Value *getGuardCondition(Instruction *GuardInst) {
+ IntrinsicInst *GI = cast<IntrinsicInst>(GuardInst);
+ assert(GI->getIntrinsicID() == Intrinsic::experimental_guard &&
+ "Bad guard intrinsic?");
+ return GI->getArgOperand(0);
+}
+
+// Set the condition for \p GuardInst to \p NewCond.
+static void setGuardCondition(Instruction *GuardInst, Value *NewCond) {
+ IntrinsicInst *GI = cast<IntrinsicInst>(GuardInst);
+ assert(GI->getIntrinsicID() == Intrinsic::experimental_guard &&
+ "Bad guard intrinsic?");
+ GI->setArgOperand(0, NewCond);
+}
+
+// Whether or not the particular instruction \p I is a guard.
+static bool isGuard(const Instruction *I) {
+ using namespace llvm::PatternMatch;
+ return match(I, m_Intrinsic<Intrinsic::experimental_guard>());
+}
+
+// Eliminates the guard instruction properly.
+static void eliminateGuard(Instruction *GuardInst) {
+ GuardInst->eraseFromParent();
+ ++GuardsEliminated;
+}
+
class GuardWideningImpl {
DominatorTree &DT;
PostDominatorTree *PDT;
@@ -93,18 +120,6 @@ class GuardWideningImpl {
const DenseMap<BasicBlock *, SmallVector<Instruction *, 8>> &
GuardsPerBlock);
- // Get the condition from \p GuardInst.
- Value *getGuardCondition(Instruction *GuardInst);
-
- // Set the condition for \p GuardInst.
- void setGuardCondition(Instruction *GuardInst, Value *NewCond);
-
- // Whether or not the particular instruction is a guard.
- bool isGuard(const Instruction *I);
-
- // Eliminates the guard instruction properly.
- void eliminateGuard(Instruction *GuardInst);
-
/// Used to keep track of which widening potential is more effective.
enum WideningScore {
/// Don't widen.
@@ -343,31 +358,6 @@ bool GuardWideningImpl::eliminateGuardViaWidening(
return true;
}
-Value *GuardWideningImpl::getGuardCondition(Instruction *GuardInst) {
- IntrinsicInst *GI = cast<IntrinsicInst>(GuardInst);
- assert(GI->getIntrinsicID() == Intrinsic::experimental_guard &&
- "Bad guard intrinsic?");
- return GI->getArgOperand(0);
-}
-
-void GuardWideningImpl::setGuardCondition(Instruction *GuardInst,
- Value *NewCond) {
- IntrinsicInst *GI = cast<IntrinsicInst>(GuardInst);
- assert(GI->getIntrinsicID() == Intrinsic::experimental_guard &&
- "Bad guard intrinsic?");
- GI->setArgOperand(0, NewCond);
-}
-
-bool GuardWideningImpl::isGuard(const Instruction* I) {
- using namespace llvm::PatternMatch;
- return match(I, m_Intrinsic<Intrinsic::experimental_guard>());
-}
-
-void GuardWideningImpl::eliminateGuard(Instruction *GuardInst) {
- GuardInst->eraseFromParent();
- ++GuardsEliminated;
-}
-
GuardWideningImpl::WideningScore GuardWideningImpl::computeWideningScore(
Instruction *DominatedGuard, Loop *DominatedGuardLoop,
Instruction *DominatingGuard, Loop *DominatingGuardLoop) {
OpenPOWER on IntegriCloud