[polly] r249132 - Earlier creation of ScopStmt objects
Michael Kruse via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 2 06:53:08 PDT 2015
Author: meinersbur
Date: Fri Oct 2 08:53:07 2015
New Revision: 249132
URL: http://llvm.org/viewvc/llvm-project?rev=249132&view=rev
Log:
Earlier creation of ScopStmt objects
This moves the construction of ScopStmt to the beginning of the
ScopInfo pass. The late creation was a result of the earlier separation
of ScopInfo and TempScopInfo. This will avoid introducing more
ScopStmt-like maps in future commits. The AccFuncMap will also be
removed in some future commit. DomainMap might also be included into
ScopStmt.
The order in which ScopStmt are created changes and initially creates
empty statements that are removed in a simplification.
Differential Revision: http://reviews.llvm.org/D13341
Modified:
polly/trunk/include/polly/ScopInfo.h
polly/trunk/lib/Analysis/ScopInfo.cpp
polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll
polly/trunk/test/ScopInfo/cond_constant_in_loop.ll
polly/trunk/test/ScopInfo/non_affine_region_1.ll
polly/trunk/test/ScopInfo/non_affine_region_2.ll
polly/trunk/test/ScopInfo/non_affine_region_3.ll
polly/trunk/test/ScopInfo/non_affine_region_4.ll
polly/trunk/test/ScopInfo/phi_condition_modeling_1.ll
polly/trunk/test/ScopInfo/phi_condition_modeling_2.ll
polly/trunk/test/ScopInfo/phi_conditional_simple_1.ll
polly/trunk/test/ScopInfo/switch-1.ll
polly/trunk/test/ScopInfo/switch-2.ll
polly/trunk/test/ScopInfo/switch-3.ll
polly/trunk/test/ScopInfo/switch-4.ll
polly/trunk/test/ScopInfo/switch-6.ll
polly/trunk/test/ScopInfo/switch-7.ll
Modified: polly/trunk/include/polly/ScopInfo.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopInfo.h?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/include/polly/ScopInfo.h (original)
+++ polly/trunk/include/polly/ScopInfo.h Fri Oct 2 08:53:07 2015
@@ -473,8 +473,6 @@ private:
/// @brief Is this MemoryAccess modeling special PHI node accesses?
bool isPHI() const { return Origin == PHI; }
- void setStatement(ScopStmt *Stmt) { this->Statement = Stmt; }
-
__isl_give isl_basic_map *createBasicAccessMap(ScopStmt *Statement);
void assumeNoOutOfBound();
@@ -535,6 +533,7 @@ private:
public:
/// @brief Create a new MemoryAccess.
///
+ /// @param Stmt The parent statement.
/// @param AccessInst The instruction doing the access.
/// @param Id Identifier that is guranteed to be unique within the
/// same ScopStmt.
@@ -546,10 +545,11 @@ public:
/// @param Subscripts Subscipt expressions
/// @param Sizes Dimension lengths of the accessed array.
/// @param BaseName Name of the acessed array.
- MemoryAccess(Instruction *AccessInst, __isl_take isl_id *Id, AccessType Type,
- Value *BaseAddress, unsigned ElemBytes, bool Affine,
- ArrayRef<const SCEV *> Subscripts, ArrayRef<const SCEV *> Sizes,
- Value *AccessValue, AccessOrigin Origin, StringRef BaseName);
+ MemoryAccess(ScopStmt *Stmt, Instruction *AccessInst, __isl_take isl_id *Id,
+ AccessType Type, Value *BaseAddress, unsigned ElemBytes,
+ bool Affine, ArrayRef<const SCEV *> Subscripts,
+ ArrayRef<const SCEV *> Sizes, Value *AccessValue,
+ AccessOrigin Origin, StringRef BaseName);
~MemoryAccess();
/// @brief Get the type of a memory access.
@@ -721,6 +721,9 @@ public:
/// Create an overapproximating ScopStmt for the region @p R.
ScopStmt(Scop &parent, Region &R);
+ /// Initialize members after all MemoryAccesses have been added.
+ void init();
+
private:
/// Polyhedral description
//@{
@@ -789,14 +792,8 @@ private:
/// @brief Fill NestLoops with loops surrounding this statement.
void collectSurroundingLoops();
- /// @brief Create the accesses for instructions in @p Block.
- ///
- /// @param Block The basic block for which accesses should be
- /// created.
- /// @param isApproximated Flag to indicate blocks that might not be executed,
- /// hence for which write accesses need to be modeled as
- /// may-write accesses.
- void buildAccesses(BasicBlock *Block, bool isApproximated = false);
+ /// @brief Build the access relation of all memory accesses.
+ void buildAccessRelations();
/// @brief Detect and mark reductions in the ScopStmt
void checkForReductions();
@@ -925,6 +922,9 @@ public:
BB = Block;
}
+ /// @brief Add @p Access to this statement's list of accesses.
+ void addAccess(MemoryAccess *Access);
+
/// @brief Move the memory access in @p InvMAs to @p TargetList.
///
/// Note that scalar accesses that are caused by any access in @p InvMAs will
@@ -1207,8 +1207,10 @@ private:
/// @brief Simplify the SCoP representation
///
/// At the moment we perform the following simplifications:
- /// - removal of empty statements (due to invariant load hoisting)
- void simplifySCoP();
+ /// - removal of no-op statements
+ /// @param RemoveIgnoredStmts If true, also removed ignored statments.
+ /// @see isIgnored()
+ void simplifySCoP(bool RemoveIgnoredStmts);
/// @brief Hoist all invariant memory loads.
void hoistInvariantLoads();
@@ -1590,6 +1592,13 @@ class ScopInfo : public RegionPass {
Scop *scop;
isl_ctx *ctx;
+ /// @brief Return the SCoP region that is currently processed.
+ Region *getRegion() const {
+ if (!scop)
+ return nullptr;
+ return &scop->getRegion();
+ }
+
// Clear the context.
void clear();
@@ -1632,6 +1641,12 @@ class ScopInfo : public RegionPass {
/// @param SR A subregion of @p R.
void buildAccessFunctions(Region &R, Region &SR);
+ /// @brief Create ScopStmt for all BBs and non-affine subregions of @p SR.
+ ///
+ /// Some of the statments might be optimized away later when they do not
+ /// access any memory and thus have no effect.
+ void buildStmts(Region &SR);
+
/// @brief Build the access functions for the basic block @p BB
///
/// @param R The SCoP region.
Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Fri Oct 2 08:53:07 2015
@@ -645,16 +645,16 @@ void MemoryAccess::buildAccessRelation(c
isl_space_free(Space);
}
-MemoryAccess::MemoryAccess(Instruction *AccessInst, __isl_take isl_id *Id,
- AccessType Type, Value *BaseAddress,
- unsigned ElemBytes, bool Affine,
+MemoryAccess::MemoryAccess(ScopStmt *Stmt, Instruction *AccessInst,
+ __isl_take isl_id *Id, AccessType Type,
+ Value *BaseAddress, unsigned ElemBytes, bool Affine,
ArrayRef<const SCEV *> Subscripts,
ArrayRef<const SCEV *> Sizes, Value *AccessValue,
AccessOrigin Origin, StringRef BaseName)
- : Id(Id), Origin(Origin), AccType(Type), RedType(RT_NONE),
- Statement(nullptr), BaseAddr(BaseAddress), BaseName(BaseName),
- ElemBytes(ElemBytes), Sizes(Sizes.begin(), Sizes.end()),
- AccessInstruction(AccessInst), AccessValue(AccessValue), IsAffine(Affine),
+ : Id(Id), Origin(Origin), AccType(Type), RedType(RT_NONE), Statement(Stmt),
+ BaseAddr(BaseAddress), BaseName(BaseName), ElemBytes(ElemBytes),
+ Sizes(Sizes.begin(), Sizes.end()), AccessInstruction(AccessInst),
+ AccessValue(AccessValue), IsAffine(Affine),
Subscripts(Subscripts.begin(), Subscripts.end()), AccessRelation(nullptr),
NewAccessRelation(nullptr) {}
@@ -820,31 +820,27 @@ void ScopStmt::restrictDomain(__isl_take
Domain = NewDomain;
}
-void ScopStmt::buildAccesses(BasicBlock *Block, bool isApproximated) {
- AccFuncSetType *AFS = Parent.getAccessFunctions(Block);
- if (!AFS)
- return;
-
- for (auto &Access : *AFS) {
- Instruction *AccessInst = Access.getAccessInstruction();
- Type *ElementType = Access.getAccessValue()->getType();
+void ScopStmt::buildAccessRelations() {
+ for (MemoryAccess *Access : MemAccs) {
+ Type *ElementType = Access->getAccessValue()->getType();
const ScopArrayInfo *SAI = getParent()->getOrCreateScopArrayInfo(
- Access.getBaseAddr(), ElementType, Access.Sizes, Access.isPHI());
+ Access->getBaseAddr(), ElementType, Access->Sizes, Access->isPHI());
- if (isApproximated && Access.isMustWrite())
- Access.AccType = MemoryAccess::MAY_WRITE;
-
- MemoryAccessList *&MAL = InstructionToAccess[AccessInst];
- if (!MAL)
- MAL = new MemoryAccessList();
- Access.setStatement(this);
- Access.buildAccessRelation(SAI);
- MAL->emplace_front(&Access);
- MemAccs.push_back(MAL->front());
+ Access->buildAccessRelation(SAI);
}
}
+void ScopStmt::addAccess(MemoryAccess *Access) {
+ Instruction *AccessInst = Access->getAccessInstruction();
+
+ MemoryAccessList *&MAL = InstructionToAccess[AccessInst];
+ if (!MAL)
+ MAL = new MemoryAccessList();
+ MAL->emplace_front(Access);
+ MemAccs.push_back(MAL->front());
+}
+
void ScopStmt::realignParams() {
for (MemoryAccess *MA : *this)
MA->realignParams();
@@ -1134,31 +1130,32 @@ void ScopStmt::collectSurroundingLoops()
}
ScopStmt::ScopStmt(Scop &parent, Region &R)
- : Parent(parent), BB(nullptr), R(&R), Build(nullptr) {
+ : Parent(parent), Domain(nullptr), BB(nullptr), R(&R), Build(nullptr) {
BaseName = getIslCompatibleName("Stmt_", R.getNameStr(), "");
-
- buildDomain();
- collectSurroundingLoops();
-
- BasicBlock *EntryBB = R.getEntry();
- for (BasicBlock *Block : R.blocks()) {
- buildAccesses(Block, Block != EntryBB);
- deriveAssumptions(Block);
- }
- if (DetectReductions)
- checkForReductions();
}
ScopStmt::ScopStmt(Scop &parent, BasicBlock &bb)
- : Parent(parent), BB(&bb), R(nullptr), Build(nullptr) {
+ : Parent(parent), Domain(nullptr), BB(&bb), R(nullptr), Build(nullptr) {
BaseName = getIslCompatibleName("Stmt_", &bb, "");
+}
+
+void ScopStmt::init() {
+ assert(!Domain && "init must be called only once");
buildDomain();
collectSurroundingLoops();
- buildAccesses(BB);
- deriveAssumptions(BB);
+ buildAccessRelations();
+
+ if (BB) {
+ deriveAssumptions(BB);
+ } else {
+ for (BasicBlock *Block : R->blocks()) {
+ deriveAssumptions(Block);
+ }
+ }
+
if (DetectReductions)
checkForReductions();
}
@@ -2310,11 +2307,16 @@ Scop::Scop(Region &R, AccFuncMapType &Ac
void Scop::init(LoopInfo &LI, AliasAnalysis &AA) {
buildContext();
-
buildDomains(&R, LI, DT);
- DenseMap<Loop *, std::pair<isl_schedule *, unsigned>> LoopSchedules;
+ // Remove empty and ignored statements.
+ simplifySCoP(true);
+
+ // The ScopStmts now have enough information to initialize themselves.
+ for (ScopStmt &Stmt : Stmts)
+ Stmt.init();
+ DenseMap<Loop *, std::pair<isl_schedule *, unsigned>> LoopSchedules;
Loop *L = getLoopSurroundingRegion(R, LI);
LoopSchedules[L];
buildSchedule(&R, LI, LoopSchedules);
@@ -2329,7 +2331,7 @@ void Scop::init(LoopInfo &LI, AliasAnaly
buildAliasChecks(AA);
hoistInvariantLoads();
- simplifySCoP();
+ simplifySCoP(false);
}
Scop::~Scop() {
@@ -2363,23 +2365,26 @@ void Scop::updateAccessDimensionality()
Access->updateDimensionality();
}
-void Scop::simplifySCoP() {
-
+void Scop::simplifySCoP(bool RemoveIgnoredStmts) {
for (auto StmtIt = Stmts.begin(), StmtEnd = Stmts.end(); StmtIt != StmtEnd;) {
ScopStmt &Stmt = *StmtIt;
+ RegionNode *RN = Stmt.isRegionStmt()
+ ? Stmt.getRegion()->getNode()
+ : getRegion().getBBNode(Stmt.getBasicBlock());
+
+ if (StmtIt->isEmpty() || (RemoveIgnoredStmts && isIgnored(RN))) {
+ // Remove the statement because it is unnecessary.
+ if (Stmt.isRegionStmt())
+ for (BasicBlock *BB : Stmt.getRegion()->blocks())
+ StmtMap.erase(BB);
+ else
+ StmtMap.erase(Stmt.getBasicBlock());
- if (!StmtIt->isEmpty()) {
- StmtIt++;
+ StmtIt = Stmts.erase(StmtIt);
continue;
}
- if (Stmt.isRegionStmt())
- for (BasicBlock *BB : Stmt.getRegion()->blocks())
- StmtMap.erase(BB);
- else
- StmtMap.erase(Stmt.getBasicBlock());
-
- StmtIt = Stmts.erase(StmtIt);
+ StmtIt++;
}
}
@@ -2874,11 +2879,20 @@ void Scop::buildSchedule(
DenseMap<Loop *, std::pair<isl_schedule *, unsigned>> &LoopSchedules) {
if (SD.isNonAffineSubRegion(R, &getRegion())) {
- auto *Stmt = addScopStmt(nullptr, R);
- auto *UDomain = isl_union_set_from_set(Stmt->getDomain());
- auto *StmtSchedule = isl_schedule_from_domain(UDomain);
Loop *L = getLoopSurroundingRegion(*R, LI);
auto &LSchedulePair = LoopSchedules[L];
+ ScopStmt *Stmt = getStmtForBasicBlock(R->getEntry());
+ isl_set *Domain;
+ if (Stmt) {
+ Domain = Stmt->getDomain();
+ } else {
+ // This case happens when the SCoP consists of only one non-affine region
+ // which doesn't contain any accesses and has hence been optimized away.
+ // We use a dummy domain for this case.
+ Domain = isl_set_empty(isl_space_set_alloc(IslCtx, 0, 0));
+ }
+ auto *UDomain = isl_union_set_from_set(Domain);
+ auto *StmtSchedule = isl_schedule_from_domain(UDomain);
LSchedulePair.first = StmtSchedule;
return;
}
@@ -2899,14 +2913,9 @@ void Scop::buildSchedule(
auto &LSchedulePair = LoopSchedules[L];
LSchedulePair.second += getNumBlocksInRegionNode(RN);
- if (!isIgnored(RN)) {
-
- ScopStmt *Stmt;
- if (RN->isSubRegion())
- Stmt = addScopStmt(nullptr, RN->getNodeAs<Region>());
- else
- Stmt = addScopStmt(RN->getNodeAs<BasicBlock>(), nullptr);
-
+ BasicBlock *BB = getRegionNodeBasicBlock(RN);
+ ScopStmt *Stmt = getStmtForBasicBlock(BB);
+ if (Stmt) {
auto *UDomain = isl_union_set_from_set(Stmt->getDomain());
auto *StmtSchedule = isl_schedule_from_domain(UDomain);
LSchedulePair.first =
@@ -3195,6 +3204,21 @@ void ScopInfo::buildAccessFunctions(Regi
buildAccessFunctions(R, *I->getNodeAs<BasicBlock>());
}
+void ScopInfo::buildStmts(Region &SR) {
+ Region *R = getRegion();
+
+ if (SD->isNonAffineSubRegion(&SR, R)) {
+ scop->addScopStmt(nullptr, &SR);
+ return;
+ }
+
+ for (auto I = SR.element_begin(), E = SR.element_end(); I != E; ++I)
+ if (I->isSubRegion())
+ buildStmts(*I->getNodeAs<Region>());
+ else
+ scop->addScopStmt(I->getNodeAs<BasicBlock>(), nullptr);
+}
+
void ScopInfo::buildAccessFunctions(Region &R, BasicBlock &BB,
Region *NonAffineSubRegion,
bool IsExitBlock) {
@@ -3234,6 +3258,13 @@ void ScopInfo::addMemoryAccess(BasicBloc
ArrayRef<const SCEV *> Subscripts,
ArrayRef<const SCEV *> Sizes,
MemoryAccess::AccessOrigin Origin) {
+ ScopStmt *Stmt = scop->getStmtForBasicBlock(BB);
+
+ // Do not create a memory access for anything not in the SCoP. It would be
+ // ignored anyway.
+ if (!Stmt)
+ return;
+
AccFuncSetType &AccList = AccFuncMap[BB];
size_t Identifier = AccList.size();
@@ -3243,8 +3274,14 @@ void ScopInfo::addMemoryAccess(BasicBloc
std::string IdName = "__polly_array_ref_" + std::to_string(Identifier);
isl_id *Id = isl_id_alloc(ctx, IdName.c_str(), nullptr);
- AccList.emplace_back(Inst, Id, Type, BaseAddress, ElemBytes, Affine,
+ bool isApproximated =
+ Stmt->isRegionStmt() && (Stmt->getRegion()->getEntry() != BB);
+ if (isApproximated && Type == MemoryAccess::MUST_WRITE)
+ Type = MemoryAccess::MAY_WRITE;
+
+ AccList.emplace_back(Stmt, Inst, Id, Type, BaseAddress, ElemBytes, Affine,
Subscripts, Sizes, AccessValue, Origin, BaseName);
+ Stmt->addAccess(&AccList.back());
}
void ScopInfo::addExplicitAccess(
@@ -3291,6 +3328,7 @@ void ScopInfo::buildScop(Region &R, Domi
unsigned MaxLoopDepth = getMaxLoopDepthInRegion(R, *LI, *SD);
scop = new Scop(R, AccFuncMap, *SD, *SE, DT, ctx, MaxLoopDepth);
+ buildStmts(R);
buildAccessFunctions(R, R);
// In case the region does not have an exiting block we will later (during
Modified: polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll Fri Oct 2 08:53:07 2015
@@ -27,10 +27,6 @@
; CHECK: [N] -> { Stmt_bb4__TO__bb18[i0] -> [i0, 1] };
; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
-; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_0[] };
-; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_2__phi[] };
; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -39,6 +35,10 @@
; CHECK: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_smax[] };
; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_2__phi[] };
+; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
+; CHECK: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_0[] };
+; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
+; CHECK: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_2__phi[] };
; CHECK: Stmt_bb18
; CHECK: Schedule :=
; CHECK: [N] -> { Stmt_bb18[i0] -> [i0, 2] };
Modified: polly/trunk/test/ScopInfo/cond_constant_in_loop.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/cond_constant_in_loop.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/cond_constant_in_loop.ll (original)
+++ polly/trunk/test/ScopInfo/cond_constant_in_loop.ll Fri Oct 2 08:53:07 2015
@@ -43,9 +43,9 @@ return:
ret void
}
-; CHECK: Stmt_bb2
-; CHECK: Domain :=
-; CHECK: [M, N] -> { Stmt_bb2[i0] : 1 = 0 };
; CHECK: Stmt_bb1
; CHECK: Domain :=
; CHECK: [M, N] -> { Stmt_bb1[i0] : i0 >= 0 and i0 <= -1 + M };
+; CHECK: Stmt_bb2
+; CHECK: Domain :=
+; CHECK: [M, N] -> { Stmt_bb2[i0] : 1 = 0 };
Modified: polly/trunk/test/ScopInfo/non_affine_region_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/non_affine_region_1.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/non_affine_region_1.ll (original)
+++ polly/trunk/test/ScopInfo/non_affine_region_1.ll Fri Oct 2 08:53:07 2015
@@ -19,15 +19,15 @@
; }
;
; CHECK: Region: %bb1---%bb21
-; CHECK: Stmt_bb8
+; CHECK: Stmt_bb3
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: [b] -> { Stmt_bb8[i0] -> MemRef_x_1__phi[] };
+; CHECK: [b] -> { Stmt_bb3[i0] -> MemRef_x_1__phi[] };
; CHECK: Stmt_bb7
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK: [b] -> { Stmt_bb7[i0] -> MemRef_x_1__phi[] };
-; CHECK: Stmt_bb3
+; CHECK: Stmt_bb8
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: [b] -> { Stmt_bb3[i0] -> MemRef_x_1__phi[] };
+; CHECK: [b] -> { Stmt_bb8[i0] -> MemRef_x_1__phi[] };
; CHECK: Stmt_bb10__TO__bb18
; CHECK-NEXT: Domain :=
; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] :
Modified: polly/trunk/test/ScopInfo/non_affine_region_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/non_affine_region_2.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/non_affine_region_2.ll (original)
+++ polly/trunk/test/ScopInfo/non_affine_region_2.ll Fri Oct 2 08:53:07 2015
@@ -35,11 +35,11 @@
; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] -> MemRef_A[i0] };
; CHECK-NOT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_0[] };
; CHECK-NOT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_1[] };
-; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
+; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
; CHECK-NOT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_0[] };
; CHECK-NOT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_1[] };
-; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
+; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
; CHECK-NOT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_0[] };
; CHECK-NOT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_1[] };
Modified: polly/trunk/test/ScopInfo/non_affine_region_3.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/non_affine_region_3.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/non_affine_region_3.ll (original)
+++ polly/trunk/test/ScopInfo/non_affine_region_3.ll Fri Oct 2 08:53:07 2015
@@ -31,14 +31,14 @@
; CHECK: { Stmt_bb3__TO__bb18[i0] -> [i0, 0] };
; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK: { Stmt_bb3__TO__bb18[i0] -> MemRef_A[i0] };
-; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
+; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
+; CHECK: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
; CHECK: Stmt_bb18
; CHECK: Domain :=
; CHECK: { Stmt_bb18[i0] :
Modified: polly/trunk/test/ScopInfo/non_affine_region_4.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/non_affine_region_4.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/non_affine_region_4.ll (original)
+++ polly/trunk/test/ScopInfo/non_affine_region_4.ll Fri Oct 2 08:53:07 2015
@@ -39,10 +39,10 @@
; CHECK: { Stmt_bb2__TO__bb7[i0] -> MemRef_A[i0] };
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK: { Stmt_bb2__TO__bb7[i0] -> MemRef_x[] };
-; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: { Stmt_bb2__TO__bb7[i0] -> MemRef_y__phi[] };
; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK: { Stmt_bb2__TO__bb7[i0] -> MemRef_y__phi[] };
+; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
+; CHECK: { Stmt_bb2__TO__bb7[i0] -> MemRef_y__phi[] };
; CHECK: Stmt_bb7
; CHECK: Domain :=
; CHECK: { Stmt_bb7[i0] :
Modified: polly/trunk/test/ScopInfo/phi_condition_modeling_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/phi_condition_modeling_1.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/phi_condition_modeling_1.ll (original)
+++ polly/trunk/test/ScopInfo/phi_condition_modeling_1.ll Fri Oct 2 08:53:07 2015
@@ -12,15 +12,15 @@
; }
;
; CHECK: Statements {
-; CHECK-LABEL: Stmt_bb7
+; CHECK-LABEL: Stmt_bb6
; CHECK-NOT: Access
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0__phi[] };
+; CHECK: [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0__phi[] };
; CHECK-NOT: Access
-; CHECK-LABEL: Stmt_bb6
+; CHECK-LABEL: Stmt_bb7
; CHECK-NOT: Access
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0__phi[] };
+; CHECK: [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0__phi[] };
; CHECK-NOT: Access
; CHECK-LABEL: Stmt_bb8
; CHECK-NOT: Access
Modified: polly/trunk/test/ScopInfo/phi_condition_modeling_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/phi_condition_modeling_2.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/phi_condition_modeling_2.ll (original)
+++ polly/trunk/test/ScopInfo/phi_condition_modeling_2.ll Fri Oct 2 08:53:07 2015
@@ -12,15 +12,15 @@
; }
;
; CHECK: Statements {
-; CHECK-LABEL: Stmt_bb7
+; CHECK-LABEL: Stmt_bb6
; CHECK-NOT: Access
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0__phi[] };
+; CHECK: [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0__phi[] };
; CHECK-NOT: Access
-; CHECK-LABEL: Stmt_bb6
+; CHECK-LABEL: Stmt_bb7
; CHECK-NOT: Access
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0__phi[] };
+; CHECK: [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0__phi[] };
; CHECK-NOT: Access
; CHECK-LABEL: Stmt_bb8
; CHECK-NOT: Access
Modified: polly/trunk/test/ScopInfo/phi_conditional_simple_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/phi_conditional_simple_1.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/phi_conditional_simple_1.ll (original)
+++ polly/trunk/test/ScopInfo/phi_conditional_simple_1.ll Fri Oct 2 08:53:07 2015
@@ -10,15 +10,15 @@
; }
;
; CHECK: Statements {
-; CHECK-LABEL: Stmt_if_then
+; CHECK-LABEL: Stmt_if_else
; CHECK-NOT: Access
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: [c] -> { Stmt_if_then[i0] -> MemRef_phi__phi[] };
+; CHECK: [c] -> { Stmt_if_else[i0] -> MemRef_phi__phi[] };
; CHECK-NOT: Access
-; CHECK-LABEL: Stmt_if_else
+; CHECK-LABEL: Stmt_if_then
; CHECK-NOT: Access
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
-; CHECK: [c] -> { Stmt_if_else[i0] -> MemRef_phi__phi[] };
+; CHECK: [c] -> { Stmt_if_then[i0] -> MemRef_phi__phi[] };
; CHECK-NOT: Access
; CHECK-LABEL: Stmt_if_end
; CHECK-NOT: Access
Modified: polly/trunk/test/ScopInfo/switch-1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-1.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-1.ll (original)
+++ polly/trunk/test/ScopInfo/switch-1.ll Fri Oct 2 08:53:07 2015
@@ -19,21 +19,21 @@
; }
;
; CHECK: Statements {
-; CHECK: Stmt_sw_bb_6
+; CHECK: Stmt_sw_bb_1
; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb_6[i0] : exists (e0 = floor((-3 + i0)/4): 4e0 = -3 + i0 and i0 >= 0 and i0 <= -1 + N) };
+; CHECK: [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((-1 + i0)/4): 4e0 = -1 + i0 and i0 >= 1 and i0 <= -1 + N) };
; CHECK: Schedule :=
-; CHECK: [N] -> { Stmt_sw_bb_6[i0] -> [i0, 0] };
+; CHECK: [N] -> { Stmt_sw_bb_1[i0] -> [i0, 2] };
; CHECK: Stmt_sw_bb_2
; CHECK: Domain :=
; CHECK: [N] -> { Stmt_sw_bb_2[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
; CHECK: Schedule :=
; CHECK: [N] -> { Stmt_sw_bb_2[i0] -> [i0, 1] };
-; CHECK: Stmt_sw_bb_1
+; CHECK: Stmt_sw_bb_6
; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((-1 + i0)/4): 4e0 = -1 + i0 and i0 >= 1 and i0 <= -1 + N) };
+; CHECK: [N] -> { Stmt_sw_bb_6[i0] : exists (e0 = floor((-3 + i0)/4): 4e0 = -3 + i0 and i0 >= 0 and i0 <= -1 + N) };
; CHECK: Schedule :=
-; CHECK: [N] -> { Stmt_sw_bb_1[i0] -> [i0, 2] };
+; CHECK: [N] -> { Stmt_sw_bb_6[i0] -> [i0, 0] };
; CHECK: }
;
;
Modified: polly/trunk/test/ScopInfo/switch-2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-2.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-2.ll (original)
+++ polly/trunk/test/ScopInfo/switch-2.ll Fri Oct 2 08:53:07 2015
@@ -19,18 +19,18 @@
;
; CHECK: Statements {
; CHECK-NOT: Stmt_sw_bb1
-; CHECK: Stmt_sw_bb_2
-; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb_2[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
-; CHECK: Schedule :=
-; CHECK: [N] -> { Stmt_sw_bb_2[i0] -> [i0, 0] };
-; CHECK-NOT: Stmt_sw_bb1
; CHECK: Stmt_sw_bb
; CHECK: Domain :=
; CHECK: [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
; CHECK: Schedule :=
; CHECK: [N] -> { Stmt_sw_bb[i0] -> [i0, 1] };
; CHECK-NOT: Stmt_sw_bb1
+; CHECK: Stmt_sw_bb_2
+; CHECK: Domain :=
+; CHECK: [N] -> { Stmt_sw_bb_2[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
+; CHECK: Schedule :=
+; CHECK: [N] -> { Stmt_sw_bb_2[i0] -> [i0, 0] };
+; CHECK-NOT: Stmt_sw_bb1
; CHECK: }
;
; AST: if (1)
Modified: polly/trunk/test/ScopInfo/switch-3.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-3.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-3.ll (original)
+++ polly/trunk/test/ScopInfo/switch-3.ll Fri Oct 2 08:53:07 2015
@@ -18,16 +18,6 @@
; }
;
; CHECK: Statements {
-; CHECK: Stmt_sw_bb_5
-; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb_5[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
-; CHECK: Schedule :=
-; CHECK: [N] -> { Stmt_sw_bb_5[i0] -> [i0, 0] };
-; CHECK: Stmt_sw_bb_9
-; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb_9[i0] : exists (e0 = floor((i0)/4): i0 >= 0 and i0 <= -1 + N and 4e0 >= -3 + i0 and 4e0 <= -2 + i0) };
-; CHECK: Schedule :=
-; CHECK: [N] -> { Stmt_sw_bb_9[i0] -> [i0, 1] };
; CHECK: Stmt_sw_bb
; CHECK: Domain :=
; CHECK: [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
@@ -38,6 +28,16 @@
; CHECK: [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((2 + i0)/4): i0 >= 0 and i0 <= -1 + N and 4e0 >= -1 + i0 and 4e0 <= i0) };
; CHECK: Schedule :=
; CHECK: [N] -> { Stmt_sw_bb_1[i0] -> [i0, 3] };
+; CHECK: Stmt_sw_bb_5
+; CHECK: Domain :=
+; CHECK: [N] -> { Stmt_sw_bb_5[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
+; CHECK: Schedule :=
+; CHECK: [N] -> { Stmt_sw_bb_5[i0] -> [i0, 0] };
+; CHECK: Stmt_sw_bb_9
+; CHECK: Domain :=
+; CHECK: [N] -> { Stmt_sw_bb_9[i0] : exists (e0 = floor((i0)/4): i0 >= 0 and i0 <= -1 + N and 4e0 >= -3 + i0 and 4e0 <= -2 + i0) };
+; CHECK: Schedule :=
+; CHECK: [N] -> { Stmt_sw_bb_9[i0] -> [i0, 1] };
; CHECK: }
;
; AST: if (1)
Modified: polly/trunk/test/ScopInfo/switch-4.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-4.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-4.ll (original)
+++ polly/trunk/test/ScopInfo/switch-4.ll Fri Oct 2 08:53:07 2015
@@ -22,29 +22,29 @@
; }
;
; CHECK: Statements {
-; CHECK: Stmt_sw_bb_9
+; CHECK: Stmt_sw_default
; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb_9[i0] : exists (e0 = floor((-3 + i0)/4): 4e0 = -3 + i0 and i0 >= 0 and i0 <= -1 + N) };
-; CHECK: Schedule :=
-; CHECK: [N] -> { Stmt_sw_bb_9[i0] -> [i0, 0] };
-; CHECK: Stmt_sw_bb_5
+; CHECK: [N] -> { Stmt_sw_default[i0] : 1 = 0 };
+; CHECK: Stmt_sw_bb
; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb_5[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
+; CHECK: [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
; CHECK: Schedule :=
-; CHECK: [N] -> { Stmt_sw_bb_5[i0] -> [i0, 1] };
+; CHECK: [N] -> { Stmt_sw_bb[i0] -> [i0, 3] };
; CHECK: Stmt_sw_bb_1
; CHECK: Domain :=
; CHECK: [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((-1 + i0)/4): 4e0 = -1 + i0 and i0 >= 1 and i0 <= -1 + N) };
; CHECK: Schedule :=
; CHECK: [N] -> { Stmt_sw_bb_1[i0] -> [i0, 2] };
-; CHECK: Stmt_sw_bb
+; CHECK: Stmt_sw_bb_5
; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
+; CHECK: [N] -> { Stmt_sw_bb_5[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
; CHECK: Schedule :=
-; CHECK: [N] -> { Stmt_sw_bb[i0] -> [i0, 3] };
-; CHECK: Stmt_sw_default
+; CHECK: [N] -> { Stmt_sw_bb_5[i0] -> [i0, 1] };
+; CHECK: Stmt_sw_bb_9
; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_default[i0] : 1 = 0 };
+; CHECK: [N] -> { Stmt_sw_bb_9[i0] : exists (e0 = floor((-3 + i0)/4): 4e0 = -3 + i0 and i0 >= 0 and i0 <= -1 + N) };
+; CHECK: Schedule :=
+; CHECK: [N] -> { Stmt_sw_bb_9[i0] -> [i0, 0] };
; CHECK: }
;
; AST: if (1)
Modified: polly/trunk/test/ScopInfo/switch-6.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-6.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-6.ll (original)
+++ polly/trunk/test/ScopInfo/switch-6.ll Fri Oct 2 08:53:07 2015
@@ -22,18 +22,18 @@
; }
;
; CHECK: Statements {
-; CHECK: Stmt_sw_bb_9
-; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb_9[3] : N >= 4 };
-; CHECK: Stmt_sw_bb_5
+; CHECK: Stmt_sw_bb
; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb_5[2] : N >= 3 };
+; CHECK: [N] -> { Stmt_sw_bb[0] : N >= 1 };
; CHECK: Stmt_sw_bb_1
; CHECK: Domain :=
; CHECK: [N] -> { Stmt_sw_bb_1[1] : N >= 2 };
-; CHECK: Stmt_sw_bb
+; CHECK: Stmt_sw_bb_5
; CHECK: Domain :=
-; CHECK: [N] -> { Stmt_sw_bb[0] : N >= 1 };
+; CHECK: [N] -> { Stmt_sw_bb_5[2] : N >= 3 };
+; CHECK: Stmt_sw_bb_9
+; CHECK: Domain :=
+; CHECK: [N] -> { Stmt_sw_bb_9[3] : N >= 4 };
; CHECK: }
;
; AST: if (1)
Modified: polly/trunk/test/ScopInfo/switch-7.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-7.ll?rev=249132&r1=249131&r2=249132&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-7.ll (original)
+++ polly/trunk/test/ScopInfo/switch-7.ll Fri Oct 2 08:53:07 2015
@@ -1,3 +1,4 @@
+
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
; RUN: opt %loadPolly -polly-ast -analyze < %s | FileCheck %s --check-prefix=AST
;
@@ -17,16 +18,16 @@
; }
;
; CHECK: Statements {
-; CHECK: Stmt_for_body_7
-; CHECK: Domain :=
-; CHECK: [c, N] -> { Stmt_for_body_7[i0] : c = 1 and i0 >= 0 and i0 <= -1 + N };
-; CHECK: Schedule :=
-; CHECK: [c, N] -> { Stmt_for_body_7[i0] -> [0, i0] };
; CHECK: Stmt_for_body
; CHECK: Domain :=
; CHECK: [c, N] -> { Stmt_for_body[i0] : c = -1 and i0 >= 0 and i0 <= -1 + N };
; CHECK: Schedule :=
; CHECK: [c, N] -> { Stmt_for_body[i0] -> [1, i0] };
+; CHECK: Stmt_for_body_7
+; CHECK: Domain :=
+; CHECK: [c, N] -> { Stmt_for_body_7[i0] : c = 1 and i0 >= 0 and i0 <= -1 + N };
+; CHECK: Schedule :=
+; CHECK: [c, N] -> { Stmt_for_body_7[i0] -> [0, i0] };
; CHECK: }
;
; AST: if (1)
More information about the llvm-commits
mailing list