xref: /llvm-project/llvm/test/Analysis/Delinearization/byte_offset.ll (revision 2410b1cb83ee68543162a695db89c92282d08f59)
1088577a3SMichael Kruse; RUN: opt < %s -passes='print<delinearization>' -disable-output 2>&1 | FileCheck %s
2088577a3SMichael Kruse
3088577a3SMichael Kruse; CHECK: AccessFunction: ({0,+,%i2}<%outer.loop> + %unknown)
4088577a3SMichael Kruse; CHECK-NEXT: failed to delinearize
5088577a3SMichael Kruse
6088577a3SMichael Kruse; void foo(char A[], long i2, bool c) {
7088577a3SMichael Kruse;   for (long i = 0; ; ++i) {
8088577a3SMichael Kruse;     char *tmp = &A[i * i2];
9088577a3SMichael Kruse;     if (c)
10088577a3SMichael Kruse;       while (1)
11088577a3SMichael Kruse;          *((float*)&tmp[arg << arg]) = 0;
12088577a3SMichael Kruse;   }
13088577a3SMichael Kruse; }
14088577a3SMichael Kruse
15*2410b1cbSNikita Popovdefine void @foo(ptr %A, i64 %i2, i64 %arg, i1 %c) {
16088577a3SMichael Kruseentry:
17088577a3SMichael Kruse  br label %outer.loop
18088577a3SMichael Kruse
19088577a3SMichael Kruseouter.loop:
20088577a3SMichael Kruse  %outer.iv = phi i64 [ 0, %entry ], [ %outer.iv.next, %outer.latch ]
21088577a3SMichael Kruse  %i414 = mul nsw i64 %outer.iv, %i2
22*2410b1cbSNikita Popov  %tmp = getelementptr inbounds i8, ptr %A, i64 %i414
23088577a3SMichael Kruse  br i1 %c, label %inner.preheader, label %outer.latch
24088577a3SMichael Kruse
25088577a3SMichael Kruseinner.preheader:
26088577a3SMichael Kruse  %unknown = shl i64 %arg, %arg
27*2410b1cbSNikita Popov  %arrayidx = getelementptr inbounds i8, ptr %tmp, i64 %unknown
28088577a3SMichael Kruse  br label %inner.loop
29088577a3SMichael Kruse
30088577a3SMichael Kruseinner.loop:
31*2410b1cbSNikita Popov  store float 0.000000e+00, ptr %arrayidx, align 4
32088577a3SMichael Kruse  br label %inner.loop
33088577a3SMichael Kruse
34088577a3SMichael Kruseouter.latch:
35088577a3SMichael Kruse  %outer.iv.next = add nuw nsw i64 %outer.iv, 1
36088577a3SMichael Kruse  br label %outer.loop
37088577a3SMichael Kruse}
38