From 922452285a55a4ede44f6cd4ffa745ee4ecb9ccb Mon Sep 17 00:00:00 2001 From: Tobias Grosser Date: Tue, 28 Jul 2015 14:53:44 +0000 Subject: [PATCH] Keep track of ScopArrayInfo objects that model PHI node storage Summary: When translating PHI nodes into memory dependences during code generation we require two kinds of memory. 'Normal memory' as for all scalar dependences and 'PHI node memory' to store the incoming values of the PHI node. With this patch we now mark and track these two kinds of memories, which we previously incorrectly marked as a single memory object. Being aware of PHI node storage makes code generation easier, as we do not need to guess what kind of storage a scalar reference requires. This simplifies the code nicely. Reviewers: jdoerfert Subscribers: pollydev, llvm-commits Differential Revision: http://reviews.llvm.org/D11554 llvm-svn: 243420 --- polly/include/polly/CodeGen/BlockGenerators.h | 13 +- polly/include/polly/ScopInfo.h | 36 +++++- polly/include/polly/TempScopInfo.h | 16 ++- polly/lib/Analysis/ScopInfo.cpp | 22 ++-- polly/lib/Analysis/TempScopInfo.cpp | 6 +- polly/lib/CodeGen/BlockGenerators.cpp | 122 ++++-------------- .../NonAffine/non_affine_loop_used_later.ll | 10 +- polly/test/ScopInfo/loop_carry.ll | 8 +- polly/test/ScopInfo/non_affine_region_1.ll | 8 +- polly/test/ScopInfo/non_affine_region_2.ll | 6 +- polly/test/ScopInfo/non_affine_region_3.ll | 10 +- polly/test/ScopInfo/non_affine_region_4.ll | 6 +- .../test/ScopInfo/phi_condition_modeling_1.ll | 6 +- .../test/ScopInfo/phi_condition_modeling_2.ll | 6 +- .../test/ScopInfo/phi_conditional_simple_1.ll | 6 +- polly/test/ScopInfo/phi_loop_carried_float.ll | 4 +- polly/test/ScopInfo/phi_scalar_simple_1.ll | 14 +- polly/test/ScopInfo/phi_scalar_simple_2.ll | 16 +-- 18 files changed, 140 insertions(+), 175 deletions(-) diff --git a/polly/include/polly/CodeGen/BlockGenerators.h b/polly/include/polly/CodeGen/BlockGenerators.h index 0f7172f6bd76..cde9659d1d6c 100644 --- a/polly/include/polly/CodeGen/BlockGenerators.h +++ b/polly/include/polly/CodeGen/BlockGenerators.h @@ -162,12 +162,13 @@ protected: /// memory location in the 'PHIOpMap' table. The memory locations in /// 'PHIOpMap' end with '.phiops'. /// - /// An access to/from memory that belongs to a PHI node is in the ScopInfo - /// always modeled with the name of the PHI node. However, in reality PHI - /// nodes can introduce reads/writes to two different memory locations, the - /// normal '.s2a' locations and the special '.phiops' locations. We do not - /// track this difference in the polyhedral description, but only through - /// the content of the two maps 'ScalarMap' and 'PHIOpMap'. + /// The ScopArrayInfo objects of accesses that belong to a PHI node may have + /// identical base pointers, even though they refer to two different memory + /// locations, the normal '.s2a' locations and the special '.phiops' + /// locations. For historic reasons we keep such accesses in two maps + /// 'ScalarMap' and 'PHIOpMap', index by the BasePointer. An alternative + /// implemenation, could use a single map that uses the ScopArrayInfo object + /// as index. /// /// Example: /// diff --git a/polly/include/polly/ScopInfo.h b/polly/include/polly/ScopInfo.h index 22aa9957d9d2..7e196912c6c8 100644 --- a/polly/include/polly/ScopInfo.h +++ b/polly/include/polly/ScopInfo.h @@ -76,8 +76,9 @@ public: /// @param ElementType The type of the elements stored in the array. /// @param IslCtx The isl context used to create the base pointer id. /// @param DimensionSizes A vector containing the size of each dimension. + /// @param IsPHI Is this a PHI node specific array info object. ScopArrayInfo(Value *BasePtr, Type *ElementType, isl_ctx *IslCtx, - const SmallVector &DimensionSizes); + const SmallVector &DimensionSizes, bool IsPHI); /// @brief Destructor to free the isl id of the base pointer. ~ScopArrayInfo(); @@ -106,6 +107,18 @@ public: /// @brief Return the isl id for the base pointer. __isl_give isl_id *getBasePtrId() const; + /// @brief Is this array info modeling special PHI node memory? + /// + /// During code generation of PHI nodes, there is a need for two kinds of + /// virtual storage. The normal one as it is used for all scalar dependences, + /// where the result of the PHI node is stored and later loaded from as well + /// as a second one where the incoming values of the PHI nodes are stored + /// into and reloaded when the PHI is executed. As both memories use the + /// original PHI node as virtual base pointer, we have this additional + /// attribute to distinguish the PHI node specific array modeling from the + /// normal scalar array modeling. + bool isPHI() const { return IsPHI; }; + /// @brief Dump a readable representation to stderr. void dump() const; @@ -131,6 +144,9 @@ private: /// @brief The sizes of each dimension. SmallVector DimensionSizes; + + /// @brief Is this PHI node specific storage? + bool IsPHI; }; /// @brief Represent memory accesses in statements. @@ -757,9 +773,13 @@ private: /// Constraints on parameters. isl_set *Context; - typedef MapVector> - ArrayInfoMapTy; + typedef MapVector, + std::unique_ptr> ArrayInfoMapTy; /// @brief A map to remember ScopArrayInfo objects for all base pointers. + /// + /// As PHI nodes may have two array info objects associated, we add a flag + /// that distinguishes between the PHI node specific ArrayInfo object + /// and the normal one. ArrayInfoMapTy ScopArrayInfoMap; /// @brief The assumptions under which this scop was built. @@ -1031,12 +1051,18 @@ public: /// @brief Return the (possibly new) ScopArrayInfo object for @p Access. /// /// @param ElementType The type of the elements stored in this array. + /// @param IsPHI Is this ScopArrayInfo object modeling special + /// PHI node storage. const ScopArrayInfo * getOrCreateScopArrayInfo(Value *BasePtr, Type *ElementType, - const SmallVector &Sizes); + const SmallVector &Sizes, + bool IsPHI = false); /// @brief Return the cached ScopArrayInfo object for @p BasePtr. - const ScopArrayInfo *getScopArrayInfo(Value *BasePtr); + /// + /// @param BasePtr The base pointer the object has been stored for + /// @param IsPHI Are we looking for special PHI storage. + const ScopArrayInfo *getScopArrayInfo(Value *BasePtr, bool IsPHI = false); void setContext(isl_set *NewContext); diff --git a/polly/include/polly/TempScopInfo.h b/polly/include/polly/TempScopInfo.h index 829a5c869c84..ea7d08884494 100644 --- a/polly/include/polly/TempScopInfo.h +++ b/polly/include/polly/TempScopInfo.h @@ -48,20 +48,27 @@ private: TypeKind Type; bool IsAffine; + /// @brief Is this IRAccess modeling special PHI node accesses? + bool IsPHI; + public: SmallVector Subscripts, Sizes; + /// @brief Create a new IRAccess + /// + /// @param IsPHI Are we modeling special PHI node accesses? explicit IRAccess(TypeKind Type, Value *BaseAddress, const SCEV *Offset, - unsigned elemBytes, bool Affine) + unsigned elemBytes, bool Affine, bool IsPHI = false) : BaseAddress(BaseAddress), Offset(Offset), ElemBytes(elemBytes), - Type(Type), IsAffine(Affine) {} + Type(Type), IsAffine(Affine), IsPHI(IsPHI) {} explicit IRAccess(TypeKind Type, Value *BaseAddress, const SCEV *Offset, unsigned elemBytes, bool Affine, SmallVector Subscripts, SmallVector Sizes) : BaseAddress(BaseAddress), Offset(Offset), ElemBytes(elemBytes), - Type(Type), IsAffine(Affine), Subscripts(Subscripts), Sizes(Sizes) {} + Type(Type), IsAffine(Affine), IsPHI(false), Subscripts(Subscripts), + Sizes(Sizes) {} enum TypeKind getType() const { return Type; } @@ -83,6 +90,9 @@ public: bool isScalar() const { return Subscripts.size() == 0; } + // @brief Is this IRAccess modeling special PHI node accesses? + bool isPHI() const { return IsPHI; } + void print(raw_ostream &OS) const; }; diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp index 19a5316d4811..28214685b595 100644 --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -350,10 +350,12 @@ static __isl_give isl_set *addRangeBoundsToSet(__isl_take isl_set *S, } ScopArrayInfo::ScopArrayInfo(Value *BasePtr, Type *ElementType, isl_ctx *Ctx, - const SmallVector &DimensionSizes) + const SmallVector &DimensionSizes, + bool IsPHI) : BasePtr(BasePtr), ElementType(ElementType), - DimensionSizes(DimensionSizes) { - const std::string BasePtrName = getIslCompatibleName("MemRef_", BasePtr, ""); + DimensionSizes(DimensionSizes), IsPHI(IsPHI) { + std::string BasePtrName = + getIslCompatibleName("MemRef_", BasePtr, IsPHI ? "__phi" : ""); Id = isl_id_alloc(Ctx, BasePtrName.c_str(), this); } @@ -890,7 +892,7 @@ void ScopStmt::buildAccesses(TempScop &tempScop, BasicBlock *Block, Type *ElementType = getAccessInstType(AccessInst); const ScopArrayInfo *SAI = getParent()->getOrCreateScopArrayInfo( - Access.getBase(), ElementType, Access.Sizes); + Access.getBase(), ElementType, Access.Sizes, Access.isPHI()); if (isApproximated && Access.isWrite()) Access.setMayWrite(); @@ -1705,15 +1707,17 @@ Scop::~Scop() { const ScopArrayInfo * Scop::getOrCreateScopArrayInfo(Value *BasePtr, Type *AccessType, - const SmallVector &Sizes) { - auto &SAI = ScopArrayInfoMap[BasePtr]; + const SmallVector &Sizes, + bool IsPHI) { + auto &SAI = ScopArrayInfoMap[std::make_pair(BasePtr, IsPHI)]; if (!SAI) - SAI.reset(new ScopArrayInfo(BasePtr, AccessType, getIslCtx(), Sizes)); + SAI.reset( + new ScopArrayInfo(BasePtr, AccessType, getIslCtx(), Sizes, IsPHI)); return SAI.get(); } -const ScopArrayInfo *Scop::getScopArrayInfo(Value *BasePtr) { - const ScopArrayInfo *SAI = ScopArrayInfoMap[BasePtr].get(); +const ScopArrayInfo *Scop::getScopArrayInfo(Value *BasePtr, bool IsPHI) { + auto *SAI = ScopArrayInfoMap[std::make_pair(BasePtr, IsPHI)].get(); assert(SAI && "No ScopArrayInfo available for this base pointer"); return SAI; } diff --git a/polly/lib/Analysis/TempScopInfo.cpp b/polly/lib/Analysis/TempScopInfo.cpp index 18eff7eff257..b476b68c53a7 100644 --- a/polly/lib/Analysis/TempScopInfo.cpp +++ b/polly/lib/Analysis/TempScopInfo.cpp @@ -141,12 +141,14 @@ void TempScopInfo::buildPHIAccesses(PHINode *PHI, Region &R, Written = true; - IRAccess ScalarAccess(IRAccess::MUST_WRITE, PHI, ZeroOffset, 1, true); + IRAccess ScalarAccess(IRAccess::MUST_WRITE, PHI, ZeroOffset, 1, true, + /* IsPHI */ true); AccFuncMap[OpBB].push_back(std::make_pair(ScalarAccess, OpI)); } if (Written) { - IRAccess ScalarAccess(IRAccess::READ, PHI, ZeroOffset, 1, true); + IRAccess ScalarAccess(IRAccess::READ, PHI, ZeroOffset, 1, true, + /* IsPHI */ true); Functions.push_back(std::make_pair(ScalarAccess, PHI)); } } diff --git a/polly/lib/CodeGen/BlockGenerators.cpp b/polly/lib/CodeGen/BlockGenerators.cpp index b39059d9224c..7764d82e0adb 100644 --- a/polly/lib/CodeGen/BlockGenerators.cpp +++ b/polly/lib/CodeGen/BlockGenerators.cpp @@ -440,9 +440,7 @@ void BlockGenerator::generateScalarLoads(ScopStmt &Stmt, auto Base = cast(MA.getBaseAddr()); - // This is either a common scalar use (second case) or the use of a phi - // operand by the PHI node (first case). - if (isa(Base) && Base == MA.getAccessInstruction()) + if (MA.getScopArrayInfo()->isPHI()) Address = getOrCreateAlloca(Base, PHIOpMap, ".phiops"); else Address = getOrCreateAlloca(Base, ScalarMap, ".s2a"); @@ -501,74 +499,27 @@ void BlockGenerator::generateScalarStores(ScopStmt &Stmt, BasicBlock *BB, "Region statements need to use the generateScalarStores() " "function in the RegionGenerator"); - // Set to remember a store to the phiops alloca of a PHINode. It is needed as - // we might have multiple write accesses to the same PHI and while one is the - // self write of the PHI (to the ScalarMap alloca) the other is the write to - // the operand alloca (PHIOpMap). - SmallPtrSet SeenPHIs; - - // Iterate over all accesses in the given statement. for (MemoryAccess *MA : Stmt) { - - // Skip non-scalar and read accesses. if (!MA->isScalar() || MA->isRead()) continue; - Instruction *ScalarBase = cast(MA->getBaseAddr()); - Instruction *ScalarInst = MA->getAccessInstruction(); - PHINode *ScalarBasePHI = dyn_cast(ScalarBase); + Instruction *Base = cast(MA->getBaseAddr()); + Instruction *Inst = MA->getAccessInstruction(); - // Get the alloca node for the base instruction and the value we want to - // store. In total there are 4 options: - // (1) The base is no PHI, hence it is a simple scalar def-use chain. - // (2) The base is a PHI, - // (a) and the write is caused by an operand in the block. - // (b) and it is the PHI self write (same as case (1)). - // (c) (2a) and (2b) are not distinguishable. - // For case (1) and (2b) we get the alloca from the scalar map and the value - // we want to store is initialized with the instruction attached to the - // memory access. For case (2a) we get the alloca from the PHI operand map - // and the value we want to store is initialized with the incoming value for - // this block. The tricky case (2c) is when both (2a) and (2b) match. This - // happens if the PHI operand is in the same block as the PHI. To handle - // that we choose the alloca of (2a) first and (2b) for the next write - // access to that PHI (there must be 2). - Value *ScalarValue = nullptr; - AllocaInst *ScalarAddr = nullptr; + Value *Val = nullptr; + AllocaInst *Address = nullptr; - if (!ScalarBasePHI) { - // Case (1) - ScalarAddr = getOrCreateAlloca(ScalarBase, ScalarMap, ".s2a"); - ScalarValue = ScalarInst; + if (MA->getScopArrayInfo()->isPHI()) { + PHINode *BasePHI = dyn_cast(Base); + int PHIIdx = BasePHI->getBasicBlockIndex(BB); + Address = getOrCreateAlloca(Base, PHIOpMap, ".phiops"); + Val = BasePHI->getIncomingValue(PHIIdx); } else { - int PHIIdx = ScalarBasePHI->getBasicBlockIndex(BB); - if (ScalarBasePHI != ScalarInst) { - // Case (2a) - assert(PHIIdx >= 0 && "Bad scalar write to PHI operand"); - SeenPHIs.insert(ScalarBasePHI); - ScalarAddr = getOrCreateAlloca(ScalarBase, PHIOpMap, ".phiops"); - ScalarValue = ScalarBasePHI->getIncomingValue(PHIIdx); - } else if (PHIIdx < 0) { - // Case (2b) - ScalarAddr = getOrCreateAlloca(ScalarBase, ScalarMap, ".s2a"); - ScalarValue = ScalarInst; - } else { - // Case (2c) - if (SeenPHIs.insert(ScalarBasePHI).second) { - // First access ==> same as (2a) - ScalarAddr = getOrCreateAlloca(ScalarBase, PHIOpMap, ".phiops"); - ScalarValue = ScalarBasePHI->getIncomingValue(PHIIdx); - } else { - // Second access ==> same as (2b) - ScalarAddr = getOrCreateAlloca(ScalarBase, ScalarMap, ".s2a"); - ScalarValue = ScalarInst; - } - } + Address = getOrCreateAlloca(Base, ScalarMap, ".s2a"); + Val = Inst; } - - ScalarValue = - getNewScalarValue(ScalarValue, R, ScalarMap, BBMap, GlobalMap); - Builder.CreateStore(ScalarValue, ScalarAddr); + Val = getNewScalarValue(Val, R, ScalarMap, BBMap, GlobalMap); + Builder.CreateStore(Val, Address); } } @@ -1174,21 +1125,8 @@ void RegionGenerator::generateScalarStores(ScopStmt &Stmt, BasicBlock *BB, assert(StmtR && "Block statements need to use the generateScalarStores() " "function in the BlockGenerator"); - BasicBlock *ExitBB = StmtR->getExit(); - - // For region statements three kinds of scalar stores exists: - // (1) A definition used by a non-phi instruction outside the region. - // (2) A phi-instruction in the region entry. - // (3) A write to a phi instruction in the region exit. - // The last case is the tricky one since we do not know anymore which - // predecessor of the exit needs to store the operand value that doesn't - // have a definition in the region. Therefore, we have to check in each - // block in the region if we should store the value or not. - - // Iterate over all accesses in the given statement. for (MemoryAccess *MA : Stmt) { - // Skip non-scalar and read accesses. if (!MA->isScalar() || MA->isRead()) continue; @@ -1196,36 +1134,20 @@ void RegionGenerator::generateScalarStores(ScopStmt &Stmt, BasicBlock *BB, Instruction *ScalarInst = MA->getAccessInstruction(); PHINode *ScalarBasePHI = dyn_cast(ScalarBase); - Value *ScalarValue = nullptr; + Value *Val = nullptr; AllocaInst *ScalarAddr = nullptr; - if (!ScalarBasePHI) { - // Case (1) - ScalarAddr = getOrCreateAlloca(ScalarBase, ScalarMap, ".s2a"); - ScalarValue = ScalarInst; - } else if (ScalarBasePHI->getParent() != ExitBB) { - // Case (2) - assert(ScalarBasePHI->getParent() == StmtR->getEntry() && - "Bad PHI self write in non-affine region"); - assert(ScalarBase == ScalarInst && - "Bad PHI self write in non-affine region"); - ScalarAddr = getOrCreateAlloca(ScalarBase, ScalarMap, ".s2a"); - ScalarValue = ScalarInst; - } else { + if (MA->getScopArrayInfo()->isPHI()) { int PHIIdx = ScalarBasePHI->getBasicBlockIndex(BB); - // Skip accesses we will not handle in this basic block but in another one - // in the statement region. - if (PHIIdx < 0) - continue; - - // Case (3) ScalarAddr = getOrCreateAlloca(ScalarBase, PHIOpMap, ".phiops"); - ScalarValue = ScalarBasePHI->getIncomingValue(PHIIdx); + Val = ScalarBasePHI->getIncomingValue(PHIIdx); + } else { + ScalarAddr = getOrCreateAlloca(ScalarBase, ScalarMap, ".s2a"); + Val = ScalarInst; } - ScalarValue = - getNewScalarValue(ScalarValue, R, ScalarMap, BBMap, GlobalMap); - Builder.CreateStore(ScalarValue, ScalarAddr); + Val = getNewScalarValue(Val, R, ScalarMap, BBMap, GlobalMap); + Builder.CreateStore(Val, ScalarAddr); } } diff --git a/polly/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll b/polly/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll index fac63fc1314e..1e04ac6028da 100644 --- a/polly/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll +++ b/polly/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll @@ -20,7 +20,7 @@ ; CHECK: Schedule := ; CHECK: [N] -> { Stmt_bb2[i0] -> [i0, 0] : i0 <= N and N >= 1; Stmt_bb2[0] -> [0, 0] : N <= 0 } ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N] -> { Stmt_bb2[i0] -> MemRef_j_0[] }; +; CHECK: [N] -> { Stmt_bb2[i0] -> MemRef_j_0__phi[] }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N] -> { Stmt_bb2[i0] -> MemRef_j_0[] }; ; CHECK: Stmt_bb4__TO__bb18 @@ -33,7 +33,7 @@ ; 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[] }; +; 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] @@ -41,7 +41,7 @@ ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] ; 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[] }; +; CHECK: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_2__phi[] }; ; CHECK: Stmt_bb18 ; CHECK: Domain := ; CHECK: [N] -> { Stmt_bb18[i0] : i0 >= 0 and N >= 1 and i0 <= -1 + N }; @@ -50,7 +50,7 @@ ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N] -> { Stmt_bb18[i0] -> MemRef_j_2[] }; ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N] -> { Stmt_bb18[i0] -> MemRef_j_2[] }; +; CHECK: [N] -> { Stmt_bb18[i0] -> MemRef_j_2__phi[] }; ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK: [N] -> { Stmt_bb18[i0] -> MemRef_A[o0] : o0 >= -2147483648 and o0 <= 2147483645 }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] @@ -63,7 +63,7 @@ ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N] -> { Stmt_bb23[i0] -> MemRef_j_2[] }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N] -> { Stmt_bb23[i0] -> MemRef_j_0[] }; +; CHECK: [N] -> { Stmt_bb23[i0] -> MemRef_j_0__phi[] }; ; CHECK: } ; ; void f(int *A, int N, int M) { diff --git a/polly/test/ScopInfo/loop_carry.ll b/polly/test/ScopInfo/loop_carry.ll index 5a4bf0d2fc8a..ed366a163b39 100644 --- a/polly/test/ScopInfo/loop_carry.ll +++ b/polly/test/ScopInfo/loop_carry.ll @@ -54,13 +54,13 @@ bb2: ; preds = %bb, %entry ; CHECK: Schedule := ; CHECK: [n] -> { Stmt_bb[i0] -> [i0] }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [n] -> { Stmt_bb[i0] -> MemRef_1[] }; +; CHECK: [n] -> { Stmt_bb[i0] -> MemRef_1__phi[] }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [n] -> { Stmt_bb[i0] -> MemRef_k_05[] }; +; CHECK: [n] -> { Stmt_bb[i0] -> MemRef_k_05__phi[] }; ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [n] -> { Stmt_bb[i0] -> MemRef_1[] }; +; CHECK: [n] -> { Stmt_bb[i0] -> MemRef_1__phi[] }; ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [n] -> { Stmt_bb[i0] -> MemRef_k_05[] }; +; CHECK: [n] -> { Stmt_bb[i0] -> MemRef_k_05__phi[] }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK: [n] -> { Stmt_bb[i0] -> MemRef_a[1 + i0] }; ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 0] diff --git a/polly/test/ScopInfo/non_affine_region_1.ll b/polly/test/ScopInfo/non_affine_region_1.ll index 8e8752ee9967..d86422138f5b 100644 --- a/polly/test/ScopInfo/non_affine_region_1.ll +++ b/polly/test/ScopInfo/non_affine_region_1.ll @@ -21,20 +21,20 @@ ; CHECK: Region: %bb1---%bb21 ; CHECK: Stmt_bb3 ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [b] -> { Stmt_bb3[i0] -> MemRef_x_1[] }; +; 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[] }; +; CHECK: [b] -> { Stmt_bb7[i0] -> MemRef_x_1__phi[] }; ; CHECK: Stmt_bb8 ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [b] -> { Stmt_bb8[i0] -> MemRef_x_1[] }; +; 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] : i0 >= 0 and i0 <= 1023 }; ; CHECK-NEXT: Schedule := ; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] -> [i0, 3] }; ; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_x_1[] } +; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_x_1__phi[] } ; CHECK-NOT: [Scalar: 1] ; target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/polly/test/ScopInfo/non_affine_region_2.ll b/polly/test/ScopInfo/non_affine_region_2.ll index b572bd48178b..fd39cafa0bde 100644 --- a/polly/test/ScopInfo/non_affine_region_2.ll +++ b/polly/test/ScopInfo/non_affine_region_2.ll @@ -32,11 +32,11 @@ ; 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-NEXT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2[] }; +; 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-NEXT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2[] }; +; 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: Stmt_bb18 @@ -45,7 +45,7 @@ ; CHECK: Schedule := ; CHECK: { Stmt_bb18[i0] -> [i0, 1] }; ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: { Stmt_bb18[i0] -> MemRef_x_2[] }; +; CHECK: { Stmt_bb18[i0] -> MemRef_x_2__phi[] }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK: { Stmt_bb18[i0] -> MemRef_A[i0] }; ; diff --git a/polly/test/ScopInfo/non_affine_region_3.ll b/polly/test/ScopInfo/non_affine_region_3.ll index 0ca219158c68..ad359cd546bc 100644 --- a/polly/test/ScopInfo/non_affine_region_3.ll +++ b/polly/test/ScopInfo/non_affine_region_3.ll @@ -28,20 +28,20 @@ ; 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[] }; +; 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[] }; +; 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[] }; +; 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[] }; +; CHECK: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] }; ; CHECK: Stmt_bb18 ; CHECK: Domain := ; CHECK: { Stmt_bb18[i0] : i0 >= 0 and i0 <= 1023 }; ; CHECK: Schedule := ; CHECK: { Stmt_bb18[i0] -> [i0, 1] }; ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: { Stmt_bb18[i0] -> MemRef_x_2[] }; +; CHECK: { Stmt_bb18[i0] -> MemRef_x_2__phi[] }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK: { Stmt_bb18[i0] -> MemRef_A[i0] }; ; diff --git a/polly/test/ScopInfo/non_affine_region_4.ll b/polly/test/ScopInfo/non_affine_region_4.ll index 9052c4d100b5..74fb7aa99166 100644 --- a/polly/test/ScopInfo/non_affine_region_4.ll +++ b/polly/test/ScopInfo/non_affine_region_4.ll @@ -23,9 +23,9 @@ ; 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[] }; +; CHECK: { Stmt_bb2__TO__bb7[i0] -> MemRef_y__phi[] }; ; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: { Stmt_bb2__TO__bb7[i0] -> MemRef_y[] }; +; CHECK: { Stmt_bb2__TO__bb7[i0] -> MemRef_y__phi[] }; ; CHECK: Stmt_bb7 ; CHECK: Domain := ; CHECK: { Stmt_bb7[i0] : i0 >= 0 and i0 <= 1023 }; @@ -34,7 +34,7 @@ ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: { Stmt_bb7[i0] -> MemRef_x[] }; ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: { Stmt_bb7[i0] -> MemRef_y[] }; +; CHECK: { Stmt_bb7[i0] -> MemRef_y__phi[] }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK: { Stmt_bb7[i0] -> MemRef_A[i0] }; ; diff --git a/polly/test/ScopInfo/phi_condition_modeling_1.ll b/polly/test/ScopInfo/phi_condition_modeling_1.ll index a87f0f67149b..980e878bb98c 100644 --- a/polly/test/ScopInfo/phi_condition_modeling_1.ll +++ b/polly/test/ScopInfo/phi_condition_modeling_1.ll @@ -15,17 +15,17 @@ ; CHECK-LABEL: Stmt_bb6 ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0[] }; +; CHECK: [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0__phi[] }; ; CHECK-NOT: Access ; CHECK-LABEL: Stmt_bb7 ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0[] }; +; CHECK: [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0__phi[] }; ; CHECK-NOT: Access ; CHECK-LABEL: Stmt_bb8 ; CHECK-NOT: Access ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_bb8[i0] -> MemRef_tmp_0[] }; +; CHECK: [N, c] -> { Stmt_bb8[i0] -> MemRef_tmp_0__phi[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK: [N, c] -> { Stmt_bb8[i0] -> MemRef_A[i0] }; diff --git a/polly/test/ScopInfo/phi_condition_modeling_2.ll b/polly/test/ScopInfo/phi_condition_modeling_2.ll index e78ed559fc63..f283858b02f5 100644 --- a/polly/test/ScopInfo/phi_condition_modeling_2.ll +++ b/polly/test/ScopInfo/phi_condition_modeling_2.ll @@ -15,17 +15,17 @@ ; CHECK-LABEL: Stmt_bb6 ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0[] }; +; CHECK: [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0__phi[] }; ; CHECK-NOT: Access ; CHECK-LABEL: Stmt_bb7 ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0[] }; +; CHECK: [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0__phi[] }; ; CHECK-NOT: Access ; CHECK-LABEL: Stmt_bb8 ; CHECK-NOT: Access ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_bb8[i0] -> MemRef_tmp_0[] }; +; CHECK: [N, c] -> { Stmt_bb8[i0] -> MemRef_tmp_0__phi[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N, c] -> { Stmt_bb8[i0] -> MemRef_tmp_0[] }; diff --git a/polly/test/ScopInfo/phi_conditional_simple_1.ll b/polly/test/ScopInfo/phi_conditional_simple_1.ll index 7b4592a33da8..50ed32170173 100644 --- a/polly/test/ScopInfo/phi_conditional_simple_1.ll +++ b/polly/test/ScopInfo/phi_conditional_simple_1.ll @@ -13,17 +13,17 @@ ; CHECK-LABEL: Stmt_if_else ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [c] -> { Stmt_if_else[i0] -> MemRef_phi[] }; +; CHECK: [c] -> { Stmt_if_else[i0] -> MemRef_phi__phi[] }; ; CHECK-NOT: Access ; CHECK-LABEL: Stmt_if_then ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [c] -> { Stmt_if_then[i0] -> MemRef_phi[] }; +; CHECK: [c] -> { Stmt_if_then[i0] -> MemRef_phi__phi[] }; ; CHECK-NOT: Access ; CHECK-LABEL: Stmt_if_end ; CHECK-NOT: Access ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [c] -> { Stmt_if_end[i0] -> MemRef_phi[] }; +; CHECK: [c] -> { Stmt_if_end[i0] -> MemRef_phi__phi[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK: [c] -> { Stmt_if_end[i0] -> MemRef_A[i0] }; diff --git a/polly/test/ScopInfo/phi_loop_carried_float.ll b/polly/test/ScopInfo/phi_loop_carried_float.ll index 22b7edeca890..7e760b6f72ad 100644 --- a/polly/test/ScopInfo/phi_loop_carried_float.ll +++ b/polly/test/ScopInfo/phi_loop_carried_float.ll @@ -10,7 +10,7 @@ ; CHECK-LABEL: Stmt_bb1 ; CHECK-NOT: Access ; CHECK: ReadAccess := [Reduction Type: NONE] -; CHECK: [N] -> { Stmt_bb1[i0] -> MemRef_tmp_0[] }; +; CHECK: [N] -> { Stmt_bb1[i0] -> MemRef_tmp_0__phi[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] ; CHECK: [N] -> { Stmt_bb1[i0] -> MemRef_tmp_0[] }; @@ -18,7 +18,7 @@ ; CHECK-LABEL: Stmt_bb4 ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] -; CHECK: [N] -> { Stmt_bb4[i0] -> MemRef_tmp_0[] }; +; CHECK: [N] -> { Stmt_bb4[i0] -> MemRef_tmp_0__phi[] }; ; CHECK-NOT: Access ; CHECK: ReadAccess := [Reduction Type: NONE] ; CHECK: [N] -> { Stmt_bb4[i0] -> MemRef_tmp_0[] }; diff --git a/polly/test/ScopInfo/phi_scalar_simple_1.ll b/polly/test/ScopInfo/phi_scalar_simple_1.ll index 8244568efbdd..ed7ed125d90b 100644 --- a/polly/test/ScopInfo/phi_scalar_simple_1.ll +++ b/polly/test/ScopInfo/phi_scalar_simple_1.ll @@ -17,7 +17,7 @@ entry: for.cond: ; preds = %for.inc4, %entry ; CHECK-LABEL: Stmt_for_cond ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] }; +; CHECK: [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0__phi[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] }; @@ -36,20 +36,20 @@ for.body: ; preds = %for.cond ; CHECK: [N] -> { Stmt_for_body[i0] -> MemRef_x_addr_0[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N] -> { Stmt_for_body[i0] -> MemRef_x_addr_1[] }; +; CHECK: [N] -> { Stmt_for_body[i0] -> MemRef_x_addr_1__phi[] }; ; CHECK-NOT: Access br label %for.cond1 for.cond1: ; preds = %for.inc, %for.body ; CHECK-LABEL: Stmt_for_cond1 ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] }; +; CHECK: [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1__phi[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1_lcssa[] }; +; CHECK: [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1_lcssa__phi[] }; ; CHECK-NOT: Access %x.addr.1 = phi i32 [ %x.addr.0, %for.body ], [ %add, %for.inc ] %j.0 = phi i32 [ 3, %for.body ], [ %inc, %for.inc ] @@ -62,7 +62,7 @@ for.body3: ; preds = %for.cond1 for.inc: ; preds = %for.body3 ; CHECK-LABEL: Stmt_for_inc ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1[] }; +; CHECK: [N] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1__phi[] }; ; CHECK-NOT: Access ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1[] }; @@ -83,7 +83,7 @@ for.end: ; preds = %for.cond1 ; CHECK: [N] -> { Stmt_for_end[i0] -> MemRef_x_addr_1_lcssa[] }; ; CHECK-NOT: Access ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N] -> { Stmt_for_end[i0] -> MemRef_x_addr_1_lcssa[] }; +; CHECK: [N] -> { Stmt_for_end[i0] -> MemRef_x_addr_1_lcssa__phi[] }; ; CHECK-NOT: Access %x.addr.1.lcssa = phi i32 [ %x.addr.1, %for.cond1 ] br label %for.inc4 @@ -95,7 +95,7 @@ for.inc4: ; preds = %for.end ; CHECK: [N] -> { Stmt_for_inc4[i0] -> MemRef_x_addr_1_lcssa[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N] -> { Stmt_for_inc4[i0] -> MemRef_x_addr_0[] }; +; CHECK: [N] -> { Stmt_for_inc4[i0] -> MemRef_x_addr_0__phi[] }; ; CHECK-NOT: Access %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 br label %for.cond diff --git a/polly/test/ScopInfo/phi_scalar_simple_2.ll b/polly/test/ScopInfo/phi_scalar_simple_2.ll index 5ba40e40be9e..2140ec6567c7 100644 --- a/polly/test/ScopInfo/phi_scalar_simple_2.ll +++ b/polly/test/ScopInfo/phi_scalar_simple_2.ll @@ -20,7 +20,7 @@ for.cond: ; preds = %for.inc5, %entry ; CHECK-LABEL: Stmt_for_cond ; CHECK-NOT: Access ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] }; +; CHECK: [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0__phi[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] }; @@ -45,7 +45,7 @@ for.body: ; preds = %for.cond ; CHECK: [N, c] -> { Stmt_for_body[i0] -> MemRef_x_addr_0[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_for_body[i0] -> MemRef_x_addr_1[] }; +; CHECK: [N, c] -> { Stmt_for_body[i0] -> MemRef_x_addr_1__phi[] }; ; CHECK-NOT: Access br label %for.cond1 @@ -56,7 +56,7 @@ for.cond1: ; preds = %for.inc, %for.body ; CHECK: [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] }; ; CHECK-NOT: Access ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] }; +; CHECK: [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1__phi[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] }; @@ -76,7 +76,7 @@ for.body3: ; preds = %for.cond1 ; CHECK: [N, c] -> { Stmt_for_body3[i0, i1] -> MemRef_x_addr_1[] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_for_body3[i0, i1] -> MemRef_x_addr_2[] }; +; CHECK: [N, c] -> { Stmt_for_body3[i0, i1] -> MemRef_x_addr_2__phi[] }; ; CHECK-NOT: Access %cmp4 = icmp slt i64 %indvars.iv, %tmp1 br i1 %cmp4, label %if.then, label %if.end @@ -91,7 +91,7 @@ if.then: ; preds = %for.body3 ; CHECK: [N, c] -> { Stmt_if_then[i0, i1] -> MemRef_A[i0] }; ; CHECK-NOT: Access ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_if_then[i0, i1] -> MemRef_x_addr_2[] }; +; CHECK: [N, c] -> { Stmt_if_then[i0, i1] -> MemRef_x_addr_2__phi[] }; ; CHECK-NOT: Access %arrayidx = getelementptr inbounds i32, i32* %A, i64 %indvars.iv %tmp2 = load i32, i32* %arrayidx, align 4 @@ -105,7 +105,7 @@ if.end: ; preds = %if.then, %for.body3 ; CHECK: [N, c] -> { Stmt_if_end[i0, i1] -> MemRef_x_addr_2[] }; ; CHECK-NOT: Access ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_if_end[i0, i1] -> MemRef_x_addr_2[] }; +; CHECK: [N, c] -> { Stmt_if_end[i0, i1] -> MemRef_x_addr_2__phi[] }; ; CHECK-NOT: Access %x.addr.2 = phi i32 [ %add, %if.then ], [ %x.addr.1, %for.body3 ] br label %for.inc @@ -115,7 +115,7 @@ for.inc: ; preds = %if.end ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N, c] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_2[] }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1[] }; +; CHECK: [N, c] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1__phi[] }; %inc = add nsw i32 %j.0, 1 br label %for.cond1 @@ -127,7 +127,7 @@ for.inc5: ; preds = %for.end ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 1] ; CHECK: [N, c] -> { Stmt_for_inc5[i0] -> MemRef_x_addr_1[] }; ; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] -; CHECK: [N, c] -> { Stmt_for_inc5[i0] -> MemRef_x_addr_0[] }; +; CHECK: [N, c] -> { Stmt_for_inc5[i0] -> MemRef_x_addr_0__phi[] }; %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 br label %for.cond