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