xref: /aosp_15_r20/external/llvm/test/CodeGen/Thumb/stm-merge.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=thumbv6m-eabi -verify-machineinstrs %s -o - | FileCheck %s
2*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-v128:64:128-a:0:32-n32-S64"
3*9880d681SAndroid Build Coastguard Workertarget triple = "thumbv6m--linux-gnueabi"
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker@d = internal unnamed_addr global i32 0, align 4
6*9880d681SAndroid Build Coastguard Worker@c = internal global i32* null, align 4
7*9880d681SAndroid Build Coastguard Worker@e = internal unnamed_addr global i32* null, align 4
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind optsize
10*9880d681SAndroid Build Coastguard Workerdefine void @fn1(i32 %x, i32 %y, i32 %z) #0 {
11*9880d681SAndroid Build Coastguard Workerentry:
12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fn1:
13*9880d681SAndroid Build Coastguard Worker; CHECK: stm r[[BASE:[0-9]]]!, {{.*}}
14*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: {{.*}} r[[BASE]]
15*9880d681SAndroid Build Coastguard Worker  %g = alloca i32, align 4
16*9880d681SAndroid Build Coastguard Worker  %h = alloca i32, align 4
17*9880d681SAndroid Build Coastguard Worker  %i = alloca i32, align 4
18*9880d681SAndroid Build Coastguard Worker  store i32 %x, i32* %i, align 4
19*9880d681SAndroid Build Coastguard Worker  store i32 %y, i32* %h, align 4
20*9880d681SAndroid Build Coastguard Worker  store i32 %z, i32* %g, align 4
21*9880d681SAndroid Build Coastguard Worker  %.pr = load i32, i32* @d, align 4
22*9880d681SAndroid Build Coastguard Worker  %cmp11 = icmp slt i32 %.pr, 1
23*9880d681SAndroid Build Coastguard Worker  br i1 %cmp11, label %for.inc.lr.ph, label %for.body5
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerfor.inc.lr.ph:                                    ; preds = %entry
26*9880d681SAndroid Build Coastguard Worker  store i32 1, i32* @d, align 4
27*9880d681SAndroid Build Coastguard Worker  br label %for.body5
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Workerfor.body5:                                        ; preds = %entry, %for.inc.lr.ph, %for.body5
30*9880d681SAndroid Build Coastguard Worker  %f.010 = phi i32 [ %inc7, %for.body5 ], [ 0, %for.inc.lr.ph ], [ 0, %entry ]
31*9880d681SAndroid Build Coastguard Worker  store volatile i32* %g, i32** @c, align 4
32*9880d681SAndroid Build Coastguard Worker  %inc7 = add nsw i32 %f.010, 1
33*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp eq i32 %inc7, 2
34*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.end8, label %for.body5
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerfor.end8:                                         ; preds = %for.body5
37*9880d681SAndroid Build Coastguard Worker  store i32* %h, i32** @e, align 4
38*9880d681SAndroid Build Coastguard Worker  ret void
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind optsize "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
42