xref: /aosp_15_r20/external/llvm/test/CodeGen/Hexagon/hwloop-recursion.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -O2 -march=hexagon -mcpu=hexagonv5 < %s
2*9880d681SAndroid Build Coastguard Worker; REQUIRES: asserts
3*9880d681SAndroid Build Coastguard Worker; Check for successful compilation.
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker@c = common global i32 0, align 4
6*9880d681SAndroid Build Coastguard Worker@e = common global i32 0, align 4
7*9880d681SAndroid Build Coastguard Worker@g = common global i32* null, align 4
8*9880d681SAndroid Build Coastguard Worker@a = common global i32 0, align 4
9*9880d681SAndroid Build Coastguard Worker@b = common global i32 0, align 4
10*9880d681SAndroid Build Coastguard Worker@h = common global i32* null, align 4
11*9880d681SAndroid Build Coastguard Worker@d = common global i32 0, align 4
12*9880d681SAndroid Build Coastguard Worker@f = common global i32 0, align 4
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine i32 @fn1([0 x i32]* nocapture readnone %p1) #0 {
15*9880d681SAndroid Build Coastguard Workerentry:
16*9880d681SAndroid Build Coastguard Worker  %0 = load i32*, i32** @h, align 4
17*9880d681SAndroid Build Coastguard Worker  %1 = load i32*, i32** @g, align 4
18*9880d681SAndroid Build Coastguard Worker  %.pre = load i32, i32* @c, align 4
19*9880d681SAndroid Build Coastguard Worker  br label %for.cond
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerfor.cond:
22*9880d681SAndroid Build Coastguard Worker  %2 = phi i32 [ %10, %if.end ], [ %.pre, %entry ]
23*9880d681SAndroid Build Coastguard Worker  store i32 %2, i32* @e, align 4
24*9880d681SAndroid Build Coastguard Worker  %tobool5 = icmp eq i32 %2, 0
25*9880d681SAndroid Build Coastguard Worker  br i1 %tobool5, label %for.end, label %for.body.lr.ph
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph:
28*9880d681SAndroid Build Coastguard Worker  %3 = sub i32 -5, %2
29*9880d681SAndroid Build Coastguard Worker  %4 = urem i32 %3, 5
30*9880d681SAndroid Build Coastguard Worker  %5 = sub i32 %3, %4
31*9880d681SAndroid Build Coastguard Worker  br label %for.body
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerfor.body:
34*9880d681SAndroid Build Coastguard Worker  %add6 = phi i32 [ %2, %for.body.lr.ph ], [ %add, %for.body ]
35*9880d681SAndroid Build Coastguard Worker  %6 = load i32, i32* %1, align 4
36*9880d681SAndroid Build Coastguard Worker  store i32 %6, i32* @a, align 4
37*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %add6, 5
38*9880d681SAndroid Build Coastguard Worker  %tobool = icmp eq i32 %add, 0
39*9880d681SAndroid Build Coastguard Worker  br i1 %tobool, label %for.cond1.for.end_crit_edge, label %for.body
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerfor.cond1.for.end_crit_edge:
42*9880d681SAndroid Build Coastguard Worker  %7 = add i32 %2, 5
43*9880d681SAndroid Build Coastguard Worker  %8 = add i32 %7, %5
44*9880d681SAndroid Build Coastguard Worker  store i32 %8, i32* @e, align 4
45*9880d681SAndroid Build Coastguard Worker  br label %for.end
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerfor.end:
48*9880d681SAndroid Build Coastguard Worker  %9 = load i32, i32* @b, align 4
49*9880d681SAndroid Build Coastguard Worker  %tobool2 = icmp eq i32 %9, 0
50*9880d681SAndroid Build Coastguard Worker  br i1 %tobool2, label %if.end, label %if.then
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerif.then:
53*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* %0, align 4
54*9880d681SAndroid Build Coastguard Worker  %.pre7 = load i32, i32* @c, align 4
55*9880d681SAndroid Build Coastguard Worker  br label %if.end
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerif.end:
58*9880d681SAndroid Build Coastguard Worker  %10 = phi i32 [ %2, %for.end ], [ %.pre7, %if.then ]
59*9880d681SAndroid Build Coastguard Worker  store i32 %10, i32* @d, align 4
60*9880d681SAndroid Build Coastguard Worker  %11 = load i32, i32* @f, align 4
61*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i32 %11, 1
62*9880d681SAndroid Build Coastguard Worker  store i32 %inc, i32* @f, align 4
63*9880d681SAndroid Build Coastguard Worker  br label %for.cond
64*9880d681SAndroid Build Coastguard Worker}
65