• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt %loadPolly -polly-import-jscop \
2; RUN:     -polly-codegen -S < %s | FileCheck %s
3;
4;    void non-affine-update(double A[], double C[], double B[]) {
5;      for (int i = 0; i < 10; i++) {
6;        if (A[i] >= 6)
7;          B[i] += 42;
8;        else
9;          C[i] += 3;
10;      }
11;    }
12
13; Verify that all changed memory access functions are corectly code generated.
14; At some point this did not work due to memory access identifiers not being
15; unique within non-affine scop statements.
16
17; CHECK: polly.stmt.bb2:
18; CHECK:   %scevgep = getelementptr double, double* %A, i64 %polly.indvar
19
20; CHECK: polly.stmt.bb9:
21; CHECK:   %polly.access.C{{.*}} = getelementptr double, double* %C, i64 42
22; CHECK:   %polly.access.C{{.*}} = getelementptr double, double* %C, i64 42
23
24; CHECK: polly.stmt.bb5:
25; CHECK:   %polly.access.B{{.*}} = getelementptr double, double* %B, i64 113
26; CHECK:   %polly.access.B{{.*}} = getelementptr double, double* %B, i64 113
27
28
29target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
30
31define void @non-affine-update(double* %A, double* %C, double* %B) {
32bb:
33  br label %bb1
34
35bb1:                                              ; preds = %bb14, %bb
36  %indvars.iv = phi i64 [ %indvars.iv.next, %bb14 ], [ 0, %bb ]
37  %exitcond = icmp ne i64 %indvars.iv, 10
38  br i1 %exitcond, label %bb2, label %bb15
39
40bb2:                                              ; preds = %bb1
41  %tmp = getelementptr inbounds double, double* %A, i64 %indvars.iv
42  %tmp3 = load double, double* %tmp, align 8
43  %tmp4 = fcmp ult double %tmp3, 6.000000e+00
44  br i1 %tmp4, label %bb9, label %bb5
45
46bb5:                                              ; preds = %bb2
47  %tmp6 = getelementptr inbounds double, double* %B, i64 %indvars.iv
48  %tmp7 = load double, double* %tmp6, align 8
49  %tmp8 = fadd double %tmp7, 4.200000e+01
50  store double %tmp8, double* %tmp6, align 8
51  br label %bb13
52
53bb9:                                              ; preds = %bb2
54  %tmp10 = getelementptr inbounds double, double* %C, i64 %indvars.iv
55  %tmp11 = load double, double* %tmp10, align 8
56  %tmp12 = fadd double %tmp11, 3.000000e+00
57  store double %tmp12, double* %tmp10, align 8
58  br label %bb13
59
60bb13:                                             ; preds = %bb9, %bb5
61  br label %bb14
62
63bb14:                                             ; preds = %bb13
64  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
65  br label %bb1
66
67bb15:                                             ; preds = %bb1
68  ret void
69}
70