brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 338a9ae Raw
93 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<detect>' -polly-print-detect -disable-output < %s 2>&1 | FileCheck %s2 3target 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"4 5; Two sequential loops right after each other.6;7; void f(long A[], long N) {8;   long i;9;   for (i = 0; i < N; ++i)10;     A[i] = i;11;   for (i = 0; i < N; ++i)12;     A[i] = i;13; }14 15define void @f1(ptr %A, i64 %N) nounwind {16; CHECK-LABEL: Detected Scops in Function f1 17entry:18  fence seq_cst19  br label %for.i.120 21for.i.1:22  %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %for.i.1 ]23  %scevgep = getelementptr i64, ptr %A, i64 %indvar24  store i64 %indvar, ptr %scevgep25  %indvar.next = add nsw i64 %indvar, 126  %exitcond = icmp eq i64 %indvar.next, %N27  br i1 %exitcond, label %for.i.2, label %for.i.128 29for.i.2:30  %indvar.2 = phi i64 [ 0, %for.i.1 ], [ %indvar.next.2, %for.i.2 ]31  %scevgep.2 = getelementptr i64, ptr %A, i64 %indvar.232  store i64 %indvar.2, ptr %scevgep.233  %indvar.next.2 = add nsw i64 %indvar.2, 134  %exitcond.2 = icmp eq i64 %indvar.next.2, %N35  br i1 %exitcond.2, label %return, label %for.i.236 37return:38  fence seq_cst39  ret void40}41 42; C-H-E-C-K: Valid Region for Scop: for.i.1 => return43; This one is currently not completely detected due to the PHI node in44; for.i.2 causing a 'PHI node in exit BB' error for the first loop. This should45; be fixed at some point. Such test cases do not really show up for us, as46; the -loop-simplify pass always inserts a preheader as in the test case below.47 48; Two sequential loops with a basic block in between.49;50;     void f(long A[], long N) {51;       long i;52;53;       for (i = 0; i < N; ++i)54;         A[i] = i;55; preheader:56;       ;57;58;       for (i = 0; i < N; ++i)59;         A[i] = i;60;     }61 62define void @f2(ptr %A, i64 %N) nounwind {63; CHECK-LABEL: Detected Scops in Function f264entry:65  fence seq_cst66  br label %for.i.167 68for.i.1:69  %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %for.i.1 ]70  %scevgep = getelementptr i64, ptr %A, i64 %indvar71  store i64 %indvar, ptr %scevgep72  %indvar.next = add nsw i64 %indvar, 173  %exitcond = icmp eq i64 %indvar.next, %N74  br i1 %exitcond, label %preheader, label %for.i.175 76preheader:77  br label %for.i.278 79for.i.2:80  %indvar.2 = phi i64 [ 0, %preheader ], [ %indvar.next.2, %for.i.2 ]81  %scevgep.2 = getelementptr i64, ptr %A, i64 %indvar.282  store i64 %indvar.2, ptr %scevgep.283  %indvar.next.2 = add nsw i64 %indvar.2, 184  %exitcond.2 = icmp eq i64 %indvar.next.2, %N85  br i1 %exitcond.2, label %return, label %for.i.286 87return:88  fence seq_cst89  ret void90}91 92; CHECK: Valid Region for Scop: for.i.1 => return93