xref: /llvm-project/polly/test/ScopInfo/multiple-types-two-dimensional.ll (revision e1f056f692d869708c1898d9d65a69ac5584a0ed)
1; RUN: opt %loadNPMPolly '-passes=print<polly-function-scops>' -pass-remarks-analysis="polly-scops" \
2; RUN:     -polly-allow-differing-element-types \
3; RUN:     -disable-output < %s  2>&1 | FileCheck %s
4;
5;    void foo(long n, long m, char A[][m]) {
6;      for (long i = 0; i < n; i++)
7;        for (long j = 0; j < m / 4; j++)
8;          A[i][j] = *(float *)&A[i][4 * j];
9;    }
10;
11; We do not yet correctly handle multi-dimensional arrays which are accessed
12; through different base types. Verify that we correctly bail out.
13;
14; CHECK: Delinearization assumption:  {  : false }
15
16target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
17
18define void @foo(i64 %n, i64 %m, ptr %A) {
19bb:
20  br label %bb1
21
22bb1:                                              ; preds = %bb20, %bb
23  %i.0 = phi i64 [ 0, %bb ], [ %tmp21, %bb20 ]
24  %tmp = icmp slt i64 %i.0, %n
25  br i1 %tmp, label %bb2, label %bb22
26
27bb2:                                              ; preds = %bb1
28  br label %bb3
29
30bb3:                                              ; preds = %bb17, %bb2
31  %j.0 = phi i64 [ 0, %bb2 ], [ %tmp18, %bb17 ]
32  %tmp4 = sdiv i64 %m, 4
33  %tmp5 = icmp slt i64 %j.0, %tmp4
34  br i1 %tmp5, label %bb6, label %bb19
35
36bb6:                                              ; preds = %bb3
37  %tmp7 = shl nsw i64 %j.0, 2
38  %tmp8 = mul nsw i64 %i.0, %m
39  %tmp9 = getelementptr inbounds i8, ptr %A, i64 %tmp8
40  %tmp10 = getelementptr inbounds i8, ptr %tmp9, i64 %tmp7
41  %tmp12 = load float, ptr %tmp10, align 4
42  %tmp13 = fptosi float %tmp12 to i8
43  %tmp14 = mul nsw i64 %i.0, %m
44  %tmp15 = getelementptr inbounds i8, ptr %A, i64 %tmp14
45  %tmp16 = getelementptr inbounds i8, ptr %tmp15, i64 %j.0
46  store i8 %tmp13, ptr %tmp16, align 1
47  br label %bb17
48
49bb17:                                             ; preds = %bb6
50  %tmp18 = add nuw nsw i64 %j.0, 1
51  br label %bb3
52
53bb19:                                             ; preds = %bb3
54  br label %bb20
55
56bb20:                                             ; preds = %bb19
57  %tmp21 = add nuw nsw i64 %i.0, 1
58  br label %bb1
59
60bb22:                                             ; preds = %bb1
61  ret void
62}
63