xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/lsr-code-insertion.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; This test really wants to check that the resultant "cond_true" block only
3*9880d681SAndroid Build Coastguard Worker; has a single store in it, and that cond_true55 only has code to materialize
4*9880d681SAndroid Build Coastguard Worker; the constant and do a store.  We do *not* want something like this:
5*9880d681SAndroid Build Coastguard Worker;
6*9880d681SAndroid Build Coastguard Worker;LBB1_3: @cond_true
7*9880d681SAndroid Build Coastguard Worker;        add r8, r0, r6
8*9880d681SAndroid Build Coastguard Worker;        str r10, [r8, #+4]
9*9880d681SAndroid Build Coastguard Worker;
10*9880d681SAndroid Build Coastguard Worker; CHECK: ldr [[R6:r[0-9*]+]], LCP
11*9880d681SAndroid Build Coastguard Worker; CHECK: cmp {{.*}}, [[R6]]
12*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: lt
13*9880d681SAndroid Build Coastguard Worker; CHECK: strlt
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workertarget triple = "arm-apple-darwin8"
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdefine void @foo(i32* %mc, i32* %mpp, i32* %ip, i32* %dpp, i32* %tpmm, i32 %M, i32* %tpim, i32* %tpdm, i32* %bp, i32* %ms, i32 %xmb) {
18*9880d681SAndroid Build Coastguard Workerentry:
19*9880d681SAndroid Build Coastguard Worker	%tmp6584 = icmp slt i32 %M, 1		; <i1> [#uses=1]
20*9880d681SAndroid Build Coastguard Worker	br i1 %tmp6584, label %return, label %bb
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerbb:		; preds = %cond_next59, %entry
23*9880d681SAndroid Build Coastguard Worker	%indvar = phi i32 [ 0, %entry ], [ %k.069.0, %cond_next59 ]		; <i32> [#uses=6]
24*9880d681SAndroid Build Coastguard Worker	%k.069.0 = add i32 %indvar, 1		; <i32> [#uses=3]
25*9880d681SAndroid Build Coastguard Worker	%tmp3 = getelementptr i32, i32* %mpp, i32 %indvar		; <i32*> [#uses=1]
26*9880d681SAndroid Build Coastguard Worker	%tmp4 = load i32, i32* %tmp3		; <i32> [#uses=1]
27*9880d681SAndroid Build Coastguard Worker	%tmp8 = getelementptr i32, i32* %tpmm, i32 %indvar		; <i32*> [#uses=1]
28*9880d681SAndroid Build Coastguard Worker	%tmp9 = load i32, i32* %tmp8		; <i32> [#uses=1]
29*9880d681SAndroid Build Coastguard Worker	%tmp10 = add i32 %tmp9, %tmp4		; <i32> [#uses=2]
30*9880d681SAndroid Build Coastguard Worker	%tmp13 = getelementptr i32, i32* %mc, i32 %k.069.0		; <i32*> [#uses=5]
31*9880d681SAndroid Build Coastguard Worker	store i32 %tmp10, i32* %tmp13
32*9880d681SAndroid Build Coastguard Worker	%tmp17 = getelementptr i32, i32* %ip, i32 %indvar		; <i32*> [#uses=1]
33*9880d681SAndroid Build Coastguard Worker	%tmp18 = load i32, i32* %tmp17		; <i32> [#uses=1]
34*9880d681SAndroid Build Coastguard Worker	%tmp22 = getelementptr i32, i32* %tpim, i32 %indvar		; <i32*> [#uses=1]
35*9880d681SAndroid Build Coastguard Worker	%tmp23 = load i32, i32* %tmp22		; <i32> [#uses=1]
36*9880d681SAndroid Build Coastguard Worker	%tmp24 = add i32 %tmp23, %tmp18		; <i32> [#uses=2]
37*9880d681SAndroid Build Coastguard Worker	%tmp30 = icmp sgt i32 %tmp24, %tmp10		; <i1> [#uses=1]
38*9880d681SAndroid Build Coastguard Worker	br i1 %tmp30, label %cond_true, label %cond_next
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workercond_true:		; preds = %bb
41*9880d681SAndroid Build Coastguard Worker	store i32 %tmp24, i32* %tmp13
42*9880d681SAndroid Build Coastguard Worker	br label %cond_next
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workercond_next:		; preds = %cond_true, %bb
45*9880d681SAndroid Build Coastguard Worker	%tmp39 = load i32, i32* %tmp13		; <i32> [#uses=1]
46*9880d681SAndroid Build Coastguard Worker	%tmp42 = getelementptr i32, i32* %ms, i32 %k.069.0		; <i32*> [#uses=1]
47*9880d681SAndroid Build Coastguard Worker	%tmp43 = load i32, i32* %tmp42		; <i32> [#uses=1]
48*9880d681SAndroid Build Coastguard Worker	%tmp44 = add i32 %tmp43, %tmp39		; <i32> [#uses=2]
49*9880d681SAndroid Build Coastguard Worker	store i32 %tmp44, i32* %tmp13
50*9880d681SAndroid Build Coastguard Worker	%tmp52 = icmp slt i32 %tmp44, -987654321		; <i1> [#uses=1]
51*9880d681SAndroid Build Coastguard Worker	br i1 %tmp52, label %cond_true55, label %cond_next59
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workercond_true55:		; preds = %cond_next
54*9880d681SAndroid Build Coastguard Worker	store i32 -987654321, i32* %tmp13
55*9880d681SAndroid Build Coastguard Worker	br label %cond_next59
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workercond_next59:		; preds = %cond_true55, %cond_next
58*9880d681SAndroid Build Coastguard Worker	%tmp61 = add i32 %indvar, 2		; <i32> [#uses=1]
59*9880d681SAndroid Build Coastguard Worker	%tmp65 = icmp sgt i32 %tmp61, %M		; <i1> [#uses=1]
60*9880d681SAndroid Build Coastguard Worker	br i1 %tmp65, label %return, label %bb
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerreturn:		; preds = %cond_next59, %entry
63*9880d681SAndroid Build Coastguard Worker	ret void
64*9880d681SAndroid Build Coastguard Worker}
65