96 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -disable-output < %s 2>&1 | FileCheck %s2;3; void foo(long n, float A[][n][n]) {4; for (long i = 0; i < 200; i++)5; for (long j = 0; j < n; j++)6; for (long k = 0; k < n; k++)7; A[i % 2][j][k] += 10;8; }9 10; CHECK: Statements {11; CHECK-NEXT: Stmt_for_body_812; CHECK-NEXT: Domain :=13; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] : 0 <= i0 <= 199 and 0 <= i1 < n and 0 <= i2 < n };14; CHECK-NEXT: Schedule :=15; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] -> [i0, i1, i2] };16; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]17; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] -> MemRef_A[1, i1, i2] : (1 + i0) mod 2 = 0; Stmt_for_body_8[i0, i1, i2] -> MemRef_A[0, i1, i2] : (i0) mod 2 = 0 };18; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]19; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] -> MemRef_A[1, i1, i2] : (1 + i0) mod 2 = 0; Stmt_for_body_8[i0, i1, i2] -> MemRef_A[0, i1, i2] : (i0) mod 2 = 0 };20; CHECK-NEXT: }21 22target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"23 24define void @foo(i64 %n, ptr %A) {25entry:26 br label %entry.split27 28entry.split: ; preds = %entry29 br label %for.cond.1.preheader30 31for.cond.1.preheader: ; preds = %entry.split, %for.inc.1432 %i.06 = phi i64 [ 0, %entry.split ], [ %inc15, %for.inc.14 ]33 %cmp2.3 = icmp sgt i64 %n, 034 br i1 %cmp2.3, label %for.cond.5.preheader.lr.ph, label %for.inc.1435 36for.cond.5.preheader.lr.ph: ; preds = %for.cond.1.preheader37 br label %for.cond.5.preheader38 39for.cond.5.preheader: ; preds = %for.cond.5.preheader.lr.ph, %for.inc.1140 %j.04 = phi i64 [ 0, %for.cond.5.preheader.lr.ph ], [ %inc12, %for.inc.11 ]41 %cmp6.1 = icmp sgt i64 %n, 042 br i1 %cmp6.1, label %for.body.8.lr.ph, label %for.inc.1143 44for.body.8.lr.ph: ; preds = %for.cond.5.preheader45 br label %for.body.846 47for.body.8: ; preds = %for.body.8.lr.ph, %for.body.848 %k.02 = phi i64 [ 0, %for.body.8.lr.ph ], [ %inc, %for.body.8 ]49 %rem = srem i64 %i.06, 250 %0 = mul nuw i64 %n, %n51 %1 = mul nsw i64 %0, %rem52 %arrayidx = getelementptr inbounds float, ptr %A, i64 %153 %2 = mul nsw i64 %j.04, %n54 %arrayidx9 = getelementptr inbounds float, ptr %arrayidx, i64 %255 %arrayidx10 = getelementptr inbounds float, ptr %arrayidx9, i64 %k.0256 %3 = load float, ptr %arrayidx10, align 4, !tbaa !157 %add = fadd float %3, 1.000000e+0158 store float %add, ptr %arrayidx10, align 4, !tbaa !159 %inc = add nuw nsw i64 %k.02, 160 %exitcond = icmp ne i64 %inc, %n61 br i1 %exitcond, label %for.body.8, label %for.cond.5.for.inc.11_crit_edge62 63for.cond.5.for.inc.11_crit_edge: ; preds = %for.body.864 br label %for.inc.1165 66for.inc.11: ; preds = %for.cond.5.for.inc.11_crit_edge, %for.cond.5.preheader67 %inc12 = add nuw nsw i64 %j.04, 168 %exitcond7 = icmp ne i64 %inc12, %n69 br i1 %exitcond7, label %for.cond.5.preheader, label %for.cond.1.for.inc.14_crit_edge70 71for.cond.1.for.inc.14_crit_edge: ; preds = %for.inc.1172 br label %for.inc.1473 74for.inc.14: ; preds = %for.cond.1.for.inc.14_crit_edge, %for.cond.1.preheader75 %inc15 = add nuw nsw i64 %i.06, 176 %exitcond8 = icmp ne i64 %inc15, 20077 br i1 %exitcond8, label %for.cond.1.preheader, label %for.end.1678 79for.end.16: ; preds = %for.inc.1480 ret void81}82 83; Function Attrs: nounwind84declare void @llvm.lifetime.start(i64, ptr nocapture)85 86; Function Attrs: nounwind87declare void @llvm.lifetime.end(i64, ptr nocapture)88 89!llvm.ident = !{!0}90 91!0 = !{!"clang version 3.7.0 (trunk 240923) (llvm/trunk 240924)"}92!1 = !{!2, !2, i64 0}93!2 = !{!"float", !3, i64 0}94!3 = !{!"omnipotent char", !4, i64 0}95!4 = !{!"Simple C/C++ TBAA"}96