summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaowei Wu <haowei@google.com>2021-09-27 16:05:33 -0700
committerHaowei Wu <haowei@google.com>2021-09-27 16:05:33 -0700
commit283ed7de323b9fd73939155ff1f3630e5363f99c (patch)
tree6a53b672791b9eed96e52c3d180b5b1751c58a35
parent6fe2e9a9cc87cd938aeaa7d76065d22d0ad87706 (diff)
downloadllvm-283ed7de323b9fd73939155ff1f3630e5363f99c.tar.gz
Revert "[Polly] Reject reject regions entered by an indirectbr/callbr."
This reverts commit 91f46bb77e6d56955c3b96e9e844ae6a251c41e9 which causes test failures when assertions are off.
-rw-r--r--polly/include/polly/ScopDetectionDiagnostic.h27
-rw-r--r--polly/lib/Analysis/ScopDetection.cpp7
-rw-r--r--polly/lib/Analysis/ScopDetectionDiagnostic.cpp34
-rw-r--r--polly/test/ScopDetect/callbr.ll38
4 files changed, 1 insertions, 105 deletions
diff --git a/polly/include/polly/ScopDetectionDiagnostic.h b/polly/include/polly/ScopDetectionDiagnostic.h
index f4c2ee466a39..200fb8f47d37 100644
--- a/polly/include/polly/ScopDetectionDiagnostic.h
+++ b/polly/include/polly/ScopDetectionDiagnostic.h
@@ -73,7 +73,6 @@ enum class RejectReasonKind {
InvalidTerminator,
IrreducibleRegion,
UnreachableInExit,
- IndirectPredecessor,
LastCFG,
// Non-Affinity
@@ -277,32 +276,6 @@ public:
};
//===----------------------------------------------------------------------===//
-/// Captures regions with an IndirectBr predecessor.
-class ReportIndirectPredecessor : public ReportCFG {
- Instruction *Inst;
- DebugLoc DbgLoc;
-
-public:
- ReportIndirectPredecessor(Instruction *Inst, DebugLoc DbgLoc)
- : ReportCFG(RejectReasonKind::IndirectPredecessor), Inst(Inst),
- DbgLoc(DbgLoc) {}
-
- /// @name LLVM-RTTI interface
- //@{
- static bool classof(const RejectReason *RR);
- //@}
-
- /// @name RejectReason interface
- //@{
- std::string getRemarkName() const override;
- const Value *getRemarkBB() const override;
- std::string getMessage() const override;
- std::string getEndUserMessage() const override;
- const DebugLoc &getDebugLoc() const override;
- //@}
-};
-
-//===----------------------------------------------------------------------===//
/// Base class for non-affine reject reasons.
///
/// Scop candidates that violate restrictions to affinity are reported under
diff --git a/polly/lib/Analysis/ScopDetection.cpp b/polly/lib/Analysis/ScopDetection.cpp
index aab87415eb89..bf9d7abbbcec 100644
--- a/polly/lib/Analysis/ScopDetection.cpp
+++ b/polly/lib/Analysis/ScopDetection.cpp
@@ -1757,13 +1757,6 @@ bool ScopDetection::isValidRegion(DetectionContext &Context) {
return false;
}
- for (BasicBlock *Pred : predecessors(CurRegion.getEntry())) {
- Instruction *PredTerm = Pred->getTerminator();
- if (isa<IndirectBrInst>(PredTerm) || isa<CallBrInst>(PredTerm))
- return invalid<ReportIndirectPredecessor>(
- Context, /*Assert=*/true, PredTerm, PredTerm->getDebugLoc());
- }
-
// SCoP cannot contain the entry block of the function, because we need
// to insert alloca instruction there when translate scalar to array.
if (!PollyAllowFullFunction &&
diff --git a/polly/lib/Analysis/ScopDetectionDiagnostic.cpp b/polly/lib/Analysis/ScopDetectionDiagnostic.cpp
index 0bac2cfd1555..a32428583c86 100644
--- a/polly/lib/Analysis/ScopDetectionDiagnostic.cpp
+++ b/polly/lib/Analysis/ScopDetectionDiagnostic.cpp
@@ -50,9 +50,8 @@ using namespace llvm;
static Statistic RejectStatistics[] = {
SCOP_STAT(CFG, ""),
SCOP_STAT(InvalidTerminator, "Unsupported terminator instruction"),
- SCOP_STAT(IrreducibleRegion, "Irreducible loops"),
SCOP_STAT(UnreachableInExit, "Unreachable in exit block"),
- SCOP_STAT(IndirectPredecessor, "Branch from indirect terminator"),
+ SCOP_STAT(IrreducibleRegion, "Irreducible loops"),
SCOP_STAT(LastCFG, ""),
SCOP_STAT(AffFunc, ""),
SCOP_STAT(UndefCond, "Undefined branch condition"),
@@ -241,37 +240,6 @@ bool ReportUnreachableInExit::classof(const RejectReason *RR) {
}
//===----------------------------------------------------------------------===//
-// IndirectPredecessor.
-
-std::string ReportIndirectPredecessor::getRemarkName() const {
- return "IndirectPredecessor";
-}
-
-const Value *ReportIndirectPredecessor::getRemarkBB() const {
- if (Inst)
- return Inst->getParent();
- return nullptr;
-}
-
-std::string ReportIndirectPredecessor::getMessage() const {
- if (Inst)
- return "Branch from indirect terminator: " + *Inst;
- return getEndUserMessage();
-}
-
-const DebugLoc &ReportIndirectPredecessor::getDebugLoc() const {
- return DbgLoc;
-}
-
-std::string ReportIndirectPredecessor::getEndUserMessage() const {
- return "Branch from indirect terminator.";
-}
-
-bool ReportIndirectPredecessor::classof(const RejectReason *RR) {
- return RR->getKind() == RejectReasonKind::IndirectPredecessor;
-}
-
-//===----------------------------------------------------------------------===//
// ReportIrreducibleRegion.
std::string ReportIrreducibleRegion::getRemarkName() const {
diff --git a/polly/test/ScopDetect/callbr.ll b/polly/test/ScopDetect/callbr.ll
deleted file mode 100644
index b97e99441822..000000000000
--- a/polly/test/ScopDetect/callbr.ll
+++ /dev/null
@@ -1,38 +0,0 @@
-; RUN: opt %loadPolly -polly-detect -polly-detect-track-failures -disable-output -pass-remarks-missed=polly-detect < %s 2>&1 | FileCheck %s --check-prefix=REMARK
-; RUN: opt %loadPolly -polly-detect -polly-detect-track-failures -disable-output -stats < %s 2>&1 | FileCheck %s --check-prefix=STAT
-
-; REMARK: Branch from indirect terminator.
-
-; STAT: 1 polly-detect - Number of rejected regions: Branch from indirect terminator
-
-
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-define void @func(i32 %n, double* noalias nonnull %A) {
-entry:
- callbr void asm sideeffect "", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@func, %for)) #1
- to label %fallthrough [label %for]
-
-fallthrough:
- br label %for
-
-for:
- %j = phi i32 [0, %entry], [0, %fallthrough], [%j.inc, %inc]
- %j.cmp = icmp slt i32 %j, %n
- br i1 %j.cmp, label %body, label %exit
-
- body:
- store double 42.0, double* %A
- br label %inc
-
-inc:
- %j.inc = add nuw nsw i32 %j, 1
- br label %for
-
-exit:
- br label %return
-
-return:
- ret void
-}