[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / Transforms / LoopInterchange / bail-out-one-loop.ll
blobd1cf33acd28319795cd35749ad02aeebc26ffc18
1 ; REQUIRES: asserts
3 ; RUN: opt < %s -passes=loop-interchange -debug -disable-output 2>&1 | FileCheck %s
5 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
7 @N = dso_local global i32 0, align 4
8 @a = dso_local global ptr null, align 8
9 @b = dso_local global ptr null, align 8
10 @c = dso_local global ptr null, align 8
12 ; Loop interchange should not run delinearization
13 ; for one loop case and should bail out early.
15 ; CHECK-NOT: Delinearizing
16 ; CHECK-NOT: Strides:
17 ; CHECK-NOT: Terms:
18 ; CHECK: Unsupported depth of loop nest 1, the supported range is [2, 10].
20 define void @foo() {
21 entry:
22   %retval = alloca i32, align 4
23   %i = alloca i32, align 4
24   store i32 0, ptr %retval, align 4
25   store i32 0, ptr %i, align 4
26   br label %for.cond
28 for.cond:                                         ; preds = %for.inc, %entry
29   %0 = load i32, ptr %i, align 4
30   %1 = load i32, ptr @N, align 4
31   %cmp = icmp ult i32 %0, %1
32   br i1 %cmp, label %for.body, label %for.cond.cleanup
34 for.cond.cleanup:                                 ; preds = %for.cond
35   br label %for.end
37 for.body:                                         ; preds = %for.cond
38   %2 = load ptr, ptr @b, align 8
39   %3 = load i32, ptr %i, align 4
40   %idxprom = zext i32 %3 to i64
41   %arrayidx = getelementptr inbounds nuw i32, ptr %2, i64 %idxprom
42   %4 = load i32, ptr %arrayidx, align 4
43   %5 = load ptr, ptr @c, align 8
44   %6 = load i32, ptr %i, align 4
45   %idxprom1 = zext i32 %6 to i64
46   %arrayidx2 = getelementptr inbounds nuw i32, ptr %5, i64 %idxprom1
47   %7 = load i32, ptr %arrayidx2, align 4
48   %add = add nsw i32 %4, %7
49   %8 = load ptr, ptr @a, align 8
50   %9 = load i32, ptr %i, align 4
51   %idxprom3 = zext i32 %9 to i64
52   %arrayidx4 = getelementptr inbounds nuw i32, ptr %8, i64 %idxprom3
53   store i32 %add, ptr %arrayidx4, align 4
54   br label %for.inc
56 for.inc:                                          ; preds = %for.body
57   %10 = load i32, ptr %i, align 4
58   %inc = add i32 %10, 1
59   store i32 %inc, ptr %i, align 4
60   br label %for.cond
62 for.end:                                          ; preds = %for.cond.cleanup
63   ret void