[polly] r250668 - [FIX] Normalize loops outside the SCoP during schedule generation

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Sun Oct 18 14:17:11 PDT 2015


Author: jdoerfert
Date: Sun Oct 18 16:17:11 2015
New Revision: 250668

URL: http://llvm.org/viewvc/llvm-project?rev=250668&view=rev
Log:
[FIX] Normalize loops outside the SCoP during schedule generation

  We build the schedule based on a traversal of the region and accumulate
  information for each loop in it. The total schedule is associated with the
  loop surrounding the SCoP, though it can happen that there are blocks in the
  SCoP which are part of loops that are only partially in the SCoP. Instead of
  associating information with them (they are not part of the SCoP and
  consequently are not modeled) we have to associate the schedule information
  with the surrounding loop if any.

  This fixes bug 25240.

Added:
    polly/trunk/test/ScopInfo/new-domain-construction-schedule-not-freed.ll
Modified:
    polly/trunk/lib/Analysis/ScopInfo.cpp

Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=250668&r1=250667&r2=250668&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Sun Oct 18 16:17:11 2015
@@ -3091,6 +3091,9 @@ void Scop::buildSchedule(
     }
 
     Loop *L = getRegionNodeLoop(RN, LI);
+    if (!getRegion().contains(L))
+      L = getLoopSurroundingRegion(getRegion(), LI);
+
     int LD = getRelativeLoopDepth(L);
     auto &LSchedulePair = LoopSchedules[L];
     LSchedulePair.second += getNumBlocksInRegionNode(RN);

Added: polly/trunk/test/ScopInfo/new-domain-construction-schedule-not-freed.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/new-domain-construction-schedule-not-freed.ll?rev=250668&view=auto
==============================================================================
--- polly/trunk/test/ScopInfo/new-domain-construction-schedule-not-freed.ll (added)
+++ polly/trunk/test/ScopInfo/new-domain-construction-schedule-not-freed.ll Sun Oct 18 16:17:11 2015
@@ -0,0 +1,55 @@
+; RUN: opt %loadPolly -analyze -polly-scops %s | FileCheck %s
+;
+; At some point this caused a problem in the schedule generation and we
+; keep the test to avoid regressions there.
+;
+; CHECK: Statements
+;
+target triple = "x86_64-unknown-linux-gnu"
+
+; Function Attrs: nounwind uwtable
+define void @qtm_decompress() #0 {
+entry:
+  br label %if.end.1631
+
+if.end.1631:                                      ; preds = %entry
+  br i1 false, label %for.cond.1647.preheader, label %if.then.1635
+
+if.then.1635:                                     ; preds = %if.end.1631
+  br label %for.cond.1647.preheader
+
+for.cond.1647.preheader:                          ; preds = %if.then.1635, %if.end.1631
+  br label %for.cond.1647.outer
+
+for.cond.1647.outer:                              ; preds = %do.end.1685, %for.cond.1647.preheader
+  %bits_needed.5.ph = phi i8 [ 8, %for.cond.1647.preheader ], [ undef, %do.end.1685 ]
+  br label %for.cond.1647
+
+for.cond.1647:                                    ; preds = %do.cond.1718, %for.cond.1647.outer
+  %bits_needed.5 = phi i8 [ 8, %do.cond.1718 ], [ %bits_needed.5.ph, %for.cond.1647.outer ]
+  br i1 undef, label %do.cond.1718, label %if.then.1659
+
+if.then.1659:                                     ; preds = %for.cond.1647
+  br i1 false, label %do.end.1685, label %cleanup.1785
+
+do.end.1685:                                      ; preds = %if.then.1659
+  br label %for.cond.1647.outer
+
+do.cond.1718:                                     ; preds = %for.cond.1647
+  br i1 false, label %land.lhs.true.1736, label %for.cond.1647
+
+land.lhs.true.1736:                               ; preds = %do.cond.1718
+  br label %if.then.1742
+
+if.then.1742:                                     ; preds = %land.lhs.true.1736
+  unreachable
+
+cleanup.1785:                                     ; preds = %if.then.1659
+  ret void
+}
+
+attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
+
+!llvm.ident = !{!0}
+
+!0 = !{!"clang version 3.8.0 (trunk 250010) (llvm/trunk 250018)"}




More information about the llvm-commits mailing list