[llvm-commits] [polly] r166021 - in /polly/trunk: lib/ScheduleOptimizer.cpp test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll utils/checkout_cloog.sh

Tobias Grosser grosser at fim.uni-passau.de
Tue Oct 16 00:29:20 PDT 2012


Author: grosser
Date: Tue Oct 16 02:29:19 2012
New Revision: 166021

URL: http://llvm.org/viewvc/llvm-project?rev=166021&view=rev
Log:
isl scheduler: Do not fail when returning an empty band list

The bug was within isl. To fix it, we simply update the isl version that
is used by Polly. We still have some changes within Polly to be able to
write a proper test case.

Reported-by: Sameer Sahasrabuddhe <Sameer.Sahasrabuddhe at amd.com>

Added:
    polly/trunk/test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll
Modified:
    polly/trunk/lib/ScheduleOptimizer.cpp
    polly/trunk/utils/checkout_cloog.sh

Modified: polly/trunk/lib/ScheduleOptimizer.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/ScheduleOptimizer.cpp?rev=166021&r1=166020&r2=166021&view=diff
==============================================================================
--- polly/trunk/lib/ScheduleOptimizer.cpp (original)
+++ polly/trunk/lib/ScheduleOptimizer.cpp Tue Oct 16 02:29:19 2012
@@ -83,13 +83,21 @@
 
   public:
     static char ID;
-    explicit IslScheduleOptimizer() : ScopPass(ID) {}
+    explicit IslScheduleOptimizer() : ScopPass(ID) {
+      LastSchedule = NULL;
+    }
+
+    ~IslScheduleOptimizer() {
+      isl_schedule_free(LastSchedule);
+    }
 
     virtual bool runOnScop(Scop &S);
     void printScop(llvm::raw_ostream &OS) const;
     void getAnalysisUsage(AnalysisUsage &AU) const;
 
   private:
+    isl_schedule *LastSchedule;
+
     static void extendScattering(Scop &S, unsigned NewDimensions);
 
     /// @brief Create a map that describes a n-dimensonal tiling.
@@ -179,6 +187,12 @@
     static isl_union_map *getScheduleForBandList(isl_band_list *BandList);
 
     static isl_union_map *getScheduleMap(isl_schedule *Schedule);
+
+    bool doFinalization() {
+      isl_schedule_free(LastSchedule);
+      LastSchedule = NULL;
+      return true;
+    }
   };
 
 }
@@ -437,6 +451,9 @@
 bool IslScheduleOptimizer::runOnScop(Scop &S) {
   Dependences *D = &getAnalysis<Dependences>();
 
+  isl_schedule_free(LastSchedule);
+  LastSchedule = NULL;
+
   // Build input data.
   int ValidityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
                       | Dependences::TYPE_WAW;
@@ -452,10 +469,8 @@
         << " Falling back to optimizing all dependences.\n";
     ProximityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
                      | Dependences::TYPE_WAW;
-
   }
 
-
   isl_union_set *Domain = S.getDomains();
 
   if (!Domain)
@@ -546,7 +561,7 @@
   }
 
   isl_union_map_free(ScheduleMap);
-  isl_schedule_free(Schedule);
+  LastSchedule = Schedule;
 
   unsigned MaxScatDims = 0;
 
@@ -558,6 +573,22 @@
 }
 
 void IslScheduleOptimizer::printScop(raw_ostream &OS) const {
+  isl_printer *p;
+  char *ScheduleStr;
+
+  OS << "Calculated schedule:\n";
+
+  if (!LastSchedule) {
+    OS << "n/a\n";
+    return;
+  }
+
+  p = isl_printer_to_str(isl_schedule_get_ctx(LastSchedule));
+  p = isl_printer_print_schedule(p, LastSchedule);
+  ScheduleStr = isl_printer_get_str(p);
+  isl_printer_free(p);
+
+  OS << ScheduleStr << "\n";
 }
 
 void IslScheduleOptimizer::getAnalysisUsage(AnalysisUsage &AU) const {

Added: polly/trunk/test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll?rev=166021&view=auto
==============================================================================
--- polly/trunk/test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll (added)
+++ polly/trunk/test/ScheduleOptimizer/2012-10-14-Zero-Bands.ll Tue Oct 16 02:29:19 2012
@@ -0,0 +1,27 @@
+; RUN: opt %loadPolly -polly-region-simplify -polly-opt-isl -analyze < %s | FileCheck %s
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+ at A = common global [1536 x float] zeroinitializer
+
+define void @read_nres() {
+entry:
+  br label %if.cond
+
+if.cond:
+  br i1 false, label %if.then, label %if.end
+
+if.then:
+  %ptr = getelementptr [1536 x float]* @A, i64 0, i32 23
+  store float undef, float* %ptr
+  br label %if.end
+
+if.end:
+  br label %return
+
+return:
+  ret void
+}
+
+; CHECK: Calculated schedule:
+; CHECK: { Stmt_if_then[] -> [] }

Modified: polly/trunk/utils/checkout_cloog.sh
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/utils/checkout_cloog.sh?rev=166021&r1=166020&r2=166021&view=diff
==============================================================================
--- polly/trunk/utils/checkout_cloog.sh (original)
+++ polly/trunk/utils/checkout_cloog.sh Tue Oct 16 02:29:19 2012
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 CLOOG_HASH="57470e76bfd58a0c38c598e816411663193e0f45"
-ISL_HASH="14beb7bfa687199d1a515889fbc2459d5f6d235b"
+ISL_HASH="cc969a737d4f8de258a462c3cb1c063fe2f1c5cf"
 
 PWD=`pwd`
 





More information about the llvm-commits mailing list