From 283ed7de323b9fd73939155ff1f3630e5363f99c Mon Sep 17 00:00:00 2001 From: Haowei Wu Date: Mon, 27 Sep 2021 16:05:33 -0700 Subject: [PATCH] Revert "[Polly] Reject reject regions entered by an indirectbr/callbr." This reverts commit 91f46bb77e6d56955c3b96e9e844ae6a251c41e9 which causes test failures when assertions are off. --- polly/include/polly/ScopDetectionDiagnostic.h | 27 ------------- polly/lib/Analysis/ScopDetection.cpp | 7 ---- .../lib/Analysis/ScopDetectionDiagnostic.cpp | 34 +---------------- polly/test/ScopDetect/callbr.ll | 38 ------------------- 4 files changed, 1 insertion(+), 105 deletions(-) delete mode 100644 polly/test/ScopDetect/callbr.ll 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 @@ -276,32 +275,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. /// 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(PredTerm) || isa(PredTerm)) - return invalid( - 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"), @@ -240,37 +239,6 @@ bool ReportUnreachableInExit::classof(const RejectReason *RR) { return RR->getKind() == RejectReasonKind::UnreachableInExit; } -//===----------------------------------------------------------------------===// -// 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. 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 -}