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.
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;
+ }
};
}
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;
<< " 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)
}
isl_union_map_free(ScheduleMap);
- isl_schedule_free(Schedule);
+ LastSchedule = Schedule;
unsigned MaxScatDims = 0;
}
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 {
--- /dev/null
+; 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"
+
+@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[] -> [] }