[polly] 7c7978a - [Polly][Isl] Removing explicit operator bool() from isl C++ bindings. NFC.

via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 11 05:44:32 PDT 2021


Author: patacca
Date: 2021-06-11T14:44:24+02:00
New Revision: 7c7978a122fdd6eb1bc6300b3a2582108f13ff89

URL: https://github.com/llvm/llvm-project/commit/7c7978a122fdd6eb1bc6300b3a2582108f13ff89
DIFF: https://github.com/llvm/llvm-project/commit/7c7978a122fdd6eb1bc6300b3a2582108f13ff89.diff

LOG: [Polly][Isl] Removing explicit operator bool() from isl C++ bindings. NFC.

This is part of an effort to reduce the differences between the custom C++ bindings used right now by polly in `lib/External/isl/include/isl/isl-noxceptions.h` and the official isl C++ interface.

Changes made:
 - Removing explicit operator bool() from all the classes in the isl C++ bindings.
 - Replace each call to operator bool() to method `is_null()`.
 - isl-noexceptions.h has been generated by this https://github.com/patacca/isl/commit/27396daac5a5ee8228d25511a12f4a814c92ba8f

Reviewed By: Meinersbur

Differential Revision: https://reviews.llvm.org/D103976

Added: 
    

Modified: 
    polly/include/polly/ScopInfo.h
    polly/lib/Analysis/DependenceInfo.cpp
    polly/lib/Analysis/ScopBuilder.cpp
    polly/lib/Analysis/ScopInfo.cpp
    polly/lib/CodeGen/IslAst.cpp
    polly/lib/CodeGen/PPCGCodeGeneration.cpp
    polly/lib/Exchange/JSONExporter.cpp
    polly/lib/External/isl/include/isl/isl-noexceptions.h
    polly/lib/Support/ISLTools.cpp
    polly/lib/Support/SCEVAffinator.cpp
    polly/lib/Transform/DeLICM.cpp
    polly/lib/Transform/FlattenAlgo.cpp
    polly/lib/Transform/ForwardOpTree.cpp
    polly/lib/Transform/ManualOptimizer.cpp
    polly/lib/Transform/MatmulOptimizer.cpp
    polly/lib/Transform/ScheduleOptimizer.cpp
    polly/lib/Transform/ScheduleTreeTransform.cpp
    polly/lib/Transform/ZoneAlgo.cpp
    polly/unittests/DeLICM/DeLICMTest.cpp

Removed: 
    


################################################################################
diff  --git a/polly/include/polly/ScopInfo.h b/polly/include/polly/ScopInfo.h
index 289d1f2004f50..7f07af3d8d16e 100644
--- a/polly/include/polly/ScopInfo.h
+++ b/polly/include/polly/ScopInfo.h
@@ -2253,7 +2253,7 @@ class Scop {
   /// Return the define behavior context, or if not available, its approximation
   /// from all other contexts.
   isl::set getBestKnownDefinedBehaviorContext() const {
-    if (DefinedBehaviorContext)
+    if (!DefinedBehaviorContext.is_null())
       return DefinedBehaviorContext;
 
     return Context.intersect_params(AssumedContext).subtract(InvalidContext);

diff  --git a/polly/lib/Analysis/DependenceInfo.cpp b/polly/lib/Analysis/DependenceInfo.cpp
index 01b28ceec9f1e..895a38abac6cb 100644
--- a/polly/lib/Analysis/DependenceInfo.cpp
+++ b/polly/lib/Analysis/DependenceInfo.cpp
@@ -658,7 +658,7 @@ bool Dependences::isValidSchedule(
     assert(!StmtScat.is_null() &&
            "Schedules that contain extension nodes require special handling.");
 
-    if (!ScheduleSpace)
+    if (ScheduleSpace.is_null())
       ScheduleSpace = StmtScat.get_space().range();
 
     Schedule = Schedule.add_map(StmtScat);

diff  --git a/polly/lib/Analysis/ScopBuilder.cpp b/polly/lib/Analysis/ScopBuilder.cpp
index 38e257f4886d9..61e6e123a7acf 100644
--- a/polly/lib/Analysis/ScopBuilder.cpp
+++ b/polly/lib/Analysis/ScopBuilder.cpp
@@ -612,7 +612,7 @@ bool ScopBuilder::propagateDomainConstraints(
 
     BasicBlock *BB = getRegionNodeBasicBlock(RN);
     isl::set &Domain = scop->getOrInitEmptyDomain(BB);
-    assert(Domain);
+    assert(!Domain.is_null());
 
     // Under the union of all predecessor conditions we can reach this block.
     isl::set PredDom = getPredecessorDomainConstraints(BB, Domain);
@@ -653,7 +653,7 @@ void ScopBuilder::propagateDomainConstraintsToRegionExit(
   }
 
   isl::set Domain = scop->getOrInitEmptyDomain(BB);
-  assert(Domain && "Cannot propagate a nullptr");
+  assert(!Domain.is_null() && "Cannot propagate a nullptr");
 
   Loop *ExitBBLoop = getFirstNonBoxedLoopFor(ExitBB, LI, scop->getBoxedLoops());
 
@@ -664,7 +664,8 @@ void ScopBuilder::propagateDomainConstraintsToRegionExit(
 
   // If the exit domain is not yet created we set it otherwise we "add" the
   // current domain.
-  ExitDomain = ExitDomain ? AdjustedDomain.unite(ExitDomain) : AdjustedDomain;
+  ExitDomain =
+      !ExitDomain.is_null() ? AdjustedDomain.unite(ExitDomain) : AdjustedDomain;
 
   // Initialize the invalid domain.
   InvalidDomainMap[ExitBB] = ExitDomain.empty(ExitDomain.get_space());
@@ -970,7 +971,7 @@ bool ScopBuilder::buildDomainsWithBranchConstraints(
       // successor block.
       isl::set &SuccDomain = scop->getOrInitEmptyDomain(SuccBB);
 
-      if (SuccDomain) {
+      if (!SuccDomain.is_null()) {
         SuccDomain = SuccDomain.unite(CondSet).coalesce();
       } else {
         // Initialize the invalid domain.
@@ -1013,7 +1014,7 @@ bool ScopBuilder::propagateInvalidStmtDomains(
     bool ContainsErrorBlock = containsErrorBlock(RN, scop->getRegion(), LI, DT);
     BasicBlock *BB = getRegionNodeBasicBlock(RN);
     isl::set &Domain = scop->getOrInitEmptyDomain(BB);
-    assert(Domain && "Cannot propagate a nullptr");
+    assert(!Domain.is_null() && "Cannot propagate a nullptr");
 
     isl::set InvalidDomain = InvalidDomainMap[BB];
 
@@ -1131,9 +1132,9 @@ void ScopBuilder::buildScalarDependences(ScopStmt *UserStmt,
 // interpreted as the empty schedule. Can also return null if both schedules are
 // empty.
 static isl::schedule combineInSequence(isl::schedule Prev, isl::schedule Succ) {
-  if (!Prev)
+  if (Prev.is_null())
     return Succ;
-  if (!Succ)
+  if (Succ.is_null())
     return Prev;
 
   return Prev.sequence(Succ);
@@ -1155,7 +1156,7 @@ static isl::schedule combineInSequence(isl::schedule Prev, isl::schedule Succ) {
 // @returns      A mapping from USet to its N-th dimension.
 static isl::multi_union_pw_aff mapToDimension(isl::union_set USet, int N) {
   assert(N >= 0);
-  assert(USet);
+  assert(!USet.is_null());
   assert(!USet.is_empty());
 
   auto Result = isl::union_pw_multi_aff::empty(USet.get_space());
@@ -1288,7 +1289,7 @@ void ScopBuilder::buildSchedule(RegionNode *RN, LoopStackTy &LoopStack) {
     ++LoopData;
     --Dimension;
 
-    if (Schedule) {
+    if (!Schedule.is_null()) {
       isl::union_set Domain = Schedule.get_domain();
       isl::multi_union_pw_aff MUPA = mapToDimension(Domain, Dimension);
       Schedule = Schedule.insert_partial_schedule(MUPA);
@@ -1305,7 +1306,7 @@ void ScopBuilder::buildSchedule(RegionNode *RN, LoopStackTy &LoopStack) {
 
       // It is easier to insert the marks here that do it retroactively.
       isl::id IslLoopId = createIslLoopAttr(scop->getIslCtx(), L);
-      if (IslLoopId)
+      if (!IslLoopId.is_null())
         Schedule = Schedule.get_root()
                        .get_child(0)
                        .insert_mark(IslLoopId)
@@ -2808,9 +2809,11 @@ void ScopBuilder::hoistInvariantLoads() {
   for (ScopStmt &Stmt : *scop) {
     InvariantAccessesTy InvariantAccesses;
 
-    for (MemoryAccess *Access : Stmt)
-      if (isl::set NHCtx = getNonHoistableCtx(Access, Writes))
+    for (MemoryAccess *Access : Stmt) {
+      isl::set NHCtx = getNonHoistableCtx(Access, Writes);
+      if (!NHCtx.is_null())
         InvariantAccesses.push_back({Access, NHCtx});
+    }
 
     // Transfer the memory access from the statement to the SCoP.
     for (auto InvMA : InvariantAccesses)
@@ -3046,7 +3049,8 @@ void ScopBuilder::addInvariantLoads(ScopStmt &Stmt,
         if (!Values.count(AccInst))
           continue;
 
-        if (isl::id ParamId = scop->getIdForParam(Parameter)) {
+        isl::id ParamId = scop->getIdForParam(Parameter);
+        if (!ParamId.is_null()) {
           int Dim = DomainCtx.find_dim_by_id(isl::dim::param, ParamId);
           if (Dim >= 0)
             DomainCtx = DomainCtx.eliminate(isl::dim::param, Dim, 1);
@@ -3110,7 +3114,7 @@ void ScopBuilder::addInvariantLoads(ScopStmt &Stmt,
 
       // Unify the execution context of the class and this statement.
       isl::set IAClassDomainCtx = IAClass.ExecutionContext;
-      if (IAClassDomainCtx)
+      if (!IAClassDomainCtx.is_null())
         IAClassDomainCtx = IAClassDomainCtx.unite(MACtx).coalesce();
       else
         IAClassDomainCtx = MACtx;
@@ -3337,7 +3341,7 @@ static bool buildMinMaxAccess(isl::set Set,
   // enclose the accessed memory region by MinPMA and MaxPMA. The pointer
   // we test during code generation might now point after the end of the
   // allocated array but we will never dereference it anyway.
-  assert((!MaxPMA || MaxPMA.dim(isl::dim::out)) &&
+  assert((MaxPMA.is_null() || MaxPMA.dim(isl::dim::out)) &&
          "Assumed at least one output dimension");
 
   Pos = MaxPMA.dim(isl::dim::out) - 1;
@@ -3347,7 +3351,7 @@ static bool buildMinMaxAccess(isl::set Set,
   LastDimAff = LastDimAff.add(OneAff);
   MaxPMA = MaxPMA.set_pw_aff(Pos, LastDimAff);
 
-  if (!MinPMA || !MaxPMA)
+  if (MinPMA.is_null() || MaxPMA.is_null())
     return false;
 
   MinMaxAccesses.push_back(std::make_pair(MinPMA, MaxPMA));

diff  --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp
index fcc852b15acd3..917136226b397 100644
--- a/polly/lib/Analysis/ScopInfo.cpp
+++ b/polly/lib/Analysis/ScopInfo.cpp
@@ -307,7 +307,7 @@ void ScopArrayInfo::applyAndSetFAD(Value *FAD) {
     return;
   }
 
-  assert(DimensionSizesPw.size() > 0 && !DimensionSizesPw[0]);
+  assert(DimensionSizesPw.size() > 0 && DimensionSizesPw[0].is_null());
   assert(!this->FAD);
   this->FAD = FAD;
 
@@ -1068,7 +1068,7 @@ void MemoryAccess::setAccessRelation(isl::map NewAccess) {
 }
 
 void MemoryAccess::setNewAccessRelation(isl::map NewAccess) {
-  assert(NewAccess);
+  assert(!NewAccess.is_null());
 
 #ifndef NDEBUG
   // Check domain space compatibility.
@@ -1132,7 +1132,7 @@ isl::map ScopStmt::getSchedule() const {
   if (Domain.is_empty())
     return isl::map::from_aff(isl::aff(isl::local_space(getDomainSpace())));
   auto Schedule = getParent()->getSchedule();
-  if (!Schedule)
+  if (Schedule.is_null())
     return {};
   Schedule = Schedule.intersect_domain(isl::union_set(Domain));
   if (Schedule.is_empty())
@@ -1281,14 +1281,14 @@ void ScopStmt::print(raw_ostream &OS, bool PrintInstructions) const {
   OS << "\t" << getBaseName() << "\n";
   OS.indent(12) << "Domain :=\n";
 
-  if (Domain) {
+  if (!Domain.is_null()) {
     OS.indent(16) << getDomainStr() << ";\n";
   } else
     OS.indent(16) << "n/a\n";
 
   OS.indent(12) << "Schedule :=\n";
 
-  if (Domain) {
+  if (!Domain.is_null()) {
     OS.indent(16) << getScheduleStr() << ";\n";
   } else
     OS.indent(16) << "n/a\n";
@@ -1584,7 +1584,7 @@ static std::vector<isl::id> getFortranArrayIds(Scop::array_range Arrays) {
     // TODO: actually need to check if it has a FAD, but for now this works.
     if (Array->getNumberOfDimensions() > 0) {
       isl::pw_aff PwAff = Array->getDimensionSizePw(0);
-      if (!PwAff)
+      if (PwAff.is_null())
         continue;
 
       isl::id Id = PwAff.get_dim_id(isl::dim::param, 0);
@@ -1784,7 +1784,7 @@ void Scop::removeStmts(function_ref<bool(ScopStmt &)> ShouldDelete,
 void Scop::removeStmtNotInDomainMap() {
   removeStmts([this](ScopStmt &Stmt) -> bool {
     isl::set Domain = DomainMap.lookup(Stmt.getEntryBlock());
-    if (!Domain)
+    if (Domain.is_null())
       return true;
     return Domain.is_empty();
   });
@@ -1895,7 +1895,7 @@ ScopArrayInfo *Scop::getScopArrayInfo(Value *BasePtr, MemoryKind Kind) {
 std::string Scop::getContextStr() const { return getContext().to_str(); }
 
 std::string Scop::getAssumedContextStr() const {
-  assert(AssumedContext && "Assumed context not yet built");
+  assert(!AssumedContext.is_null() && "Assumed context not yet built");
   return AssumedContext.to_str();
 }
 
@@ -1950,7 +1950,7 @@ isl::space Scop::getFullParamSpace() const {
 }
 
 isl::set Scop::getAssumedContext() const {
-  assert(AssumedContext && "Assumed context not yet built");
+  assert(!AssumedContext.is_null() && "Assumed context not yet built");
   return AssumedContext;
 }
 
@@ -2134,7 +2134,7 @@ void Scop::addAssumption(AssumptionKind Kind, isl::set Set, DebugLoc Loc,
 }
 
 void Scop::intersectDefinedBehavior(isl::set Set, AssumptionSign Sign) {
-  if (!DefinedBehaviorContext)
+  if (DefinedBehaviorContext.is_null())
     return;
 
   if (Sign == AS_ASSUMPTION)
@@ -2171,7 +2171,7 @@ void Scop::printContext(raw_ostream &OS) const {
   OS.indent(4) << InvalidContext << "\n";
 
   OS.indent(4) << "Defined Behavior Context:\n";
-  if (DefinedBehaviorContext)
+  if (!DefinedBehaviorContext.is_null())
     OS.indent(4) << DefinedBehaviorContext << "\n";
   else
     OS.indent(4) << "<unavailable>\n";
@@ -2284,7 +2284,7 @@ __isl_give PWACtx Scop::getPwAff(const SCEV *E, BasicBlock *BB,
   // the SCoP and return a dummy value. This way we do not need to add error
   // handling code to all users of this function.
   auto PWAC = Affinator.getPwAff(E, BB, RecordedAssumptions);
-  if (PWAC.first) {
+  if (!PWAC.first.is_null()) {
     // TODO: We could use a heuristic and either use:
     //         SCEVAffinator::takeNonNegativeAssumption
     //       or

diff  --git a/polly/lib/CodeGen/IslAst.cpp b/polly/lib/CodeGen/IslAst.cpp
index 38daa19d88b1f..e09b781c59bfc 100644
--- a/polly/lib/CodeGen/IslAst.cpp
+++ b/polly/lib/CodeGen/IslAst.cpp
@@ -570,7 +570,7 @@ isl::ast_expr IslAstInfo::getRunCondition() { return Ast.getRunCondition(); }
 
 IslAstUserPayload *IslAstInfo::getNodePayload(const isl::ast_node &Node) {
   isl::id Id = Node.get_annotation();
-  if (!Id)
+  if (Id.is_null())
     return nullptr;
   IslAstUserPayload *Payload = (IslAstUserPayload *)Id.get_user();
   return Payload;

diff  --git a/polly/lib/CodeGen/PPCGCodeGeneration.cpp b/polly/lib/CodeGen/PPCGCodeGeneration.cpp
index 237ba44a46269..39f320af2d92c 100644
--- a/polly/lib/CodeGen/PPCGCodeGeneration.cpp
+++ b/polly/lib/CodeGen/PPCGCodeGeneration.cpp
@@ -278,7 +278,7 @@ static MustKillsInfo computeMustKillsInfo(const Scop &S) {
     isl::union_set KillStmtDomain = isl::set::universe(KillStmtSpace);
 
     isl::schedule KillSchedule = isl::schedule::from_domain(KillStmtDomain);
-    if (Info.KillsSchedule)
+    if (!Info.KillsSchedule.is_null())
       Info.KillsSchedule = isl::manage(
           isl_schedule_set(Info.KillsSchedule.release(), KillSchedule.copy()));
     else

diff  --git a/polly/lib/Exchange/JSONExporter.cpp b/polly/lib/Exchange/JSONExporter.cpp
index 453daef72f2d9..348778e108ead 100644
--- a/polly/lib/Exchange/JSONExporter.cpp
+++ b/polly/lib/Exchange/JSONExporter.cpp
@@ -219,7 +219,7 @@ static bool importContext(Scop &S, const json::Object &JScop) {
                                  JScop.getString("context").getValue().str()};
 
   // Check whether the context was parsed successfully.
-  if (!NewContext) {
+  if (NewContext.is_null()) {
     errs() << "The context was not parsed successfully by ISL.\n";
     return false;
   }

diff  --git a/polly/lib/External/isl/include/isl/isl-noexceptions.h b/polly/lib/External/isl/include/isl/isl-noexceptions.h
index 7232d4e463646..8fc3983bc5e20 100644
--- a/polly/lib/External/isl/include/isl/isl-noexceptions.h
+++ b/polly/lib/External/isl/include/isl/isl-noexceptions.h
@@ -246,7 +246,6 @@ class aff {
   inline __isl_keep isl_aff *get() const;
   inline __isl_give isl_aff *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -349,7 +348,6 @@ class aff_list {
   inline __isl_keep isl_aff_list *get() const;
   inline __isl_give isl_aff_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -394,7 +392,6 @@ class ast_build {
   inline __isl_keep isl_ast_build *get() const;
   inline __isl_give isl_ast_build *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
 
   inline ast_expr access_from(multi_pw_aff mpa) const;
@@ -434,7 +431,6 @@ class ast_expr {
   inline __isl_keep isl_ast_expr *get() const;
   inline __isl_give isl_ast_expr *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -492,7 +488,6 @@ class ast_expr_list {
   inline __isl_keep isl_ast_expr_list *get() const;
   inline __isl_give isl_ast_expr_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -536,7 +531,6 @@ class ast_node {
   inline __isl_keep isl_ast_node *get() const;
   inline __isl_give isl_ast_node *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -586,7 +580,6 @@ class ast_node_list {
   inline __isl_keep isl_ast_node_list *get() const;
   inline __isl_give isl_ast_node_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -631,7 +624,6 @@ class basic_map {
   inline __isl_keep isl_basic_map *get() const;
   inline __isl_give isl_basic_map *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -764,7 +756,6 @@ class basic_map_list {
   inline __isl_keep isl_basic_map_list *get() const;
   inline __isl_give isl_basic_map_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -810,7 +801,6 @@ class basic_set {
   inline __isl_keep isl_basic_set *get() const;
   inline __isl_give isl_basic_set *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -914,7 +904,6 @@ class basic_set_list {
   inline __isl_keep isl_basic_set_list *get() const;
   inline __isl_give isl_basic_set_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -959,7 +948,6 @@ class constraint {
   inline __isl_keep isl_constraint *get() const;
   inline __isl_give isl_constraint *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline void dump() const;
 
@@ -1007,7 +995,6 @@ class constraint_list {
   inline __isl_keep isl_constraint_list *get() const;
   inline __isl_give isl_constraint_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -1051,7 +1038,6 @@ class fixed_box {
   inline __isl_keep isl_fixed_box *get() const;
   inline __isl_give isl_fixed_box *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -1085,7 +1071,6 @@ class id {
   inline __isl_keep isl_id *get() const;
   inline __isl_give isl_id *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -1118,7 +1103,6 @@ class id_list {
   inline __isl_keep isl_id_list *get() const;
   inline __isl_give isl_id_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -1162,7 +1146,6 @@ class id_to_ast_expr {
   inline __isl_keep isl_id_to_ast_expr *get() const;
   inline __isl_give isl_id_to_ast_expr *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline void dump() const;
 
@@ -1197,7 +1180,6 @@ class local_space {
   inline __isl_keep isl_local_space *get() const;
   inline __isl_give isl_local_space *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline void dump() const;
 
@@ -1251,7 +1233,6 @@ class map {
   inline __isl_keep isl_map *get() const;
   inline __isl_give isl_map *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -1465,7 +1446,6 @@ class map_list {
   inline __isl_keep isl_map_list *get() const;
   inline __isl_give isl_map_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -1509,7 +1489,6 @@ class mat {
   inline __isl_keep isl_mat *get() const;
   inline __isl_give isl_mat *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline void dump() const;
 
@@ -1580,7 +1559,6 @@ class multi_aff {
   inline __isl_keep isl_multi_aff *get() const;
   inline __isl_give isl_multi_aff *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -1686,7 +1664,6 @@ class multi_id {
   inline __isl_keep isl_multi_id *get() const;
   inline __isl_give isl_multi_id *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -1741,7 +1718,6 @@ class multi_pw_aff {
   inline __isl_keep isl_multi_pw_aff *get() const;
   inline __isl_give isl_multi_pw_aff *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -1858,7 +1834,6 @@ class multi_union_pw_aff {
   inline __isl_keep isl_multi_union_pw_aff *get() const;
   inline __isl_give isl_multi_union_pw_aff *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -1954,7 +1929,6 @@ class multi_val {
   inline __isl_keep isl_multi_val *get() const;
   inline __isl_give isl_multi_val *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2037,7 +2011,6 @@ class point {
   inline __isl_keep isl_point *get() const;
   inline __isl_give isl_point *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2076,7 +2049,6 @@ class pw_aff {
   inline __isl_keep isl_pw_aff *get() const;
   inline __isl_give isl_pw_aff *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2197,7 +2169,6 @@ class pw_aff_list {
   inline __isl_keep isl_pw_aff_list *get() const;
   inline __isl_give isl_pw_aff_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2252,7 +2223,6 @@ class pw_multi_aff {
   inline __isl_keep isl_pw_multi_aff *get() const;
   inline __isl_give isl_pw_multi_aff *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2358,7 +2328,6 @@ class pw_multi_aff_list {
   inline __isl_keep isl_pw_multi_aff_list *get() const;
   inline __isl_give isl_pw_multi_aff_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2403,7 +2372,6 @@ class pw_qpolynomial {
   inline __isl_keep isl_pw_qpolynomial *get() const;
   inline __isl_give isl_pw_qpolynomial *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2482,7 +2450,6 @@ class pw_qpolynomial_fold_list {
   inline __isl_keep isl_pw_qpolynomial_fold_list *get() const;
   inline __isl_give isl_pw_qpolynomial_fold_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2511,7 +2478,6 @@ class pw_qpolynomial_list {
   inline __isl_keep isl_pw_qpolynomial_list *get() const;
   inline __isl_give isl_pw_qpolynomial_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2555,7 +2521,6 @@ class qpolynomial {
   inline __isl_keep isl_qpolynomial *get() const;
   inline __isl_give isl_qpolynomial *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline void dump() const;
 
@@ -2623,7 +2588,6 @@ class qpolynomial_list {
   inline __isl_keep isl_qpolynomial_list *get() const;
   inline __isl_give isl_qpolynomial_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2668,7 +2632,6 @@ class schedule {
   inline __isl_keep isl_schedule *get() const;
   inline __isl_give isl_schedule *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2713,7 +2676,6 @@ class schedule_constraints {
   inline __isl_keep isl_schedule_constraints *get() const;
   inline __isl_give isl_schedule_constraints *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2757,7 +2719,6 @@ class schedule_node {
   inline __isl_keep isl_schedule_node *get() const;
   inline __isl_give isl_schedule_node *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -2850,7 +2811,6 @@ class set {
   inline __isl_keep isl_set *get() const;
   inline __isl_give isl_set *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3032,7 +2992,6 @@ class set_list {
   inline __isl_keep isl_set_list *get() const;
   inline __isl_give isl_set_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3079,7 +3038,6 @@ class space {
   inline __isl_keep isl_space *get() const;
   inline __isl_give isl_space *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3182,7 +3140,6 @@ class term {
   inline __isl_keep isl_term *get() const;
   inline __isl_give isl_term *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
 
   inline isl_size dim(isl::dim type) const;
@@ -3214,7 +3171,6 @@ class union_access_info {
   inline __isl_keep isl_union_access_info *get() const;
   inline __isl_give isl_union_access_info *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
 
@@ -3248,7 +3204,6 @@ class union_flow {
   inline __isl_keep isl_union_flow *get() const;
   inline __isl_give isl_union_flow *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
 
@@ -3286,7 +3241,6 @@ class union_map {
   inline __isl_keep isl_union_map *get() const;
   inline __isl_give isl_union_map *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3426,7 +3380,6 @@ class union_map_list {
   inline __isl_keep isl_union_map_list *get() const;
   inline __isl_give isl_union_map_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3474,7 +3427,6 @@ class union_pw_aff {
   inline __isl_keep isl_union_pw_aff *get() const;
   inline __isl_give isl_union_pw_aff *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3546,7 +3498,6 @@ class union_pw_aff_list {
   inline __isl_keep isl_union_pw_aff_list *get() const;
   inline __isl_give isl_union_pw_aff_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3598,7 +3549,6 @@ class union_pw_multi_aff {
   inline __isl_keep isl_union_pw_multi_aff *get() const;
   inline __isl_give isl_union_pw_multi_aff *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3675,7 +3625,6 @@ class union_pw_multi_aff_list {
   inline __isl_keep isl_union_pw_multi_aff_list *get() const;
   inline __isl_give isl_union_pw_multi_aff_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3720,7 +3669,6 @@ class union_pw_qpolynomial {
   inline __isl_keep isl_union_pw_qpolynomial *get() const;
   inline __isl_give isl_union_pw_qpolynomial *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
 
@@ -3790,7 +3738,6 @@ class union_set {
   inline __isl_keep isl_union_set *get() const;
   inline __isl_give isl_union_set *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3880,7 +3827,6 @@ class union_set_list {
   inline __isl_keep isl_union_set_list *get() const;
   inline __isl_give isl_union_set_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -3927,7 +3873,6 @@ class val {
   inline __isl_keep isl_val *get() const;
   inline __isl_give isl_val *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -4010,7 +3955,6 @@ class val_list {
   inline __isl_keep isl_val_list *get() const;
   inline __isl_give isl_val_list *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline std::string to_str() const;
   inline void dump() const;
@@ -4054,7 +3998,6 @@ class vec {
   inline __isl_keep isl_vec *get() const;
   inline __isl_give isl_vec *release();
   inline bool is_null() const;
-  inline explicit operator bool() const;
   inline ctx get_ctx() const;
   inline void dump() const;
 
@@ -4149,9 +4092,6 @@ __isl_give isl_aff *aff::release() {
 bool aff::is_null() const {
   return ptr == nullptr;
 }
-aff::operator bool() const {
-  return !is_null();
-}
 
 
 ctx aff::get_ctx() const {
@@ -4667,9 +4607,6 @@ __isl_give isl_aff_list *aff_list::release() {
 bool aff_list::is_null() const {
   return ptr == nullptr;
 }
-aff_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx aff_list::get_ctx() const {
@@ -4843,9 +4780,6 @@ __isl_give isl_ast_build *ast_build::release() {
 bool ast_build::is_null() const {
   return ptr == nullptr;
 }
-ast_build::operator bool() const {
-  return !is_null();
-}
 
 
 ctx ast_build::get_ctx() const {
@@ -4981,9 +4915,6 @@ __isl_give isl_ast_expr *ast_expr::release() {
 bool ast_expr::is_null() const {
   return ptr == nullptr;
 }
-ast_expr::operator bool() const {
-  return !is_null();
-}
 
 
 ctx ast_expr::get_ctx() const {
@@ -5230,9 +5161,6 @@ __isl_give isl_ast_expr_list *ast_expr_list::release() {
 bool ast_expr_list::is_null() const {
   return ptr == nullptr;
 }
-ast_expr_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx ast_expr_list::get_ctx() const {
@@ -5401,9 +5329,6 @@ __isl_give isl_ast_node *ast_node::release() {
 bool ast_node::is_null() const {
   return ptr == nullptr;
 }
-ast_node::operator bool() const {
-  return !is_null();
-}
 
 
 ctx ast_node::get_ctx() const {
@@ -5602,9 +5527,6 @@ __isl_give isl_ast_node_list *ast_node_list::release() {
 bool ast_node_list::is_null() const {
   return ptr == nullptr;
 }
-ast_node_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx ast_node_list::get_ctx() const {
@@ -5778,9 +5700,6 @@ __isl_give isl_basic_map *basic_map::release() {
 bool basic_map::is_null() const {
   return ptr == nullptr;
 }
-basic_map::operator bool() const {
-  return !is_null();
-}
 
 
 ctx basic_map::get_ctx() const {
@@ -6485,9 +6404,6 @@ __isl_give isl_basic_map_list *basic_map_list::release() {
 bool basic_map_list::is_null() const {
   return ptr == nullptr;
 }
-basic_map_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx basic_map_list::get_ctx() const {
@@ -6666,9 +6582,6 @@ __isl_give isl_basic_set *basic_set::release() {
 bool basic_set::is_null() const {
   return ptr == nullptr;
 }
-basic_set::operator bool() const {
-  return !is_null();
-}
 
 
 ctx basic_set::get_ctx() const {
@@ -7207,9 +7120,6 @@ __isl_give isl_basic_set_list *basic_set_list::release() {
 bool basic_set_list::is_null() const {
   return ptr == nullptr;
 }
-basic_set_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx basic_set_list::get_ctx() const {
@@ -7384,9 +7294,6 @@ __isl_give isl_constraint *constraint::release() {
 bool constraint::is_null() const {
   return ptr == nullptr;
 }
-constraint::operator bool() const {
-  return !is_null();
-}
 
 
 ctx constraint::get_ctx() const {
@@ -7569,9 +7476,6 @@ __isl_give isl_constraint_list *constraint_list::release() {
 bool constraint_list::is_null() const {
   return ptr == nullptr;
 }
-constraint_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx constraint_list::get_ctx() const {
@@ -7740,9 +7644,6 @@ __isl_give isl_fixed_box *fixed_box::release() {
 bool fixed_box::is_null() const {
   return ptr == nullptr;
 }
-fixed_box::operator bool() const {
-  return !is_null();
-}
 
 
 ctx fixed_box::get_ctx() const {
@@ -7842,9 +7743,6 @@ __isl_give isl_id *id::release() {
 bool id::is_null() const {
   return ptr == nullptr;
 }
-id::operator bool() const {
-  return !is_null();
-}
 
 
 ctx id::get_ctx() const {
@@ -7940,9 +7838,6 @@ __isl_give isl_id_list *id_list::release() {
 bool id_list::is_null() const {
   return ptr == nullptr;
 }
-id_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx id_list::get_ctx() const {
@@ -8111,9 +8006,6 @@ __isl_give isl_id_to_ast_expr *id_to_ast_expr::release() {
 bool id_to_ast_expr::is_null() const {
   return ptr == nullptr;
 }
-id_to_ast_expr::operator bool() const {
-  return !is_null();
-}
 
 
 ctx id_to_ast_expr::get_ctx() const {
@@ -8224,9 +8116,6 @@ __isl_give isl_local_space *local_space::release() {
 bool local_space::is_null() const {
   return ptr == nullptr;
 }
-local_space::operator bool() const {
-  return !is_null();
-}
 
 
 ctx local_space::get_ctx() const {
@@ -8443,9 +8332,6 @@ __isl_give isl_map *map::release() {
 bool map::is_null() const {
   return ptr == nullptr;
 }
-map::operator bool() const {
-  return !is_null();
-}
 
 
 ctx map::get_ctx() const {
@@ -9636,9 +9522,6 @@ __isl_give isl_map_list *map_list::release() {
 bool map_list::is_null() const {
   return ptr == nullptr;
 }
-map_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx map_list::get_ctx() const {
@@ -9807,9 +9690,6 @@ __isl_give isl_mat *mat::release() {
 bool mat::is_null() const {
   return ptr == nullptr;
 }
-mat::operator bool() const {
-  return !is_null();
-}
 
 
 ctx mat::get_ctx() const {
@@ -10126,9 +10006,6 @@ __isl_give isl_multi_aff *multi_aff::release() {
 bool multi_aff::is_null() const {
   return ptr == nullptr;
 }
-multi_aff::operator bool() const {
-  return !is_null();
-}
 
 
 ctx multi_aff::get_ctx() const {
@@ -10660,9 +10537,6 @@ __isl_give isl_multi_id *multi_id::release() {
 bool multi_id::is_null() const {
   return ptr == nullptr;
 }
-multi_id::operator bool() const {
-  return !is_null();
-}
 
 
 ctx multi_id::get_ctx() const {
@@ -10883,9 +10757,6 @@ __isl_give isl_multi_pw_aff *multi_pw_aff::release() {
 bool multi_pw_aff::is_null() const {
   return ptr == nullptr;
 }
-multi_pw_aff::operator bool() const {
-  return !is_null();
-}
 
 
 ctx multi_pw_aff::get_ctx() const {
@@ -11480,9 +11351,6 @@ __isl_give isl_multi_union_pw_aff *multi_union_pw_aff::release() {
 bool multi_union_pw_aff::is_null() const {
   return ptr == nullptr;
 }
-multi_union_pw_aff::operator bool() const {
-  return !is_null();
-}
 
 
 ctx multi_union_pw_aff::get_ctx() const {
@@ -11954,9 +11822,6 @@ __isl_give isl_multi_val *multi_val::release() {
 bool multi_val::is_null() const {
   return ptr == nullptr;
 }
-multi_val::operator bool() const {
-  return !is_null();
-}
 
 
 ctx multi_val::get_ctx() const {
@@ -12351,9 +12216,6 @@ __isl_give isl_point *point::release() {
 bool point::is_null() const {
   return ptr == nullptr;
 }
-point::operator bool() const {
-  return !is_null();
-}
 
 
 ctx point::get_ctx() const {
@@ -12480,9 +12342,6 @@ __isl_give isl_pw_aff *pw_aff::release() {
 bool pw_aff::is_null() const {
   return ptr == nullptr;
 }
-pw_aff::operator bool() const {
-  return !is_null();
-}
 
 
 ctx pw_aff::get_ctx() const {
@@ -13114,9 +12973,6 @@ __isl_give isl_pw_aff_list *pw_aff_list::release() {
 bool pw_aff_list::is_null() const {
   return ptr == nullptr;
 }
-pw_aff_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx pw_aff_list::get_ctx() const {
@@ -13348,9 +13204,6 @@ __isl_give isl_pw_multi_aff *pw_multi_aff::release() {
 bool pw_multi_aff::is_null() const {
   return ptr == nullptr;
 }
-pw_multi_aff::operator bool() const {
-  return !is_null();
-}
 
 
 ctx pw_multi_aff::get_ctx() const {
@@ -13893,9 +13746,6 @@ __isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() {
 bool pw_multi_aff_list::is_null() const {
   return ptr == nullptr;
 }
-pw_multi_aff_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx pw_multi_aff_list::get_ctx() const {
@@ -14069,9 +13919,6 @@ __isl_give isl_pw_qpolynomial *pw_qpolynomial::release() {
 bool pw_qpolynomial::is_null() const {
   return ptr == nullptr;
 }
-pw_qpolynomial::operator bool() const {
-  return !is_null();
-}
 
 
 ctx pw_qpolynomial::get_ctx() const {
@@ -14450,9 +14297,6 @@ __isl_give isl_pw_qpolynomial_fold_list *pw_qpolynomial_fold_list::release() {
 bool pw_qpolynomial_fold_list::is_null() const {
   return ptr == nullptr;
 }
-pw_qpolynomial_fold_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx pw_qpolynomial_fold_list::get_ctx() const {
@@ -14524,9 +14368,6 @@ __isl_give isl_pw_qpolynomial_list *pw_qpolynomial_list::release() {
 bool pw_qpolynomial_list::is_null() const {
   return ptr == nullptr;
 }
-pw_qpolynomial_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx pw_qpolynomial_list::get_ctx() const {
@@ -14695,9 +14536,6 @@ __isl_give isl_qpolynomial *qpolynomial::release() {
 bool qpolynomial::is_null() const {
   return ptr == nullptr;
 }
-qpolynomial::operator bool() const {
-  return !is_null();
-}
 
 
 ctx qpolynomial::get_ctx() const {
@@ -15015,9 +14853,6 @@ __isl_give isl_qpolynomial_list *qpolynomial_list::release() {
 bool qpolynomial_list::is_null() const {
   return ptr == nullptr;
 }
-qpolynomial_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx qpolynomial_list::get_ctx() const {
@@ -15191,9 +15026,6 @@ __isl_give isl_schedule *schedule::release() {
 bool schedule::is_null() const {
   return ptr == nullptr;
 }
-schedule::operator bool() const {
-  return !is_null();
-}
 
 
 ctx schedule::get_ctx() const {
@@ -15359,9 +15191,6 @@ __isl_give isl_schedule_constraints *schedule_constraints::release() {
 bool schedule_constraints::is_null() const {
   return ptr == nullptr;
 }
-schedule_constraints::operator bool() const {
-  return !is_null();
-}
 
 
 ctx schedule_constraints::get_ctx() const {
@@ -15522,9 +15351,6 @@ __isl_give isl_schedule_node *schedule_node::release() {
 bool schedule_node::is_null() const {
   return ptr == nullptr;
 }
-schedule_node::operator bool() const {
-  return !is_null();
-}
 
 
 ctx schedule_node::get_ctx() const {
@@ -15983,9 +15809,6 @@ __isl_give isl_set *set::release() {
 bool set::is_null() const {
   return ptr == nullptr;
 }
-set::operator bool() const {
-  return !is_null();
-}
 
 
 ctx set::get_ctx() const {
@@ -16992,9 +16815,6 @@ __isl_give isl_set_list *set_list::release() {
 bool set_list::is_null() const {
   return ptr == nullptr;
 }
-set_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx set_list::get_ctx() const {
@@ -17179,9 +16999,6 @@ __isl_give isl_space *space::release() {
 bool space::is_null() const {
   return ptr == nullptr;
 }
-space::operator bool() const {
-  return !is_null();
-}
 
 
 ctx space::get_ctx() const {
@@ -17698,9 +17515,6 @@ __isl_give isl_term *term::release() {
 bool term::is_null() const {
   return ptr == nullptr;
 }
-term::operator bool() const {
-  return !is_null();
-}
 
 
 ctx term::get_ctx() const {
@@ -17787,9 +17601,6 @@ __isl_give isl_union_access_info *union_access_info::release() {
 bool union_access_info::is_null() const {
   return ptr == nullptr;
 }
-union_access_info::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_access_info::get_ctx() const {
@@ -17892,9 +17703,6 @@ __isl_give isl_union_flow *union_flow::release() {
 bool union_flow::is_null() const {
   return ptr == nullptr;
 }
-union_flow::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_flow::get_ctx() const {
@@ -18017,9 +17825,6 @@ __isl_give isl_union_map *union_map::release() {
 bool union_map::is_null() const {
   return ptr == nullptr;
 }
-union_map::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_map::get_ctx() const {
@@ -18764,9 +18569,6 @@ __isl_give isl_union_map_list *union_map_list::release() {
 bool union_map_list::is_null() const {
   return ptr == nullptr;
 }
-union_map_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_map_list::get_ctx() const {
@@ -18955,9 +18757,6 @@ __isl_give isl_union_pw_aff *union_pw_aff::release() {
 bool union_pw_aff::is_null() const {
   return ptr == nullptr;
 }
-union_pw_aff::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_pw_aff::get_ctx() const {
@@ -19294,9 +19093,6 @@ __isl_give isl_union_pw_aff_list *union_pw_aff_list::release() {
 bool union_pw_aff_list::is_null() const {
   return ptr == nullptr;
 }
-union_pw_aff_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_pw_aff_list::get_ctx() const {
@@ -19505,9 +19301,6 @@ __isl_give isl_union_pw_multi_aff *union_pw_multi_aff::release() {
 bool union_pw_multi_aff::is_null() const {
   return ptr == nullptr;
 }
-union_pw_multi_aff::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_pw_multi_aff::get_ctx() const {
@@ -19874,9 +19667,6 @@ __isl_give isl_union_pw_multi_aff_list *union_pw_multi_aff_list::release() {
 bool union_pw_multi_aff_list::is_null() const {
   return ptr == nullptr;
 }
-union_pw_multi_aff_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_pw_multi_aff_list::get_ctx() const {
@@ -20050,9 +19840,6 @@ __isl_give isl_union_pw_qpolynomial *union_pw_qpolynomial::release() {
 bool union_pw_qpolynomial::is_null() const {
   return ptr == nullptr;
 }
-union_pw_qpolynomial::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_pw_qpolynomial::get_ctx() const {
@@ -20375,9 +20162,6 @@ __isl_give isl_union_set *union_set::release() {
 bool union_set::is_null() const {
   return ptr == nullptr;
 }
-union_set::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_set::get_ctx() const {
@@ -20830,9 +20614,6 @@ __isl_give isl_union_set_list *union_set_list::release() {
 bool union_set_list::is_null() const {
   return ptr == nullptr;
 }
-union_set_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx union_set_list::get_ctx() const {
@@ -21017,9 +20798,6 @@ __isl_give isl_val *val::release() {
 bool val::is_null() const {
   return ptr == nullptr;
 }
-val::operator bool() const {
-  return !is_null();
-}
 
 
 ctx val::get_ctx() const {
@@ -21414,9 +21192,6 @@ __isl_give isl_val_list *val_list::release() {
 bool val_list::is_null() const {
   return ptr == nullptr;
 }
-val_list::operator bool() const {
-  return !is_null();
-}
 
 
 ctx val_list::get_ctx() const {
@@ -21585,9 +21360,6 @@ __isl_give isl_vec *vec::release() {
 bool vec::is_null() const {
   return ptr == nullptr;
 }
-vec::operator bool() const {
-  return !is_null();
-}
 
 
 ctx vec::get_ctx() const {

diff  --git a/polly/lib/Support/ISLTools.cpp b/polly/lib/Support/ISLTools.cpp
index 062a5c10ee3ae..954944c7682fc 100644
--- a/polly/lib/Support/ISLTools.cpp
+++ b/polly/lib/Support/ISLTools.cpp
@@ -49,7 +49,7 @@ isl::multi_aff makeShiftDimAff(isl::space Space, int Pos, int Amount) {
 isl::basic_map makeTupleSwapBasicMap(isl::space FromSpace1,
                                      isl::space FromSpace2) {
   // Fast-path on out-of-quota.
-  if (!FromSpace1 || !FromSpace2)
+  if (FromSpace1.is_null() || FromSpace2.is_null())
     return {};
 
   assert(FromSpace1.is_set());
@@ -132,27 +132,29 @@ isl::union_map polly::betweenScatter(isl::union_map From, isl::union_map To,
 }
 
 isl::map polly::singleton(isl::union_map UMap, isl::space ExpectedSpace) {
-  if (!UMap)
+  if (UMap.is_null())
     return {};
 
   if (isl_union_map_n_map(UMap.get()) == 0)
     return isl::map::empty(ExpectedSpace);
 
   isl::map Result = isl::map::from_union_map(UMap);
-  assert(!Result || Result.get_space().has_equal_tuples(ExpectedSpace));
+  assert(Result.is_null() ||
+         Result.get_space().has_equal_tuples(ExpectedSpace));
 
   return Result;
 }
 
 isl::set polly::singleton(isl::union_set USet, isl::space ExpectedSpace) {
-  if (!USet)
+  if (USet.is_null())
     return {};
 
   if (isl_union_set_n_set(USet.get()) == 0)
     return isl::set::empty(ExpectedSpace);
 
   isl::set Result(USet);
-  assert(!Result || Result.get_space().has_equal_tuples(ExpectedSpace));
+  assert(Result.is_null() ||
+         Result.get_space().has_equal_tuples(ExpectedSpace));
 
   return Result;
 }
@@ -160,7 +162,7 @@ isl::set polly::singleton(isl::union_set USet, isl::space ExpectedSpace) {
 isl_size polly::getNumScatterDims(const isl::union_map &Schedule) {
   isl_size Dims = 0;
   for (isl::map Map : Schedule.get_map_list()) {
-    if (!Map)
+    if (Map.is_null())
       continue;
 
     Dims = std::max(Dims, Map.dim(isl::dim::out));
@@ -169,7 +171,7 @@ isl_size polly::getNumScatterDims(const isl::union_map &Schedule) {
 }
 
 isl::space polly::getScatterSpace(const isl::union_map &Schedule) {
-  if (!Schedule)
+  if (Schedule.is_null())
     return {};
   unsigned Dims = getNumScatterDims(Schedule);
   isl::space ScatterSpace = Schedule.get_space().set_from_params();
@@ -444,16 +446,16 @@ isl::map polly::distributeDomain(isl::map Map) {
 
   isl::space Space = Map.get_space();
   isl::space DomainSpace = Space.domain();
-  if (!DomainSpace)
+  if (DomainSpace.is_null())
     return {};
   unsigned DomainDims = DomainSpace.dim(isl::dim::set);
   isl::space RangeSpace = Space.range().unwrap();
   isl::space Range1Space = RangeSpace.domain();
-  if (!Range1Space)
+  if (Range1Space.is_null())
     return {};
   unsigned Range1Dims = Range1Space.dim(isl::dim::set);
   isl::space Range2Space = RangeSpace.range();
-  if (!Range2Space)
+  if (Range2Space.is_null())
     return {};
   unsigned Range2Dims = Range2Space.dim(isl::dim::set);
 
@@ -539,7 +541,7 @@ isl::val polly::getConstant(isl::pw_aff PwAff, bool Max, bool Min) {
   isl::val Result;
   isl::stat Stat = PwAff.foreach_piece(
       [=, &Result](isl::set Set, isl::aff Aff) -> isl::stat {
-        if (Result && Result.is_nan())
+        if (!Result.is_null() && Result.is_nan())
           return isl::stat::ok();
 
         // TODO: If Min/Max, we can also determine a minimum/maximum value if
@@ -550,7 +552,7 @@ isl::val polly::getConstant(isl::pw_aff PwAff, bool Max, bool Min) {
         }
 
         isl::val ThisVal = Aff.get_constant_val();
-        if (!Result) {
+        if (Result.is_null()) {
           Result = ThisVal;
           return isl::stat::ok();
         }
@@ -600,7 +602,7 @@ static void foreachPoint(isl::basic_set BSet,
 /// dimensions are considered first.
 static int flatCompare(const isl::basic_set &A, const isl::basic_set &B) {
   // Quick bail-out on out-of-quota.
-  if (!A || !B)
+  if (A.is_null() || B.is_null())
     return 0;
 
   unsigned ALen = A.dim(isl::dim::set);
@@ -728,7 +730,7 @@ static bool orderComparer(const isl::basic_set &A, const isl::basic_set &B) {
 ///                 unwrapped before printing to again appear as a map.
 static void printSortedPolyhedra(isl::union_set USet, llvm::raw_ostream &OS,
                                  bool Simplify, bool IsMap) {
-  if (!USet) {
+  if (USet.is_null()) {
     OS << "<null>\n";
     return;
   }

diff  --git a/polly/lib/Support/SCEVAffinator.cpp b/polly/lib/Support/SCEVAffinator.cpp
index 1691b2aa242b8..abb26357f779e 100644
--- a/polly/lib/Support/SCEVAffinator.cpp
+++ b/polly/lib/Support/SCEVAffinator.cpp
@@ -197,7 +197,7 @@ PWACtx SCEVAffinator::visit(const SCEV *Expr) {
 
   auto Key = std::make_pair(Expr, BB);
   PWACtx PWAC = CachedExpressions[Key];
-  if (PWAC.first)
+  if (!PWAC.first.is_null())
     return PWAC;
 
   auto ConstantAndLeftOverPair = extractConstantFactor(Expr, SE);

diff  --git a/polly/lib/Transform/DeLICM.cpp b/polly/lib/Transform/DeLICM.cpp
index 0380f8adb3798..13b281a2fd86a 100644
--- a/polly/lib/Transform/DeLICM.cpp
+++ b/polly/lib/Transform/DeLICM.cpp
@@ -239,15 +239,16 @@ class Knowledge {
   void checkConsistency() const {
 #ifndef NDEBUG
     // Default-initialized object
-    if (!Occupied && !Unused && !Known && !Written)
+    if (Occupied.is_null() && Unused.is_null() && Known.is_null() &&
+        Written.is_null())
       return;
 
-    assert(Occupied || Unused);
-    assert(Known);
-    assert(Written);
+    assert(!Occupied.is_null() || !Unused.is_null());
+    assert(!Known.is_null());
+    assert(!Written.is_null());
 
     // If not all fields are defined, we cannot derived the universe.
-    if (!Occupied || !Unused)
+    if (Occupied.is_null() || Unused.is_null())
       return;
 
     assert(Occupied.is_disjoint(Unused));
@@ -272,16 +273,19 @@ class Knowledge {
   }
 
   /// Return whether this object was not default-constructed.
-  bool isUsable() const { return (Occupied || Unused) && Known && Written; }
+  bool isUsable() const {
+    return (Occupied.is_null() || Unused.is_null()) && !Known.is_null() &&
+           !Written.is_null();
+  }
 
   /// Print the content of this object to @p OS.
   void print(llvm::raw_ostream &OS, unsigned Indent = 0) const {
     if (isUsable()) {
-      if (Occupied)
+      if (!Occupied.is_null())
         OS.indent(Indent) << "Occupied: " << Occupied << "\n";
       else
         OS.indent(Indent) << "Occupied: <Everything else not in Unused>\n";
-      if (Unused)
+      if (!Unused.is_null())
         OS.indent(Indent) << "Unused:   " << Unused << "\n";
       else
         OS.indent(Indent) << "Unused:   <Everything else not in Occupied>\n";
@@ -295,13 +299,13 @@ class Knowledge {
   /// Combine two knowledges, this and @p That.
   void learnFrom(Knowledge That) {
     assert(!isConflicting(*this, That));
-    assert(Unused && That.Occupied);
+    assert(!Unused.is_null() && !That.Occupied.is_null());
     assert(
-        !That.Unused &&
+        That.Unused.is_null() &&
         "This function is only prepared to learn occupied elements from That");
-    assert(!Occupied && "This function does not implement "
-                        "`this->Occupied = "
-                        "this->Occupied.unite(That.Occupied);`");
+    assert(Occupied.is_null() && "This function does not implement "
+                                 "`this->Occupied = "
+                                 "this->Occupied.unite(That.Occupied);`");
 
     Unused = Unused.subtract(That.Occupied);
     Known = Known.unite(That.Known);
@@ -332,11 +336,11 @@ class Knowledge {
                             const Knowledge &Proposed,
                             llvm::raw_ostream *OS = nullptr,
                             unsigned Indent = 0) {
-    assert(Existing.Unused);
-    assert(Proposed.Occupied);
+    assert(!Existing.Unused.is_null());
+    assert(!Proposed.Occupied.is_null());
 
 #ifndef NDEBUG
-    if (Existing.Occupied && Proposed.Unused) {
+    if (!Existing.Occupied.is_null() && !Proposed.Unused.is_null()) {
       auto ExistingUniverse = Existing.Occupied.unite(Existing.Unused);
       auto ProposedUniverse = Proposed.Occupied.unite(Proposed.Unused);
       assert(ExistingUniverse.is_equal(ProposedUniverse) &&
@@ -867,7 +871,7 @@ class DeLICMImpl : public ZoneAlgorithm {
 
     // { DomainRead[] -> DomainWrite[] }
     auto PerPHIWrites = computePerPHI(SAI);
-    if (!PerPHIWrites) {
+    if (PerPHIWrites.is_null()) {
       LLVM_DEBUG(
           dbgs() << "    Reject because cannot determine incoming values\n");
       return false;
@@ -1203,7 +1207,7 @@ class DeLICMImpl : public ZoneAlgorithm {
     }
     DeLICMAnalyzed++;
 
-    if (!EltUnused || !EltKnown || !EltWritten) {
+    if (EltUnused.is_null() || EltKnown.is_null() || EltWritten.is_null()) {
       assert(isl_ctx_last_error(IslCtx.get()) == isl_error_quota &&
              "The only reason that these things have not been computed should "
              "be if the max-operations limit hit");

diff  --git a/polly/lib/Transform/FlattenAlgo.cpp b/polly/lib/Transform/FlattenAlgo.cpp
index 7cafd837cdb08..c1ab8fd136f08 100644
--- a/polly/lib/Transform/FlattenAlgo.cpp
+++ b/polly/lib/Transform/FlattenAlgo.cpp
@@ -48,7 +48,7 @@ bool isDimBoundedByParameter(isl::set Set, unsigned dim) {
 /// Whether BMap's first out-dimension is not a constant.
 bool isVariableDim(const isl::basic_map &BMap) {
   auto FixedVal = BMap.plain_get_val_if_fixed(isl::dim::out, 0);
-  return !FixedVal || FixedVal.is_nan();
+  return FixedVal.is_null() || FixedVal.is_nan();
 }
 
 /// Whether Map's first out dimension is no constant nor piecewise constant.
@@ -132,7 +132,7 @@ isl::union_map scheduleProjectOut(const isl::union_map &UMap, unsigned first,
 isl_size scheduleScatterDims(const isl::union_map &Schedule) {
   isl_size Dims = 0;
   for (isl::map Map : Schedule.get_map_list()) {
-    if (!Map)
+    if (Map.is_null())
       continue;
 
     Dims = std::max(Dims, Map.dim(isl::dim::out));
@@ -285,7 +285,8 @@ isl::union_map tryFlattenLoop(isl::union_map Schedule) {
   LLVM_DEBUG(dbgs() << "Max bound:\n  " << Max << "\n");
   auto MaxVal = getConstant(Max, true, false);
 
-  if (!MinVal || !MaxVal || MinVal.is_nan() || MaxVal.is_nan()) {
+  if (MinVal.is_null() || MaxVal.is_null() || MinVal.is_nan() ||
+      MaxVal.is_nan()) {
     LLVM_DEBUG(dbgs() << "Abort; dimension bounds could not be determined\n");
     return {};
   }
@@ -328,20 +329,20 @@ isl::union_map polly::flattenSchedule(isl::union_map Schedule) {
   if (!isVariableDim(Schedule)) {
     LLVM_DEBUG(dbgs() << "Fixed dimension; try sequence flattening\n");
     auto NewScheduleSequence = tryFlattenSequence(Schedule);
-    if (NewScheduleSequence)
+    if (!NewScheduleSequence.is_null())
       return NewScheduleSequence;
   }
 
   // Constant stride
   LLVM_DEBUG(dbgs() << "Try loop flattening\n");
   auto NewScheduleLoop = tryFlattenLoop(Schedule);
-  if (NewScheduleLoop)
+  if (!NewScheduleLoop.is_null())
     return NewScheduleLoop;
 
   // Try again without loop condition (may blow up the number of pieces!!)
   LLVM_DEBUG(dbgs() << "Try sequence flattening again\n");
   auto NewScheduleSequence = tryFlattenSequence(Schedule);
-  if (NewScheduleSequence)
+  if (!NewScheduleSequence.is_null())
     return NewScheduleSequence;
 
   // Cannot flatten

diff  --git a/polly/lib/Transform/ForwardOpTree.cpp b/polly/lib/Transform/ForwardOpTree.cpp
index d3b5d4c8b4695..cd8fa262c44f0 100644
--- a/polly/lib/Transform/ForwardOpTree.cpp
+++ b/polly/lib/Transform/ForwardOpTree.cpp
@@ -363,7 +363,7 @@ class ForwardOpTreeImpl : ZoneAlgorithm {
       Translator = makeIdentityMap(Known.range(), false);
     }
 
-    if (!Known || !Translator || !NormalizeMap) {
+    if (Known.is_null() || Translator.is_null() || NormalizeMap.is_null()) {
       assert(isl_ctx_last_error(IslCtx.get()) == isl_error_quota);
       Known = {};
       Translator = {};
@@ -525,7 +525,7 @@ class ForwardOpTreeImpl : ZoneAlgorithm {
     isl::union_map Candidates = findSameContentElements(TranslatedExpectedVal);
 
     isl::map SameVal = singleLocation(Candidates, getDomainFor(TargetStmt));
-    if (!SameVal)
+    if (SameVal.is_null())
       return ForwardingAction::notApplicable();
 
     LLVM_DEBUG(dbgs() << "      expected values where " << TargetExpectedVal
@@ -571,7 +571,7 @@ class ForwardOpTreeImpl : ZoneAlgorithm {
       LLVM_DEBUG(dbgs() << "      local translator is " << LocalTranslator
                         << "\n");
 
-      if (!LocalTranslator)
+      if (LocalTranslator.is_null())
         return ForwardingAction::notApplicable();
     }
 
@@ -583,7 +583,7 @@ class ForwardOpTreeImpl : ZoneAlgorithm {
                         << Access << "\n");
       (void)Access;
 
-      if (LocalTranslator)
+      if (!LocalTranslator.is_null())
         Translator = Translator.add_map(LocalTranslator);
 
       NumKnownLoadsForwarded++;
@@ -634,7 +634,7 @@ class ForwardOpTreeImpl : ZoneAlgorithm {
 
     isl::map SameVal = singleLocation(Candidates, getDomainFor(TargetStmt));
     simplify(SameVal);
-    if (!SameVal)
+    if (SameVal.is_null())
       return ForwardingAction::notApplicable();
 
     auto ExecAction = [this, TargetStmt, Inst, SameVal]() {

diff  --git a/polly/lib/Transform/ManualOptimizer.cpp b/polly/lib/Transform/ManualOptimizer.cpp
index 91f309eb6fd35..2622f682d7a4c 100644
--- a/polly/lib/Transform/ManualOptimizer.cpp
+++ b/polly/lib/Transform/ManualOptimizer.cpp
@@ -55,7 +55,7 @@ static isl::schedule applyLoopUnroll(MDNode *LoopMD,
   if (UnrollMode & TM_Disable)
     return {};
 
-  assert(BandToUnroll);
+  assert(!BandToUnroll.is_null());
   // TODO: Isl's codegen also supports unrolling by isl_ast_build via
   // isl_schedule_node_band_set_ast_build_options({ unroll[x] }) which would be
   // more efficient because the content duplication is delayed. However, the
@@ -111,7 +111,7 @@ class SearchTransformVisitor
   void visitBand(const isl::schedule_node &Band) {
     // Transform inner loops first (depth-first search).
     getBase().visitBand(Band);
-    if (Result)
+    if (!Result.is_null())
       return;
 
     // Since it is (currently) not possible to have a BandAttr marker that is
@@ -144,7 +144,7 @@ class SearchTransformVisitor
           AttrName == "llvm.loop.unroll.count" ||
           AttrName == "llvm.loop.unroll.full") {
         Result = applyLoopUnroll(LoopMD, Band);
-        if (Result)
+        if (!Result.is_null())
           return;
       }
 
@@ -154,7 +154,7 @@ class SearchTransformVisitor
   }
 
   void visitNode(const isl::schedule_node &Other) {
-    if (Result)
+    if (!Result.is_null())
       return;
     getBase().visitNode(Other);
   }
@@ -167,7 +167,7 @@ isl::schedule polly::applyManualTransformations(Scop *S, isl::schedule Sched) {
   while (true) {
     isl::schedule Result =
         SearchTransformVisitor::applyOneTransformation(Sched);
-    if (!Result) {
+    if (Result.is_null()) {
       // No (more) transformation has been found.
       break;
     }

diff  --git a/polly/lib/Transform/MatmulOptimizer.cpp b/polly/lib/Transform/MatmulOptimizer.cpp
index 3a4a9d67159e5..8558a1562ead8 100644
--- a/polly/lib/Transform/MatmulOptimizer.cpp
+++ b/polly/lib/Transform/MatmulOptimizer.cpp
@@ -205,9 +205,9 @@ static isl::map permuteDimensions(isl::map Map, isl::dim DimType,
   Map = Map.move_dims(FreeDim, 0, DimType, MinDim, 1);
   Map = Map.move_dims(DimType, MinDim, FreeDim, 1, 1);
   Map = Map.move_dims(DimType, MaxDim, FreeDim, 0, 1);
-  if (DimId)
+  if (!DimId.is_null())
     Map = Map.set_tuple_id(DimType, DimId);
-  if (FreeDimId)
+  if (!FreeDimId.is_null())
     Map = Map.set_tuple_id(FreeDim, FreeDimId);
   return Map;
 }
@@ -358,7 +358,7 @@ static bool containsOnlyMatMulDep(isl::map Schedule, const Dependences *D,
                                   int &Pos) {
   isl::union_map Dep = D->getDependences(Dependences::TYPE_RAW);
   isl::union_map Red = D->getDependences(Dependences::TYPE_RED);
-  if (Red)
+  if (!Red.is_null())
     Dep = Dep.unite(Red);
   auto DomainSpace = Schedule.get_space().domain();
   auto Space = DomainSpace.map_from_domain_and_range(DomainSpace);
@@ -993,7 +993,7 @@ static isl::schedule_node optimizeMatMulPattern(isl::schedule_node Node,
     return Node;
   auto MapOldIndVar = getInductionVariablesSubstitution(Node, MicroKernelParams,
                                                         MacroKernelParams);
-  if (!MapOldIndVar)
+  if (MapOldIndVar.is_null())
     return Node;
   Node = markLoopVectorizerDisabled(Node.parent()).child(0);
   Node = isolateAndUnrollMatMulInnerLoops(Node, MicroKernelParams);

diff  --git a/polly/lib/Transform/ScheduleOptimizer.cpp b/polly/lib/Transform/ScheduleOptimizer.cpp
index 3af949c55c870..d59b3bb6d9074 100644
--- a/polly/lib/Transform/ScheduleOptimizer.cpp
+++ b/polly/lib/Transform/ScheduleOptimizer.cpp
@@ -495,8 +495,9 @@ ScheduleTreeOptimizer::optimizeBand(__isl_take isl_schedule_node *Node,
       static_cast<const OptimizerAdditionalInfoTy *>(User);
 
   if (PMBasedOpts && User) {
-    if (isl::schedule_node PatternOptimizedSchedule = tryOptimizeMatMulPattern(
-            isl::manage_copy(Node), OAI->TTI, OAI->D)) {
+    isl::schedule_node PatternOptimizedSchedule =
+        tryOptimizeMatMulPattern(isl::manage_copy(Node), OAI->TTI, OAI->D);
+    if (!PatternOptimizedSchedule.is_null()) {
       MatMulOpts++;
       isl_schedule_node_free(Node);
       return PatternOptimizedSchedule.release();
@@ -535,8 +536,9 @@ bool ScheduleTreeOptimizer::isProfitableSchedule(Scop &S,
   // (e.g., #stride-one accesses)
   auto NewScheduleMap = NewSchedule.get_map();
   auto OldSchedule = S.getSchedule();
-  assert(OldSchedule && "Only IslScheduleOptimizer can insert extension nodes "
-                        "that make Scop::getSchedule() return nullptr.");
+  assert(!OldSchedule.is_null() &&
+         "Only IslScheduleOptimizer can insert extension nodes "
+         "that make Scop::getSchedule() return nullptr.");
   bool changed = !OldSchedule.is_equal(NewScheduleMap);
   return changed;
 }
@@ -594,7 +596,7 @@ static void printSchedule(llvm::raw_ostream &OS, const isl::schedule &Schedule,
 ///                 (tiling, pattern matching)
 static void walkScheduleTreeForStatistics(isl::schedule Schedule, int Version) {
   auto Root = Schedule.get_root();
-  if (!Root)
+  if (Root.is_null())
     return;
 
   isl_schedule_node_foreach_descendant_top_down(
@@ -662,7 +664,7 @@ static bool runIslScheduleOptimizer(
   if (PragmaBasedOpts) {
     isl::schedule ManuallyTransformed =
         applyManualTransformations(&S, Schedule);
-    if (!ManuallyTransformed) {
+    if (ManuallyTransformed.is_null()) {
       LLVM_DEBUG(dbgs() << "Error during manual optimization\n");
       return false;
     }
@@ -724,7 +726,7 @@ static bool runIslScheduleOptimizer(
 
     isl::union_set Domain = S.getDomains();
 
-    if (!Domain)
+    if (Domain.is_null())
       return false;
 
     isl::union_map Validity = D.getDependences(ValidityKinds);
@@ -817,7 +819,7 @@ static bool runIslScheduleOptimizer(
 
   // In cases the scheduler is not able to optimize the code, we just do not
   // touch the schedule.
-  if (!Schedule)
+  if (Schedule.is_null())
     return false;
 
   // Apply post-rescheduling optimizations.
@@ -869,7 +871,7 @@ static void runScheduleOptimizerPrinter(raw_ostream &OS,
 
   OS << "Calculated schedule:\n";
 
-  if (!LastSchedule) {
+  if (LastSchedule.is_null()) {
     OS << "n/a\n";
     return;
   }

diff  --git a/polly/lib/Transform/ScheduleTreeTransform.cpp b/polly/lib/Transform/ScheduleTreeTransform.cpp
index f689b34649596..8bcf7317371f6 100644
--- a/polly/lib/Transform/ScheduleTreeTransform.cpp
+++ b/polly/lib/Transform/ScheduleTreeTransform.cpp
@@ -179,7 +179,7 @@ struct ExtensionNodeRewriter
     isl::union_map Extensions;
     isl::schedule Result =
         visit(Schedule.get_root(), Schedule.get_domain(), Extensions);
-    assert(Extensions && Extensions.is_empty());
+    assert(!Extensions.is_null() && Extensions.is_empty());
     return Result;
   }
 
@@ -643,7 +643,7 @@ isl::schedule polly::applyPartialUnroll(isl::schedule_node BandToUnroll,
         findOptionalNodeOperand(Attr->Metadata, LLVMLoopUnrollFollowupUnrolled);
 
   isl::id NewBandId = createGeneratedLoopAttr(Ctx, FollowupMD);
-  if (NewBandId)
+  if (!NewBandId.is_null())
     NewLoop = insertMark(NewLoop, NewBandId);
 
   return NewLoop.get_schedule();

diff  --git a/polly/lib/Transform/ZoneAlgo.cpp b/polly/lib/Transform/ZoneAlgo.cpp
index 0b81887dfbb35..5e4c9134a6778 100644
--- a/polly/lib/Transform/ZoneAlgo.cpp
+++ b/polly/lib/Transform/ZoneAlgo.cpp
@@ -459,7 +459,7 @@ void ZoneAlgorithm::addArrayWriteAccess(MemoryAccess *MA) {
 
   // { Domain[] -> ValInst[] }
   isl::union_map WriteValInstance = getWrittenValue(MA, AccRel);
-  if (!WriteValInstance)
+  if (WriteValInstance.is_null())
     WriteValInstance = makeUnknownForDomain(Stmt);
 
   // { Domain[] -> [Element[] -> Domain[]] }
@@ -545,7 +545,7 @@ isl::union_map ZoneAlgorithm::computePerPHI(const ScopArrayInfo *SAI) {
   // bail out if we do not know. This in particular applies to undefined control
   // flow.
   isl::set DefinedContext = S->getDefinedBehaviorContext();
-  if (!DefinedContext)
+  if (DefinedContext.is_null())
     return {};
 
   assert(SAI->isPHIKind());
@@ -630,7 +630,7 @@ isl::map ZoneAlgorithm::getScatterFor(isl::set Domain) const {
   auto UDomain = isl::union_set(Domain);
   auto UResult = getScatterFor(std::move(UDomain));
   auto Result = singleton(std::move(UResult), std::move(ResultSpace));
-  assert(!Result || Result.domain().is_equal(Domain) == isl_bool_true);
+  assert(Result.is_null() || Result.domain().is_equal(Domain) == isl_bool_true);
   return Result;
 }
 
@@ -680,7 +680,7 @@ isl::map ZoneAlgorithm::getDefToTarget(ScopStmt *DefStmt,
   //   { DefStmt[i] -> TargetStmt[i,j] }
   //
   // In practice, this should cover the majority of cases.
-  if (!Result && S->isOriginalSchedule() &&
+  if (Result.is_null() && S->isOriginalSchedule() &&
       isInsideLoop(DefStmt->getSurroundingLoop(),
                    TargetStmt->getSurroundingLoop())) {
     isl::set DefDomain = getDomainFor(DefStmt);
@@ -693,7 +693,7 @@ isl::map ZoneAlgorithm::getDefToTarget(ScopStmt *DefStmt,
       Result = Result.equate(isl::dim::in, i, isl::dim::out, i);
   }
 
-  if (!Result) {
+  if (Result.is_null()) {
     // { DomainDef[] -> DomainTarget[] }
     Result = computeUseToDefFlowDependency(TargetStmt, DefStmt).reverse();
     simplify(Result);
@@ -704,7 +704,7 @@ isl::map ZoneAlgorithm::getDefToTarget(ScopStmt *DefStmt,
 
 isl::map ZoneAlgorithm::getScalarReachingDefinition(ScopStmt *Stmt) {
   auto &Result = ScalarReachDefZone[Stmt];
-  if (Result)
+  if (!Result.is_null())
     return Result;
 
   auto Domain = getDomainFor(Stmt);
@@ -1035,7 +1035,7 @@ void ZoneAlgorithm::computeNormalizedPHIs() {
       // incoming value. Skip if we cannot determine PHI predecessors.
       // { PHIDomain[] -> IncomingDomain[] }
       isl::union_map PerPHI = computePerPHI(SAI);
-      if (!PerPHI)
+      if (PerPHI.is_null())
         continue;
 
       // { PHIDomain[] -> PHIValInst[] }
@@ -1084,7 +1084,7 @@ void ZoneAlgorithm::computeNormalizedPHIs() {
   ComputedPHIs = AllPHIs;
   NormalizeMap = AllPHIMaps;
 
-  assert(!NormalizeMap || isNormalized(NormalizeMap));
+  assert(NormalizeMap.is_null() || isNormalized(NormalizeMap));
 }
 
 void ZoneAlgorithm::printAccesses(llvm::raw_ostream &OS, int Indent) const {

diff  --git a/polly/unittests/DeLICM/DeLICMTest.cpp b/polly/unittests/DeLICM/DeLICMTest.cpp
index eaa37ee2376ea..64318a4bc0d94 100644
--- a/polly/unittests/DeLICM/DeLICMTest.cpp
+++ b/polly/unittests/DeLICM/DeLICMTest.cpp
@@ -37,17 +37,17 @@ void completeLifetime(isl::union_set Universe, isl::union_map OccupiedAndKnown,
                       isl::union_set &Undef) {
   auto ParamSpace = Universe.get_space();
 
-  if (Undef && !Occupied) {
-    assert(!Occupied);
+  if (!Undef.is_null() && Occupied.is_null()) {
+    assert(Occupied.is_null());
     Occupied = Universe.subtract(Undef);
   }
 
-  if (OccupiedAndKnown) {
-    assert(!Known);
+  if (!OccupiedAndKnown.is_null()) {
+    assert(Known.is_null());
 
     Known = isl::union_map::empty(ParamSpace);
 
-    if (!Occupied)
+    if (Occupied.is_null())
       Occupied = OccupiedAndKnown.domain();
 
     for (isl::map Map : OccupiedAndKnown.get_map_list()) {
@@ -57,19 +57,19 @@ void completeLifetime(isl::union_set Universe, isl::union_map OccupiedAndKnown,
     }
   }
 
-  if (!Undef) {
-    assert(Occupied);
+  if (Undef.is_null()) {
+    assert(!Occupied.is_null());
     Undef = Universe.subtract(Occupied);
   }
 
-  if (!Known) { // By default, nothing is known.
+  if (Known.is_null()) { // By default, nothing is known.
     Known = isl::union_map::empty(ParamSpace);
   }
 
   // Conditions that must hold when returning.
-  assert(Occupied);
-  assert(Undef);
-  assert(Known);
+  assert(!Occupied.is_null());
+  assert(!Undef.is_null());
+  assert(!Known.is_null());
 }
 
 typedef struct {
@@ -97,17 +97,17 @@ bool checkIsConflictingNonsymmetricCommon(
     isl::union_map ProposedWritten) {
   // Determine universe (set of all possible domains).
   auto Universe = isl::union_set::empty(isl::space::params_alloc(Ctx, 0));
-  if (ExistingOccupiedAndKnown)
+  if (!ExistingOccupiedAndKnown.is_null())
     Universe = Universe.unite(ExistingOccupiedAndKnown.domain());
-  if (ExistingUnused)
+  if (!ExistingUnused.is_null())
     Universe = Universe.unite(ExistingUnused);
-  if (ExistingWritten)
+  if (!ExistingWritten.is_null())
     Universe = Universe.unite(ExistingWritten.domain());
-  if (ProposedOccupiedAndKnown)
+  if (!ProposedOccupiedAndKnown.is_null())
     Universe = Universe.unite(ProposedOccupiedAndKnown.domain());
-  if (ProposedUnused)
+  if (!ProposedUnused.is_null())
     Universe = Universe.unite(ProposedUnused);
-  if (ProposedWritten)
+  if (!ProposedWritten.is_null())
     Universe = Universe.unite(ProposedWritten.domain());
 
   Universe = unionSpace(Universe);


        


More information about the llvm-commits mailing list