[polly] r311863 - [Detect] Consider nested loop profitable if entry block is not in loop
Tobias Grosser via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 27 14:39:25 PDT 2017
Author: grosser
Date: Sun Aug 27 14:39:25 2017
New Revision: 311863
URL: http://llvm.org/viewvc/llvm-project?rev=311863&view=rev
Log:
[Detect] Consider nested loop profitable if entry block is not in loop
In cases where the entry block of a scop was not contained in a loop that was
part of the scop region and at the same time there was a loop surrounding the
scop, we missed to count the loops in the scop and consequently did not consider
the scop profitable. We correct this by only moving to the loop parent, in case
the current loop is loop contained in the scop.
This increases the number of loops in COSMO which we assume to be profitable
from 3974 to 4981.
Added:
polly/trunk/test/ScopDetect/profitability-two-nested-loops.ll
Modified:
polly/trunk/lib/Analysis/ScopDetection.cpp
Modified: polly/trunk/lib/Analysis/ScopDetection.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopDetection.cpp?rev=311863&r1=311862&r2=311863&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopDetection.cpp (original)
+++ polly/trunk/lib/Analysis/ScopDetection.cpp Sun Aug 27 14:39:25 2017
@@ -1312,8 +1312,13 @@ ScopDetection::countBeneficialLoops(Regi
int MaxLoopDepth = 0;
auto L = LI.getLoopFor(R->getEntry());
- L = L ? R->outermostLoopInRegion(L) : nullptr;
- L = L ? L->getParentLoop() : nullptr;
+
+ // If L is fully contained in R, move to first loop surrounding R. Otherwise,
+ // L is either nullptr or already surrounding R.
+ if (L && R->contains(L)) {
+ L = R->outermostLoopInRegion(L);
+ L = L->getParentLoop();
+ }
auto SubLoops =
L ? L->getSubLoopsVector() : std::vector<Loop *>(LI.begin(), LI.end());
Added: polly/trunk/test/ScopDetect/profitability-two-nested-loops.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopDetect/profitability-two-nested-loops.ll?rev=311863&view=auto
==============================================================================
--- polly/trunk/test/ScopDetect/profitability-two-nested-loops.ll (added)
+++ polly/trunk/test/ScopDetect/profitability-two-nested-loops.ll Sun Aug 27 14:39:25 2017
@@ -0,0 +1,94 @@
+; RUN: opt %loadPolly -polly-detect -analyze \
+; RUN: -polly-process-unprofitable=false < %s | FileCheck %s
+
+; CHECK: Valid Region for Scop: next => bb3
+;
+; void foo(float A[], long p) {
+; for (long x = 0; x < 1024; x++) {
+; __sync_synchronize();
+; if (p >= 0) {
+; for (long i = 0; i < 1024; i++)
+; for (long j = 0; j < 1024; j++)
+; A[i + j] += j;
+; }
+; }
+; }
+;
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-linux-gnu"
+
+define void @foo(float* %A, i64 %p) {
+bb:
+ br label %bb3
+
+bb3: ; preds = %bb25, %bb
+ %x.0 = phi i64 [ 0, %bb ], [ %tmp26, %bb25 ]
+ %exitcond2 = icmp ne i64 %x.0, 1024
+ br i1 %exitcond2, label %bb5, label %bb4
+
+bb4: ; preds = %bb3
+ br label %bb27
+
+bb5: ; preds = %bb3
+ fence seq_cst
+ br label %next
+
+next:
+ %tmp = icmp sgt i64 %p, -1
+ br i1 %tmp, label %bb6, label %bb24
+
+bb6: ; preds = %bb5
+ br label %bb7
+
+bb7: ; preds = %bb21, %bb6
+ %i.0 = phi i64 [ 0, %bb6 ], [ %tmp22, %bb21 ]
+ %exitcond1 = icmp ne i64 %i.0, 1024
+ br i1 %exitcond1, label %bb9, label %bb8
+
+bb8: ; preds = %bb7
+ br label %bb23
+
+bb9: ; preds = %bb7
+ br label %bb10
+
+bb10: ; preds = %bb18, %bb9
+ %j.0 = phi i64 [ 0, %bb9 ], [ %tmp19, %bb18 ]
+ %exitcond = icmp ne i64 %j.0, 1024
+ br i1 %exitcond, label %bb12, label %bb11
+
+bb11: ; preds = %bb10
+ br label %bb20
+
+bb12: ; preds = %bb10
+ %tmp13 = sitofp i64 %j.0 to float
+ %tmp14 = add nuw nsw i64 %i.0, %j.0
+ %tmp15 = getelementptr inbounds float, float* %A, i64 %tmp14
+ %tmp16 = load float, float* %tmp15, align 4
+ %tmp17 = fadd float %tmp16, %tmp13
+ store float %tmp17, float* %tmp15, align 4
+ br label %bb18
+
+bb18: ; preds = %bb12
+ %tmp19 = add nuw nsw i64 %j.0, 1
+ br label %bb10
+
+bb20: ; preds = %bb11
+ br label %bb21
+
+bb21: ; preds = %bb20
+ %tmp22 = add nuw nsw i64 %i.0, 1
+ br label %bb7
+
+bb23: ; preds = %bb8
+ br label %bb24
+
+bb24: ; preds = %bb23, %bb5
+ br label %bb25
+
+bb25: ; preds = %bb24
+ %tmp26 = add nuw nsw i64 %x.0, 1
+ br label %bb3
+
+bb27: ; preds = %bb4
+ ret void
+}
More information about the llvm-commits
mailing list