diff options
-rw-r--r-- | polly/include/polly/ScopInfo.h | 6 | ||||
-rw-r--r-- | polly/lib/Analysis/DependenceInfo.cpp | 2 | ||||
-rw-r--r-- | polly/lib/Analysis/ScopInfo.cpp | 9 | ||||
-rw-r--r-- | polly/lib/CodeGen/BlockGenerators.cpp | 105 | ||||
-rw-r--r-- | polly/lib/CodeGen/IslNodeBuilder.cpp | 8 | ||||
-rw-r--r-- | polly/lib/CodeGen/PPCGCodeGeneration.cpp | 9 |
6 files changed, 72 insertions, 67 deletions
diff --git a/polly/include/polly/ScopInfo.h b/polly/include/polly/ScopInfo.h index 7b6c5074370..eb31fbcd9c4 100644 --- a/polly/include/polly/ScopInfo.h +++ b/polly/include/polly/ScopInfo.h @@ -500,7 +500,7 @@ private: /// /// The identifier is unique between all memory accesses belonging to the same /// scop statement. - isl_id *Id; + isl::id Id; /// What is modeled by this MemoryAccess. /// @see MemoryKind @@ -858,7 +858,7 @@ public: Value *getOriginalBaseAddr() const { return BaseAddr; } /// Get the detection-time base array isl_id for this access. - __isl_give isl_id *getOriginalArrayId() const; + isl_id *getOriginalArrayId() const; /// Get the base array isl_id for this access, modifiable through /// setNewAccessRelation(). @@ -1101,7 +1101,7 @@ public: /// /// This identifier is unique for all accesses that belong to the same scop /// statement. - __isl_give isl_id *getId() const; + isl::id getId() const; /// Print the MemoryAccess. /// diff --git a/polly/lib/Analysis/DependenceInfo.cpp b/polly/lib/Analysis/DependenceInfo.cpp index 2e7bc47b92d..02dee371cd7 100644 --- a/polly/lib/Analysis/DependenceInfo.cpp +++ b/polly/lib/Analysis/DependenceInfo.cpp @@ -105,7 +105,7 @@ static __isl_give isl_map *tag(__isl_take isl_map *Relation, MemoryAccess *MA, return tag(Relation, MA->getArrayId()); if (TagLevel == Dependences::AL_Access) - return tag(Relation, MA->getId()); + return tag(Relation, MA->getId().release()); // No need to tag at the statement level. return Relation; diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp index 80e34f3a6f6..df6ccbc2718 100644 --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -641,7 +641,6 @@ static MemoryAccess::ReductionType getReductionType(const BinaryOperator *BinOp, } MemoryAccess::~MemoryAccess() { - isl_id_free(Id); isl_set_free(InvalidDomain); isl_map_free(AccessRelation); isl_map_free(NewAccessRelation); @@ -962,7 +961,7 @@ void MemoryAccess::buildAccessRelation(const ScopArrayInfo *SAI) { InvalidDomain = isl_set_empty(isl_set_get_space(StmtInvalidDomain)); isl_set_free(StmtInvalidDomain); - isl_ctx *Ctx = isl_id_get_ctx(Id); + isl_ctx *Ctx = Id.get_ctx().release(); isl_id *BaseAddrId = SAI->getBasePtrId().release(); if (getAccessInstruction() && isa<MemIntrinsic>(getAccessInstruction())) { @@ -1020,7 +1019,7 @@ MemoryAccess::MemoryAccess(ScopStmt *Stmt, Instruction *AccessInst, const std::string Access = TypeStrings[AccType] + utostr(Stmt->size()); std::string IdName = Stmt->getBaseName() + Access; - Id = isl_id_alloc(Stmt->getParent()->getIslCtx(), IdName.c_str(), this); + Id = isl::id::alloc(Stmt->getParent()->getIslCtx(), IdName.c_str(), this); } MemoryAccess::MemoryAccess(ScopStmt *Stmt, AccessType AccType, @@ -1040,7 +1039,7 @@ MemoryAccess::MemoryAccess(ScopStmt *Stmt, AccessType AccType, const std::string Access = TypeStrings[AccType] + utostr(Stmt->size()); std::string IdName = Stmt->getBaseName() + Access; - Id = isl_id_alloc(Stmt->getParent()->getIslCtx(), IdName.c_str(), this); + Id = isl::id::alloc(Stmt->getParent()->getIslCtx(), IdName.c_str(), this); } void MemoryAccess::realignParams() { @@ -1053,7 +1052,7 @@ const std::string MemoryAccess::getReductionOperatorStr() const { return MemoryAccess::getReductionOperatorStr(getReductionType()); } -__isl_give isl_id *MemoryAccess::getId() const { return isl_id_copy(Id); } +isl::id MemoryAccess::getId() const { return Id; } raw_ostream &polly::operator<<(raw_ostream &OS, MemoryAccess::ReductionType RT) { diff --git a/polly/lib/CodeGen/BlockGenerators.cpp b/polly/lib/CodeGen/BlockGenerators.cpp index 5d24012d767..2ea397009b7 100644 --- a/polly/lib/CodeGen/BlockGenerators.cpp +++ b/polly/lib/CodeGen/BlockGenerators.cpp @@ -249,7 +249,7 @@ BlockGenerator::generateLocationAccessed(ScopStmt &Stmt, MemAccInst Inst, return generateLocationAccessed( Stmt, getLoopForStmt(Stmt), Inst.isNull() ? nullptr : Inst.getPointerOperand(), BBMap, LTS, - NewAccesses, MA.getId(), MA.getAccessValue()->getType()); + NewAccesses, MA.getId().release(), MA.getAccessValue()->getType()); } Value *BlockGenerator::generateLocationAccessed( @@ -286,7 +286,7 @@ BlockGenerator::getImplicitAddress(MemoryAccess &Access, Loop *L, __isl_keep isl_id_to_ast_expr *NewAccesses) { if (Access.isLatestArrayKind()) return generateLocationAccessed(*Access.getStatement(), L, nullptr, BBMap, - LTS, NewAccesses, Access.getId(), + LTS, NewAccesses, Access.getId().release(), Access.getAccessValue()->getType()); return getOrCreateAlloca(Access); @@ -320,9 +320,9 @@ void BlockGenerator::generateArrayStore(ScopStmt &Stmt, StoreInst *Store, isl_id_to_ast_expr *NewAccesses) { MemoryAccess &MA = Stmt.getArrayAccessFor(Store); isl::set AccDom = give(isl_map_domain(MA.getAccessRelation())); - const char *Subject = isl_id_get_name(give(MA.getId()).keep()); + std::string Subject = MA.getId().get_name(); - generateConditionalExecution(Stmt, AccDom, Subject, [&, this]() { + generateConditionalExecution(Stmt, AccDom, Subject.c_str(), [&, this]() { Value *NewPointer = generateLocationAccessed(Stmt, Store, BBMap, LTS, NewAccesses); Value *ValueOperand = getNewValue(Stmt, Store->getValueOperand(), BBMap, @@ -646,37 +646,39 @@ void BlockGenerator::generateScalarStores( continue; isl::set AccDom = give(isl_map_domain(MA->getAccessRelation())); - const char *Subject = isl_id_get_name(give(MA->getId()).keep()); - - generateConditionalExecution(Stmt, AccDom, Subject, [&, this, MA]() { - Value *Val = MA->getAccessValue(); - if (MA->isAnyPHIKind()) { - assert( - MA->getIncoming().size() >= 1 && - "Block statements have exactly one exiting block, or multiple but " - "with same incoming block and value"); - assert(std::all_of(MA->getIncoming().begin(), MA->getIncoming().end(), - [&](std::pair<BasicBlock *, Value *> p) -> bool { - return p.first == Stmt.getBasicBlock(); - }) && - "Incoming block must be statement's block"); - Val = MA->getIncoming()[0].second; - } - auto Address = getImplicitAddress(*MA, getLoopForStmt(Stmt), LTS, BBMap, - NewAccesses); - - Val = getNewValue(Stmt, Val, BBMap, LTS, L); - assert((!isa<Instruction>(Val) || - DT.dominates(cast<Instruction>(Val)->getParent(), - Builder.GetInsertBlock())) && - "Domination violation"); - assert((!isa<Instruction>(Address) || - DT.dominates(cast<Instruction>(Address)->getParent(), - Builder.GetInsertBlock())) && - "Domination violation"); - Builder.CreateStore(Val, Address); - - }); + std::string Subject = MA->getId().get_name(); + + generateConditionalExecution( + Stmt, AccDom, Subject.c_str(), [&, this, MA]() { + Value *Val = MA->getAccessValue(); + if (MA->isAnyPHIKind()) { + assert(MA->getIncoming().size() >= 1 && + "Block statements have exactly one exiting block, or " + "multiple but " + "with same incoming block and value"); + assert(std::all_of(MA->getIncoming().begin(), + MA->getIncoming().end(), + [&](std::pair<BasicBlock *, Value *> p) -> bool { + return p.first == Stmt.getBasicBlock(); + }) && + "Incoming block must be statement's block"); + Val = MA->getIncoming()[0].second; + } + auto Address = getImplicitAddress(*MA, getLoopForStmt(Stmt), LTS, + BBMap, NewAccesses); + + Val = getNewValue(Stmt, Val, BBMap, LTS, L); + assert((!isa<Instruction>(Val) || + DT.dominates(cast<Instruction>(Val)->getParent(), + Builder.GetInsertBlock())) && + "Domination violation"); + assert((!isa<Instruction>(Address) || + DT.dominates(cast<Instruction>(Address)->getParent(), + Builder.GetInsertBlock())) && + "Domination violation"); + Builder.CreateStore(Val, Address); + + }); } } @@ -1569,22 +1571,23 @@ void RegionGenerator::generateScalarStores( continue; isl::set AccDom = give(isl_map_domain(MA->getAccessRelation())); - const char *Subject = isl_id_get_name(give(MA->getId()).keep()); - generateConditionalExecution(Stmt, AccDom, Subject, [&, this, MA]() { - - Value *NewVal = getExitScalar(MA, LTS, BBMap); - Value *Address = getImplicitAddress(*MA, getLoopForStmt(Stmt), LTS, BBMap, - NewAccesses); - assert((!isa<Instruction>(NewVal) || - DT.dominates(cast<Instruction>(NewVal)->getParent(), - Builder.GetInsertBlock())) && - "Domination violation"); - assert((!isa<Instruction>(Address) || - DT.dominates(cast<Instruction>(Address)->getParent(), - Builder.GetInsertBlock())) && - "Domination violation"); - Builder.CreateStore(NewVal, Address); - }); + std::string Subject = MA->getId().get_name(); + generateConditionalExecution( + Stmt, AccDom, Subject.c_str(), [&, this, MA]() { + + Value *NewVal = getExitScalar(MA, LTS, BBMap); + Value *Address = getImplicitAddress(*MA, getLoopForStmt(Stmt), LTS, + BBMap, NewAccesses); + assert((!isa<Instruction>(NewVal) || + DT.dominates(cast<Instruction>(NewVal)->getParent(), + Builder.GetInsertBlock())) && + "Domination violation"); + assert((!isa<Instruction>(Address) || + DT.dominates(cast<Instruction>(Address)->getParent(), + Builder.GetInsertBlock())) && + "Domination violation"); + Builder.CreateStore(NewVal, Address); + }); } } diff --git a/polly/lib/CodeGen/IslNodeBuilder.cpp b/polly/lib/CodeGen/IslNodeBuilder.cpp index afe421f5f1d..548f5948c6d 100644 --- a/polly/lib/CodeGen/IslNodeBuilder.cpp +++ b/polly/lib/CodeGen/IslNodeBuilder.cpp @@ -831,7 +831,8 @@ IslNodeBuilder::createNewAccesses(ScopStmt *Stmt, } auto AccessExpr = isl_ast_build_access_from_pw_multi_aff(Build, PWAccRel); - NewAccesses = isl_id_to_ast_expr_set(NewAccesses, MA->getId(), AccessExpr); + NewAccesses = + isl_id_to_ast_expr_set(NewAccesses, MA->getId().release(), AccessExpr); } return NewAccesses; @@ -884,9 +885,10 @@ void IslNodeBuilder::generateCopyStmt( "Accesses use the same data type"); assert((*ReadAccess)->isArrayKind() && (*WriteAccess)->isArrayKind()); auto *AccessExpr = - isl_id_to_ast_expr_get(NewAccesses, (*ReadAccess)->getId()); + isl_id_to_ast_expr_get(NewAccesses, (*ReadAccess)->getId().release()); auto *LoadValue = ExprBuilder.create(AccessExpr); - AccessExpr = isl_id_to_ast_expr_get(NewAccesses, (*WriteAccess)->getId()); + AccessExpr = + isl_id_to_ast_expr_get(NewAccesses, (*WriteAccess)->getId().release()); auto *StoreAddr = ExprBuilder.createAccessAddress(AccessExpr); Builder.CreateStore(LoadValue, StoreAddr); } diff --git a/polly/lib/CodeGen/PPCGCodeGeneration.cpp b/polly/lib/CodeGen/PPCGCodeGeneration.cpp index c3b8c472a59..31e39466b23 100644 --- a/polly/lib/CodeGen/PPCGCodeGeneration.cpp +++ b/polly/lib/CodeGen/PPCGCodeGeneration.cpp @@ -275,7 +275,7 @@ static __isl_give isl_id_to_ast_expr *pollyBuildAstExprForStmt( for (MemoryAccess *Acc : *Stmt) { isl_map *AddrFunc = Acc->getAddressFunction(); AddrFunc = isl_map_intersect_domain(AddrFunc, Stmt->getDomain()); - isl_id *RefId = Acc->getId(); + isl_id *RefId = Acc->getId().release(); isl_pw_multi_aff *PMA = isl_pw_multi_aff_from_map(AddrFunc); isl_multi_pw_aff *MPA = isl_multi_pw_aff_from_pw_multi_aff(PMA); MPA = isl_multi_pw_aff_coalesce(MPA); @@ -2369,7 +2369,8 @@ public: isl_space *Space = isl_map_get_space(Relation); Space = isl_space_range(Space); Space = isl_space_from_range(Space); - Space = isl_space_set_tuple_id(Space, isl_dim_in, Acc->getId()); + Space = + isl_space_set_tuple_id(Space, isl_dim_in, Acc->getId().release()); isl_map *Universe = isl_map_universe(Space); Relation = isl_map_domain_product(Relation, Universe); Accesses = isl_union_map_add_map(Accesses, Relation); @@ -2510,12 +2511,12 @@ public: isl_space *Space = isl_map_get_space(Access->access); Space = isl_space_range(Space); Space = isl_space_from_range(Space); - Space = isl_space_set_tuple_id(Space, isl_dim_in, Acc->getId()); + Space = isl_space_set_tuple_id(Space, isl_dim_in, Acc->getId().release()); isl_map *Universe = isl_map_universe(Space); Access->tagged_access = isl_map_domain_product(Acc->getAccessRelation(), Universe); Access->exact_write = !Acc->isMayWrite(); - Access->ref_id = Acc->getId(); + Access->ref_id = Acc->getId().release(); Access->next = Accesses; Access->n_index = Acc->getScopArrayInfo()->getNumberOfDimensions(); Accesses = Access; |