brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · 5ebe0da Raw
93 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -polly-delinearize=false -disable-output < %s 2>&1 | FileCheck %s2; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -polly-delinearize=false -polly-allow-nonaffine -disable-output < %s 2>&1 | FileCheck %s --check-prefix=NONAFFINE3; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -disable-output < %s 2>&1 | FileCheck %s --check-prefix=DELIN4; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -polly-allow-nonaffine -disable-output < %s 2>&1 | FileCheck %s --check-prefix=DELIN5; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -polly-delinearize=false -disable-output < %s 2>&1 | FileCheck %s6; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -polly-delinearize=false -polly-allow-nonaffine -disable-output < %s 2>&1 | FileCheck %s --check-prefix=NONAFFINE7; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -disable-output < %s 2>&1 | FileCheck %s --check-prefix=DELIN8; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -polly-allow-nonaffine -disable-output < %s 2>&1 | FileCheck %s --check-prefix=DELIN9 10target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"11 12; void single-and-multi-dimensional-array(long n,float X[n][n]) {13;  for (long i1 = 0; i1 < n; i1++)14;    X[i1][0] = 1;15;16;  for (long i2 = 0; i2 < n; i2++)17;    X[n-1][i2] = 1;18; }19;20; In previous versions of Polly, the second access was detected as single21; dimensional access whereas the first one was detected as multi-dimensional.22; This test case checks that we now consistently delinearize the array accesses.23 24; CHECK-NOT: Stmt_for_i_125 26; NONAFFINE:      p0: %n27; NONAFFINE-NEXT: p1: ((-1 + %n) * %n)28;29; NONAFFINE:      Statements {30; NONAFFINE-NEXT:     Stmt_for_i_131; NONAFFINE-NEXT:         Domain :=32; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_1[i0] : 0 <= i0 < n };33; NONAFFINE-NEXT:         Schedule :=34; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_1[i0] -> [0, i0] };35; NONAFFINE-NEXT:         MayWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]36; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_1[i0] -> MemRef_X[o0] };37; NONAFFINE-NEXT:     Stmt_for_i_238; NONAFFINE-NEXT:         Domain :=39; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_2[i0] : 0 <= i0 < n };40; NONAFFINE-NEXT:         Schedule :=41; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_2[i0] -> [1, i0] };42; NONAFFINE-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]43; NONAFFINE-NEXT:             [n, p_1] -> { Stmt_for_i_2[i0] -> MemRef_X[p_1 + i0] };44; NONAFFINE-NEXT: }45 46; DELIN:      Statements {47; DELIN-NEXT:     Stmt_for_i_148; DELIN-NEXT:         Domain :=49; DELIN-NEXT:             [n] -> { Stmt_for_i_1[i0] : 0 <= i0 < n };50; DELIN-NEXT:         Schedule :=51; DELIN-NEXT:             [n] -> { Stmt_for_i_1[i0] -> [0, i0] };52; DELIN-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]53; DELIN-NEXT:             [n] -> { Stmt_for_i_1[i0] -> MemRef_X[i0, 0] };54; DELIN-NEXT:     Stmt_for_i_255; DELIN-NEXT:         Domain :=56; DELIN-NEXT:             [n] -> { Stmt_for_i_2[i0] : 0 <= i0 < n };57; DELIN-NEXT:         Schedule :=58; DELIN-NEXT:             [n] -> { Stmt_for_i_2[i0] -> [1, i0] };59; DELIN-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 0]60; DELIN-NEXT:             [n] -> { Stmt_for_i_2[i0] -> MemRef_X[-1 + n, i0] };61; DELIN-NEXT: }62 63define void @single-and-multi-dimensional-array(i64 %n, ptr %X) {64entry:65  br label %for.i.166 67for.i.1:68  %indvar.1 = phi i64 [ 0, %entry ], [ %indvar.next.1, %for.i.1 ]69  %offset.1 = mul i64 %n, %indvar.170  %arrayidx.1 = getelementptr float, ptr %X, i64 %offset.171  store float 1.000000e+00, ptr %arrayidx.172  %indvar.next.1 = add nsw i64 %indvar.1, 173  %exitcond.1 = icmp ne i64 %indvar.next.1, %n74  br i1 %exitcond.1, label %for.i.1, label %next75 76next:77  br label %for.i.278 79for.i.2:80  %indvar.2 = phi i64 [ 0, %next ], [ %indvar.next.2, %for.i.2 ]81  %offset.2.a = add i64 %n, -182  %offset.2.b = mul i64 %n, %offset.2.a83  %offset.2.c = add i64 %offset.2.b, %indvar.284  %arrayidx.2 = getelementptr float, ptr %X, i64 %offset.2.c85  store float 1.000000e+00, ptr %arrayidx.286  %indvar.next.2 = add nsw i64 %indvar.2, 187  %exitcond.2 = icmp ne i64 %indvar.next.2, %n88  br i1 %exitcond.2, label %for.i.2, label %exit89 90exit:91  ret void92}93