[ARM] Better OR's for MVE compares
[llvm-core.git] / test / Transforms / LoopStrengthReduce / gnarly-setupcost.ll
blobadcc5e383cb80ba9451059f38c93f671225a3990
1 ; RUN: opt < %s -loop-reduce -S | FileCheck %s
3 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1"
5 ; Check this completes sensibly. The sequence here is quick for scev to
6 ; calculate, but creates a very large tree if recursed into, the same node
7 ; being processed many times. I will also naturally have a setupcost of
8 ; 0xffffffff, which LSR will treat as invalid.
9 ; CHECK-LABEL: func
10 ; CHECK: load i32, i32* %gep
12 define i32 @func(i32* %in) {
13 entry:
14   %load = load i32, i32* %in, align 4
15   %a1 = add i32 %load, 1
16   %m1 = mul i32 %a1, %load
17   %a2 = add i32 %m1, 1
18   %m2 = mul i32 %a2, %m1
19   %a3 = add i32 %m2, 1
20   %m3 = mul i32 %a3, %m2
21   %a4 = add i32 %m3, 1
22   %m4 = mul i32 %a4, %m3
23   %a5 = add i32 %m4, 1
24   %m5 = mul i32 %a5, %m4
25   %a6 = add i32 %m5, 1
26   %m6 = mul i32 %a6, %m5
27   %a7 = add i32 %m6, 1
28   %m7 = mul i32 %a7, %m6
29   %a8 = add i32 %m7, 1
30   %m8 = mul i32 %a8, %m7
31   %a9 = add i32 %m8, 1
32   %m9 = mul i32 %a9, %m8
33   %a10 = add i32 %m9, 1
34   %m10 = mul i32 %a10, %m9
35   %a11 = add i32 %m10, 1
36   %m11 = mul i32 %a11, %m10
37   %a12 = add i32 %m11, 1
38   %m12 = mul i32 %a12, %m11
39   %a13 = add i32 %m12, 1
40   %m13 = mul i32 %a13, %m12
41   %a14 = add i32 %m13, 1
42   %m14 = mul i32 %a14, %m13
43   %a15 = add i32 %m14, 1
44   %m15 = mul i32 %a15, %m14
45   %a16 = add i32 %m15, 1
46   %m16 = mul i32 %a16, %m15
47   %a17 = add i32 %m16, 1
48   %m17 = mul i32 %a17, %m16
49   %a18 = add i32 %m17, 1
50   %m18 = mul i32 %a18, %m17
51   %a19 = add i32 %m18, 1
52   %m19 = mul i32 %a19, %m18
53   %a20 = add i32 %m19, 1
54   %m20 = mul i32 %a20, %m19
55   %a21 = add i32 %m20, 1
56   %m21 = mul i32 %a21, %m20
57   %a22 = add i32 %m21, 1
58   %m22 = mul i32 %a22, %m21
59   %a23 = add i32 %m22, 1
60   %m23 = mul i32 %a23, %m22
61   %a24 = add i32 %m23, 1
62   %m24 = mul i32 %a24, %m23
63   %a25 = add i32 %m24, 1
64   %m25 = mul i32 %a25, %m24
65   %a26 = add i32 %m25, 1
66   %m26 = mul i32 %a26, %m25
67   %a27 = add i32 %m26, 1
68   %m27 = mul i32 %a27, %m26
69   %a28 = add i32 %m27, 1
70   %m28 = mul i32 %a28, %m27
71   %a29 = add i32 %m28, 1
72   %m29 = mul i32 %a29, %m28
73   %a30 = add i32 %m29, 1
74   %m30 = mul i32 %a30, %m29
75   %a31 = add i32 %m30, 1
76   %m31 = mul i32 %a31, %m30
77   br label %loop
79 loop:
80   %lp = phi i32 [ %m31, %entry ], [ %linc, %loop ]
81   %0 = sext i32 %lp to i64
82   %gep = getelementptr inbounds i32, i32* %in, i64 %0
83   %loopload = load i32, i32* %gep, align 4
84   store i32 0, i32* %gep, align 4
85   %linc = add i32 %lp, 1
86   %lcmp = icmp eq i32 %linc, 100
87   br i1 %lcmp, label %exit, label %loop
89 exit:
90   %ll = phi i32 [ %loopload, %loop ]
91   ret i32 %ll