xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/special-reg-v8m-base.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: not llc < %s -mtriple=thumb-none-eabi -mcpu=cortex-m4 2>&1 | FileCheck %s --check-prefix=V7M
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=thumbv8m.base-none-eabi 2>&1 | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; V7M: LLVM ERROR: Invalid register name "sp_ns".
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine i32 @read_mclass_registers() nounwind {
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: read_mclass_registers:
9*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r0, apsr
10*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, iapsr
11*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, eapsr
12*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, xpsr
13*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, ipsr
14*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, epsr
15*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, iepsr
16*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, msp
17*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, psp
18*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, primask
19*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, control
20*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, msplim
21*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, psplim
22*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, msp_ns
23*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, psp_ns
24*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, primask_ns
25*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, control_ns
26*9880d681SAndroid Build Coastguard Worker  ; CHECK:   mrs r1, sp_ns
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.read_register.i32(metadata !0)
29*9880d681SAndroid Build Coastguard Worker  %1 = call i32 @llvm.read_register.i32(metadata !4)
30*9880d681SAndroid Build Coastguard Worker  %add1 = add i32 %1, %0
31*9880d681SAndroid Build Coastguard Worker  %2 = call i32 @llvm.read_register.i32(metadata !8)
32*9880d681SAndroid Build Coastguard Worker  %add2 = add i32 %add1, %2
33*9880d681SAndroid Build Coastguard Worker  %3 = call i32 @llvm.read_register.i32(metadata !12)
34*9880d681SAndroid Build Coastguard Worker  %add3 = add i32 %add2, %3
35*9880d681SAndroid Build Coastguard Worker  %4 = call i32 @llvm.read_register.i32(metadata !16)
36*9880d681SAndroid Build Coastguard Worker  %add4 = add i32 %add3, %4
37*9880d681SAndroid Build Coastguard Worker  %5 = call i32 @llvm.read_register.i32(metadata !17)
38*9880d681SAndroid Build Coastguard Worker  %add5 = add i32 %add4, %5
39*9880d681SAndroid Build Coastguard Worker  %6 = call i32 @llvm.read_register.i32(metadata !18)
40*9880d681SAndroid Build Coastguard Worker  %add6 = add i32 %add5, %6
41*9880d681SAndroid Build Coastguard Worker  %7 = call i32 @llvm.read_register.i32(metadata !19)
42*9880d681SAndroid Build Coastguard Worker  %add7 = add i32 %add6, %7
43*9880d681SAndroid Build Coastguard Worker  %8 = call i32 @llvm.read_register.i32(metadata !20)
44*9880d681SAndroid Build Coastguard Worker  %add8 = add i32 %add7, %8
45*9880d681SAndroid Build Coastguard Worker  %9 = call i32 @llvm.read_register.i32(metadata !21)
46*9880d681SAndroid Build Coastguard Worker  %add9 = add i32 %add8, %9
47*9880d681SAndroid Build Coastguard Worker  %10 = call i32 @llvm.read_register.i32(metadata !25)
48*9880d681SAndroid Build Coastguard Worker  %add10 = add i32 %add9, %10
49*9880d681SAndroid Build Coastguard Worker  %11 = call i32 @llvm.read_register.i32(metadata !26)
50*9880d681SAndroid Build Coastguard Worker  %add11 = add i32 %add10, %11
51*9880d681SAndroid Build Coastguard Worker  %12 = call i32 @llvm.read_register.i32(metadata !27)
52*9880d681SAndroid Build Coastguard Worker  %add12 = add i32 %add11, %12
53*9880d681SAndroid Build Coastguard Worker  %13 = call i32 @llvm.read_register.i32(metadata !28)
54*9880d681SAndroid Build Coastguard Worker  %add13 = add i32 %add12, %13
55*9880d681SAndroid Build Coastguard Worker  %14 = call i32 @llvm.read_register.i32(metadata !29)
56*9880d681SAndroid Build Coastguard Worker  %add14 = add i32 %add13, %14
57*9880d681SAndroid Build Coastguard Worker  %15 = call i32 @llvm.read_register.i32(metadata !32)
58*9880d681SAndroid Build Coastguard Worker  %add15 = add i32 %add14, %15
59*9880d681SAndroid Build Coastguard Worker  %16 = call i32 @llvm.read_register.i32(metadata !35)
60*9880d681SAndroid Build Coastguard Worker  %add16 = add i32 %add15, %16
61*9880d681SAndroid Build Coastguard Worker  %17 = call i32 @llvm.read_register.i32(metadata !36)
62*9880d681SAndroid Build Coastguard Worker  %add17 = add i32 %add16, %17
63*9880d681SAndroid Build Coastguard Worker  ret i32 %add10
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerdefine void @write_mclass_registers(i32 %x) nounwind {
67*9880d681SAndroid Build Coastguard Workerentry:
68*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: write_mclass_registers:
69*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr apsr, r0
70*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr apsr, r0
71*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr iapsr, r0
72*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr iapsr, r0
73*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr eapsr, r0
74*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr eapsr, r0
75*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr xpsr, r0
76*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr xpsr, r0
77*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr ipsr, r0
78*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr epsr, r0
79*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr iepsr, r0
80*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr msp, r0
81*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr psp, r0
82*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr primask, r0
83*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr control, r0
84*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr msplim, r0
85*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr psplim, r0
86*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr msp_ns, r0
87*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr psp_ns, r0
88*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr primask_ns, r0
89*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr control_ns, r0
90*9880d681SAndroid Build Coastguard Worker  ; CHECK:   msr sp_ns, r0
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !0, i32 %x)
93*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !1, i32 %x)
94*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !4, i32 %x)
95*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !5, i32 %x)
96*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !8, i32 %x)
97*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !9, i32 %x)
98*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !12, i32 %x)
99*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !13, i32 %x)
100*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !16, i32 %x)
101*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !17, i32 %x)
102*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !18, i32 %x)
103*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !19, i32 %x)
104*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !20, i32 %x)
105*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !21, i32 %x)
106*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !25, i32 %x)
107*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !26, i32 %x)
108*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !27, i32 %x)
109*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !28, i32 %x)
110*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !29, i32 %x)
111*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !32, i32 %x)
112*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !35, i32 %x)
113*9880d681SAndroid Build Coastguard Worker  call void @llvm.write_register.i32(metadata !36, i32 %x)
114*9880d681SAndroid Build Coastguard Worker  ret void
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.read_register.i32(metadata) nounwind
118*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.write_register.i32(metadata, i32) nounwind
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker!0 = !{!"apsr"}
121*9880d681SAndroid Build Coastguard Worker!1 = !{!"apsr_nzcvq"}
122*9880d681SAndroid Build Coastguard Worker!4 = !{!"iapsr"}
123*9880d681SAndroid Build Coastguard Worker!5 = !{!"iapsr_nzcvq"}
124*9880d681SAndroid Build Coastguard Worker!8 = !{!"eapsr"}
125*9880d681SAndroid Build Coastguard Worker!9 = !{!"eapsr_nzcvq"}
126*9880d681SAndroid Build Coastguard Worker!12 = !{!"xpsr"}
127*9880d681SAndroid Build Coastguard Worker!13 = !{!"xpsr_nzcvq"}
128*9880d681SAndroid Build Coastguard Worker!16 = !{!"ipsr"}
129*9880d681SAndroid Build Coastguard Worker!17 = !{!"epsr"}
130*9880d681SAndroid Build Coastguard Worker!18 = !{!"iepsr"}
131*9880d681SAndroid Build Coastguard Worker!19 = !{!"msp"}
132*9880d681SAndroid Build Coastguard Worker!20 = !{!"psp"}
133*9880d681SAndroid Build Coastguard Worker!21 = !{!"primask"}
134*9880d681SAndroid Build Coastguard Worker!25 = !{!"control"}
135*9880d681SAndroid Build Coastguard Worker!26 = !{!"msplim"}
136*9880d681SAndroid Build Coastguard Worker!27 = !{!"psplim"}
137*9880d681SAndroid Build Coastguard Worker!28 = !{!"msp_ns"}
138*9880d681SAndroid Build Coastguard Worker!29 = !{!"psp_ns"}
139*9880d681SAndroid Build Coastguard Worker!32 = !{!"primask_ns"}
140*9880d681SAndroid Build Coastguard Worker!35 = !{!"control_ns"}
141*9880d681SAndroid Build Coastguard Worker!36 = !{!"sp_ns"}
142*9880d681SAndroid Build Coastguard Worker
143