[polly] r304841 - [ScopInfo] Translate getNonHoistableCtx to C++ [NFC]
Tobias Grosser via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 6 16:13:03 PDT 2017
Author: grosser
Date: Tue Jun 6 18:13:02 2017
New Revision: 304841
URL: http://llvm.org/viewvc/llvm-project?rev=304841&view=rev
Log:
[ScopInfo] Translate getNonHoistableCtx to C++ [NFC]
Modified:
polly/trunk/include/polly/ScopInfo.h
polly/trunk/lib/Analysis/ScopInfo.cpp
Modified: polly/trunk/include/polly/ScopInfo.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopInfo.h?rev=304841&r1=304840&r2=304841&view=diff
==============================================================================
--- polly/trunk/include/polly/ScopInfo.h (original)
+++ polly/trunk/include/polly/ScopInfo.h Tue Jun 6 18:13:02 2017
@@ -28,6 +28,8 @@
#include "isl/ctx.h"
#include "isl/set.h"
+#include "isl-noexceptions.h"
+
#include <deque>
#include <forward_list>
@@ -1898,8 +1900,7 @@ private:
MemoryAccess *lookupBasePtrAccess(MemoryAccess *MA);
/// Check if the base ptr of @p MA is in the SCoP but not hoistable.
- bool hasNonHoistableBasePtrInScop(MemoryAccess *MA,
- __isl_keep isl_union_map *Writes);
+ bool hasNonHoistableBasePtrInScop(MemoryAccess *MA, isl::union_map Writes);
/// Create equivalence classes for required invariant accesses.
///
@@ -1922,8 +1923,7 @@ private:
///
/// @return Return the context under which the access cannot be hoisted or a
/// nullptr if it cannot be hoisted at all.
- __isl_give isl_set *getNonHoistableCtx(MemoryAccess *Access,
- __isl_keep isl_union_map *Writes);
+ isl::set getNonHoistableCtx(MemoryAccess *Access, isl::union_map Writes);
/// Verify that all required invariant loads have been hoisted.
///
Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=304841&r1=304840&r2=304841&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Tue Jun 6 18:13:02 2017
@@ -3187,12 +3187,9 @@ MemoryAccess *Scop::lookupBasePtrAccess(
}
bool Scop::hasNonHoistableBasePtrInScop(MemoryAccess *MA,
- __isl_keep isl_union_map *Writes) {
+ isl::union_map Writes) {
if (auto *BasePtrMA = lookupBasePtrAccess(MA)) {
- auto *NHCtx = getNonHoistableCtx(BasePtrMA, Writes);
- bool Hoistable = NHCtx != nullptr;
- isl_set_free(NHCtx);
- return !Hoistable;
+ return getNonHoistableCtx(BasePtrMA, Writes).is_null();
}
Value *BaseAddr = MA->getOriginalBaseAddr();
@@ -3883,8 +3880,7 @@ void Scop::addInvariantLoads(ScopStmt &S
isl_set_free(DomainCtx);
}
-__isl_give isl_set *Scop::getNonHoistableCtx(MemoryAccess *Access,
- __isl_keep isl_union_map *Writes) {
+isl::set Scop::getNonHoistableCtx(MemoryAccess *Access, isl::union_map Writes) {
// TODO: Loads that are not loop carried, hence are in a statement with
// zero iterators, are by construction invariant, though we
// currently "hoist" them anyway. This is necessary because we allow
@@ -3911,49 +3907,41 @@ __isl_give isl_set *Scop::getNonHoistabl
if (hasNonHoistableBasePtrInScop(Access, Writes))
return nullptr;
- isl_map *AccessRelation = Access->getAccessRelation();
- assert(!isl_map_is_empty(AccessRelation));
+ isl::map AccessRelation = give(Access->getAccessRelation());
+ assert(!AccessRelation.is_empty());
- if (isl_map_involves_dims(AccessRelation, isl_dim_in, 0,
- Stmt.getNumIterators())) {
- isl_map_free(AccessRelation);
+ if (AccessRelation.involves_dims(isl::dim::in, 0, Stmt.getNumIterators()))
return nullptr;
- }
- AccessRelation = isl_map_intersect_domain(AccessRelation, Stmt.getDomain());
- isl_set *SafeToLoad;
+ AccessRelation = AccessRelation.intersect_domain(give(Stmt.getDomain()));
+ isl::set SafeToLoad;
auto &DL = getFunction().getParent()->getDataLayout();
if (isSafeToLoadUnconditionally(LI->getPointerOperand(), LI->getAlignment(),
DL)) {
- SafeToLoad =
- isl_set_universe(isl_space_range(isl_map_get_space(AccessRelation)));
- isl_map_free(AccessRelation);
+ SafeToLoad = isl::set::universe(AccessRelation.get_space().range());
} else if (BB != LI->getParent()) {
// Skip accesses in non-affine subregions as they might not be executed
// under the same condition as the entry of the non-affine subregion.
- isl_map_free(AccessRelation);
return nullptr;
} else {
- SafeToLoad = isl_map_range(AccessRelation);
+ SafeToLoad = AccessRelation.range();
}
- isl_union_map *Written = isl_union_map_intersect_range(
- isl_union_map_copy(Writes), isl_union_set_from_set(SafeToLoad));
- auto *WrittenCtx = isl_union_map_params(Written);
- bool IsWritten = !isl_set_is_empty(WrittenCtx);
+ isl::union_map Written = Writes.intersect_range(SafeToLoad);
+ isl::set WrittenCtx = Written.params();
+ bool IsWritten = !WrittenCtx.is_empty();
if (!IsWritten)
return WrittenCtx;
- WrittenCtx = isl_set_remove_divs(WrittenCtx);
- bool TooComplex = isl_set_n_basic_set(WrittenCtx) >= MaxDisjunctsInDomain;
- if (TooComplex || !isRequiredInvariantLoad(LI)) {
- isl_set_free(WrittenCtx);
+ WrittenCtx = WrittenCtx.remove_divs();
+ bool TooComplex =
+ isl_set_n_basic_set(WrittenCtx.get()) >= MaxDisjunctsInDomain;
+ if (TooComplex || !isRequiredInvariantLoad(LI))
return nullptr;
- }
- addAssumption(INVARIANTLOAD, isl_set_copy(WrittenCtx), LI->getDebugLoc(),
+ addAssumption(INVARIANTLOAD, WrittenCtx.copy(), LI->getDebugLoc(),
AS_RESTRICTION);
return WrittenCtx;
}
@@ -3974,20 +3962,19 @@ void Scop::hoistInvariantLoads() {
if (!PollyInvariantLoadHoisting)
return;
- isl_union_map *Writes = getWrites();
+ isl::union_map Writes = give(getWrites());
for (ScopStmt &Stmt : *this) {
InvariantAccessesTy InvariantAccesses;
for (MemoryAccess *Access : Stmt)
- if (auto *NHCtx = getNonHoistableCtx(Access, Writes))
- InvariantAccesses.push_back({Access, NHCtx});
+ if (isl::set NHCtx = getNonHoistableCtx(Access, Writes))
+ InvariantAccesses.push_back({Access, NHCtx.release()});
// Transfer the memory access from the statement to the SCoP.
for (auto InvMA : InvariantAccesses)
Stmt.removeMemoryAccess(InvMA.MA);
addInvariantLoads(Stmt, InvariantAccesses);
}
- isl_union_map_free(Writes);
}
/// Find the canonical scop array info object for a set of invariant load
More information about the llvm-commits
mailing list