1+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
12; RUN: llc < %s -mtriple=arm-none-eabi -mcpu=cortex-a8 2>&1 | FileCheck %s --check-prefix=ARM --check-prefix=ACORE
23; RUN: llc < %s -mtriple=thumb-none-eabi -mcpu=cortex-m4 2>&1 | FileCheck %s --check-prefix=ARM --check-prefix=MCORE
34
45define i32 @read_i32_encoded_register () nounwind {
5- entry:
66; ARM-LABEL: read_i32_encoded_register:
7- ; ARM: mrc p1, #2, r0, c3, c4, #5
7+ ; ARM: @ %bb.0: @ %entry
8+ ; ARM-NEXT: mrc p1, #2, r0, c3, c4, #5
9+ ; ARM-NEXT: bx lr
10+ entry:
811 %reg = call i32 @llvm.read_register.i32 (metadata !0 )
912 ret i32 %reg
1013}
1114
1215define i64 @read_i64_encoded_register () nounwind {
13- entry:
1416; ARM-LABEL: read_i64_encoded_register:
15- ; ARM: mrrc p1, #2, r0, r1, c3
17+ ; ARM: @ %bb.0: @ %entry
18+ ; ARM-NEXT: mrrc p1, #2, r0, r1, c3
19+ ; ARM-NEXT: bx lr
20+ entry:
1621 %reg = call i64 @llvm.read_register.i64 (metadata !1 )
1722 ret i64 %reg
1823}
1924
20- define i32 @read_apsr () nounwind {
25+ define i64 @read_volatile_i64_twice () {
26+ ; ACORE-LABEL: read_volatile_i64_twice:
27+ ; ACORE: @ %bb.0: @ %entry
28+ ; ACORE-NEXT: mov r0, #0
29+ ; ACORE-NEXT: mov r1, #0
30+ ; ACORE-NEXT: bx lr
31+ ;
32+ ; MCORE-LABEL: read_volatile_i64_twice:
33+ ; MCORE: @ %bb.0: @ %entry
34+ ; MCORE-NEXT: movs r0, #0
35+ ; MCORE-NEXT: movs r1, #0
36+ ; MCORE-NEXT: bx lr
2137entry:
38+ %0 = tail call i64 @llvm.read_volatile_register.i64 (metadata !5 )
39+ %1 = tail call i64 @llvm.read_volatile_register.i64 (metadata !5 )
40+ %xor = xor i64 %1 , %0
41+ ret i64 %xor
42+ }
43+
44+
45+ define i32 @read_apsr () nounwind {
2246; ARM-LABEL: read_apsr:
23- ; ARM: mrs r0, apsr
47+ ; ARM: @ %bb.0: @ %entry
48+ ; ARM-NEXT: mrs r0, apsr
49+ ; ARM-NEXT: bx lr
50+ entry:
2451 %reg = call i32 @llvm.read_register.i32 (metadata !2 )
2552 ret i32 %reg
2653}
2754
2855define i32 @read_fpscr () nounwind {
29- entry:
3056; ARM-LABEL: read_fpscr:
31- ; ARM: vmrs r0, fpscr
57+ ; ARM: @ %bb.0: @ %entry
58+ ; ARM-NEXT: vmrs r0, fpscr
59+ ; ARM-NEXT: bx lr
60+ entry:
3261 %reg = call i32 @llvm.read_register.i32 (metadata !3 )
3362 ret i32 %reg
3463}
3564
3665define void @write_i32_encoded_register (i32 %x ) nounwind {
37- entry:
3866; ARM-LABEL: write_i32_encoded_register:
39- ; ARM: mcr p1, #2, r0, c3, c4, #5
67+ ; ARM: @ %bb.0: @ %entry
68+ ; ARM-NEXT: mcr p1, #2, r0, c3, c4, #5
69+ ; ARM-NEXT: bx lr
70+ entry:
4071 call void @llvm.write_register.i32 (metadata !0 , i32 %x )
4172 ret void
4273}
4374
4475define void @write_i64_encoded_register (i64 %x ) nounwind {
45- entry:
4676; ARM-LABEL: write_i64_encoded_register:
47- ; ARM: mcrr p1, #2, r0, r1, c3
77+ ; ARM: @ %bb.0: @ %entry
78+ ; ARM-NEXT: mcrr p1, #2, r0, r1, c3
79+ ; ARM-NEXT: bx lr
80+ entry:
4881 call void @llvm.write_register.i64 (metadata !1 , i64 %x )
4982 ret void
5083}
5184
5285define void @write_apsr (i32 %x ) nounwind {
86+ ; ACORE-LABEL: write_apsr:
87+ ; ACORE: @ %bb.0: @ %entry
88+ ; ACORE-NEXT: msr APSR_nzcvq, r0
89+ ; ACORE-NEXT: bx lr
90+ ;
91+ ; MCORE-LABEL: write_apsr:
92+ ; MCORE: @ %bb.0: @ %entry
93+ ; MCORE-NEXT: msr apsr_nzcvq, r0
94+ ; MCORE-NEXT: bx lr
5395entry:
54- ; ARM-LABEL: write_apsr:
55- ; ACORE: msr APSR_nzcvq, r0
56- ; MCORE: msr apsr_nzcvq, r0
5796 call void @llvm.write_register.i32 (metadata !4 , i32 %x )
5897 ret void
5998}
6099
61100define void @write_fpscr (i32 %x ) nounwind {
62- entry:
63101; ARM-LABEL: write_fpscr:
64- ; ARM: vmsr fpscr, r0
102+ ; ARM: @ %bb.0: @ %entry
103+ ; ARM-NEXT: vmsr fpscr, r0
104+ ; ARM-NEXT: bx lr
105+ entry:
65106 call void @llvm.write_register.i32 (metadata !3 , i32 %x )
66107 ret void
67108}
@@ -76,3 +117,4 @@ declare void @llvm.write_register.i64(metadata, i64) nounwind
76117!2 = !{!"apsr" }
77118!3 = !{!"fpscr" }
78119!4 = !{!"apsr_nzcvq" }
120+ !5 = !{!"cp15:1:c14" }
0 commit comments