11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
22; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=none | FileCheck %s --check-prefix=R7
3+ ; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=reserved | FileCheck %s --check-prefix=R7-RES
34; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=all | FileCheck %s --check-prefix=R7-ABI
4- ; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=none -mattr=+aapcs-frame-chain | FileCheck %s --check-prefix=R11
5- ; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=all -mattr=+aapcs-frame-chain | FileCheck %s --check-prefix=R11-ABI
5+ ; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=none -mattr=+aapcs-frame-chain | FileCheck %s --check-prefix=R11
6+ ; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=reserved -mattr=+aapcs-frame-chain | FileCheck %s --check-prefix=R11-RES
7+ ; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=all -mattr=+aapcs-frame-chain | FileCheck %s --check-prefix=R11-ABI
68
79; int test1() {
810; return 0;
@@ -15,6 +17,13 @@ define i32 @test1() "sign-return-address"="non-leaf" {
1517; R7-NEXT: movs r0, #0
1618; R7-NEXT: bx lr
1719;
20+ ; R7-RES-LABEL: test1:
21+ ; R7-RES: .cfi_sections .debug_frame
22+ ; R7-RES-NEXT: .cfi_startproc
23+ ; R7-RES-NEXT: @ %bb.0: @ %entry
24+ ; R7-RES-NEXT: movs r0, #0
25+ ; R7-RES-NEXT: bx lr
26+ ;
1827; R7-ABI-LABEL: test1:
1928; R7-ABI: .cfi_sections .debug_frame
2029; R7-ABI-NEXT: .cfi_startproc
@@ -44,6 +53,13 @@ define i32 @test1() "sign-return-address"="non-leaf" {
4453; R11-NEXT: movs r0, #0
4554; R11-NEXT: bx lr
4655;
56+ ; R11-RES-LABEL: test1:
57+ ; R11-RES: .cfi_sections .debug_frame
58+ ; R11-RES-NEXT: .cfi_startproc
59+ ; R11-RES-NEXT: @ %bb.0: @ %entry
60+ ; R11-RES-NEXT: movs r0, #0
61+ ; R11-RES-NEXT: bx lr
62+ ;
4763; R11-ABI-LABEL: test1:
4864; R11-ABI: .cfi_sections .debug_frame
4965; R11-ABI-NEXT: .cfi_startproc
@@ -104,6 +120,38 @@ define dso_local void @test2(i32 noundef %n) "sign-return-address"="non-leaf" {
104120; R7-NEXT: aut r12, lr, sp
105121; R7-NEXT: bx lr
106122;
123+ ; R7-RES-LABEL: test2:
124+ ; R7-RES: .cfi_startproc
125+ ; R7-RES-NEXT: @ %bb.0: @ %entry
126+ ; R7-RES-NEXT: pac r12, lr, sp
127+ ; R7-RES-NEXT: .save {r4, r6, r7, lr}
128+ ; R7-RES-NEXT: push {r4, r6, r7, lr}
129+ ; R7-RES-NEXT: .cfi_def_cfa_offset 16
130+ ; R7-RES-NEXT: .cfi_offset lr, -4
131+ ; R7-RES-NEXT: .cfi_offset r7, -8
132+ ; R7-RES-NEXT: .cfi_offset r6, -12
133+ ; R7-RES-NEXT: .cfi_offset r4, -16
134+ ; R7-RES-NEXT: .setfp r7, sp, #8
135+ ; R7-RES-NEXT: add r7, sp, #8
136+ ; R7-RES-NEXT: .cfi_def_cfa r7, 8
137+ ; R7-RES-NEXT: .save {ra_auth_code}
138+ ; R7-RES-NEXT: str r12, [sp, #-4]!
139+ ; R7-RES-NEXT: .cfi_offset ra_auth_code, -20
140+ ; R7-RES-NEXT: .pad #4
141+ ; R7-RES-NEXT: sub sp, #4
142+ ; R7-RES-NEXT: movs r1, #7
143+ ; R7-RES-NEXT: add.w r0, r1, r0, lsl #2
144+ ; R7-RES-NEXT: bic r0, r0, #7
145+ ; R7-RES-NEXT: sub.w r0, sp, r0
146+ ; R7-RES-NEXT: mov sp, r0
147+ ; R7-RES-NEXT: bl take_ptr
148+ ; R7-RES-NEXT: sub.w r4, r7, #12
149+ ; R7-RES-NEXT: mov sp, r4
150+ ; R7-RES-NEXT: ldr r12, [sp], #4
151+ ; R7-RES-NEXT: pop.w {r4, r6, r7, lr}
152+ ; R7-RES-NEXT: aut r12, lr, sp
153+ ; R7-RES-NEXT: bx lr
154+ ;
107155; R7-ABI-LABEL: test2:
108156; R7-ABI: .cfi_startproc
109157; R7-ABI-NEXT: @ %bb.0: @ %entry
@@ -165,6 +213,38 @@ define dso_local void @test2(i32 noundef %n) "sign-return-address"="non-leaf" {
165213; R11-NEXT: aut r12, lr, sp
166214; R11-NEXT: bx lr
167215;
216+ ; R11-RES-LABEL: test2:
217+ ; R11-RES: .cfi_startproc
218+ ; R11-RES-NEXT: @ %bb.0: @ %entry
219+ ; R11-RES-NEXT: pac r12, lr, sp
220+ ; R11-RES-NEXT: .save {r4, r7, ra_auth_code}
221+ ; R11-RES-NEXT: push.w {r4, r7, r12}
222+ ; R11-RES-NEXT: .cfi_def_cfa_offset 12
223+ ; R11-RES-NEXT: .cfi_offset ra_auth_code, -4
224+ ; R11-RES-NEXT: .cfi_offset r7, -8
225+ ; R11-RES-NEXT: .cfi_offset r4, -12
226+ ; R11-RES-NEXT: .save {r11, lr}
227+ ; R11-RES-NEXT: push.w {r11, lr}
228+ ; R11-RES-NEXT: .cfi_def_cfa_offset 20
229+ ; R11-RES-NEXT: .cfi_offset lr, -16
230+ ; R11-RES-NEXT: .cfi_offset r11, -20
231+ ; R11-RES-NEXT: .setfp r11, sp
232+ ; R11-RES-NEXT: mov r11, sp
233+ ; R11-RES-NEXT: .cfi_def_cfa_register r11
234+ ; R11-RES-NEXT: .pad #4
235+ ; R11-RES-NEXT: sub sp, #4
236+ ; R11-RES-NEXT: movs r1, #7
237+ ; R11-RES-NEXT: add.w r0, r1, r0, lsl #2
238+ ; R11-RES-NEXT: bic r0, r0, #7
239+ ; R11-RES-NEXT: sub.w r0, sp, r0
240+ ; R11-RES-NEXT: mov sp, r0
241+ ; R11-RES-NEXT: bl take_ptr
242+ ; R11-RES-NEXT: mov sp, r11
243+ ; R11-RES-NEXT: pop.w {r11, lr}
244+ ; R11-RES-NEXT: pop.w {r4, r7, r12}
245+ ; R11-RES-NEXT: aut r12, lr, sp
246+ ; R11-RES-NEXT: bx lr
247+ ;
168248; R11-ABI-LABEL: test2:
169249; R11-ABI: .cfi_startproc
170250; R11-ABI-NEXT: @ %bb.0: @ %entry
@@ -251,6 +331,50 @@ define void @test3(i32 noundef %c, float noundef %e, i32 noundef %z) "sign-retur
251331; R7-NEXT: aut r12, lr, sp
252332; R7-NEXT: bx lr
253333;
334+ ; R7-RES-LABEL: test3:
335+ ; R7-RES: .cfi_startproc
336+ ; R7-RES-NEXT: @ %bb.0: @ %entry
337+ ; R7-RES-NEXT: pac r12, lr, sp
338+ ; R7-RES-NEXT: .save {r4, r5, r6, r7, lr}
339+ ; R7-RES-NEXT: push {r4, r5, r6, r7, lr}
340+ ; R7-RES-NEXT: .cfi_def_cfa_offset 20
341+ ; R7-RES-NEXT: .cfi_offset lr, -4
342+ ; R7-RES-NEXT: .cfi_offset r7, -8
343+ ; R7-RES-NEXT: .cfi_offset r6, -12
344+ ; R7-RES-NEXT: .cfi_offset r5, -16
345+ ; R7-RES-NEXT: .cfi_offset r4, -20
346+ ; R7-RES-NEXT: .setfp r7, sp, #12
347+ ; R7-RES-NEXT: add r7, sp, #12
348+ ; R7-RES-NEXT: .cfi_def_cfa r7, 8
349+ ; R7-RES-NEXT: .save {r8, ra_auth_code}
350+ ; R7-RES-NEXT: push.w {r8, r12}
351+ ; R7-RES-NEXT: .cfi_offset ra_auth_code, -24
352+ ; R7-RES-NEXT: .cfi_offset r8, -28
353+ ; R7-RES-NEXT: .pad #4
354+ ; R7-RES-NEXT: sub sp, #4
355+ ; R7-RES-NEXT: cmp r0, #0
356+ ; R7-RES-NEXT: mov r5, r2
357+ ; R7-RES-NEXT: mov r4, r1
358+ ; R7-RES-NEXT: it ne
359+ ; R7-RES-NEXT: blne knr
360+ ; R7-RES-NEXT: adds r0, r5, #7
361+ ; R7-RES-NEXT: bic r0, r0, #7
362+ ; R7-RES-NEXT: sub.w r0, sp, r0
363+ ; R7-RES-NEXT: mov sp, r0
364+ ; R7-RES-NEXT: bl take_ptr
365+ ; R7-RES-NEXT: mov r0, r4
366+ ; R7-RES-NEXT: movs r1, #0
367+ ; R7-RES-NEXT: bl __aeabi_fcmpeq
368+ ; R7-RES-NEXT: cmp r0, #0
369+ ; R7-RES-NEXT: it eq
370+ ; R7-RES-NEXT: bleq knr
371+ ; R7-RES-NEXT: sub.w r4, r7, #20
372+ ; R7-RES-NEXT: mov sp, r4
373+ ; R7-RES-NEXT: pop.w {r8, r12}
374+ ; R7-RES-NEXT: pop.w {r4, r5, r6, r7, lr}
375+ ; R7-RES-NEXT: aut r12, lr, sp
376+ ; R7-RES-NEXT: bx lr
377+ ;
254378; R7-ABI-LABEL: test3:
255379; R7-ABI: .cfi_startproc
256380; R7-ABI-NEXT: @ %bb.0: @ %entry
@@ -336,6 +460,50 @@ define void @test3(i32 noundef %c, float noundef %e, i32 noundef %z) "sign-retur
336460; R11-NEXT: aut r12, lr, sp
337461; R11-NEXT: bx lr
338462;
463+ ; R11-RES-LABEL: test3:
464+ ; R11-RES: .cfi_startproc
465+ ; R11-RES-NEXT: @ %bb.0: @ %entry
466+ ; R11-RES-NEXT: pac r12, lr, sp
467+ ; R11-RES-NEXT: .save {r4, r5, r6, r7, ra_auth_code}
468+ ; R11-RES-NEXT: push.w {r4, r5, r6, r7, r12}
469+ ; R11-RES-NEXT: .cfi_def_cfa_offset 20
470+ ; R11-RES-NEXT: .cfi_offset ra_auth_code, -4
471+ ; R11-RES-NEXT: .cfi_offset r7, -8
472+ ; R11-RES-NEXT: .cfi_offset r6, -12
473+ ; R11-RES-NEXT: .cfi_offset r5, -16
474+ ; R11-RES-NEXT: .cfi_offset r4, -20
475+ ; R11-RES-NEXT: .save {r11, lr}
476+ ; R11-RES-NEXT: push.w {r11, lr}
477+ ; R11-RES-NEXT: .cfi_def_cfa_offset 28
478+ ; R11-RES-NEXT: .cfi_offset lr, -24
479+ ; R11-RES-NEXT: .cfi_offset r11, -28
480+ ; R11-RES-NEXT: .setfp r11, sp
481+ ; R11-RES-NEXT: mov r11, sp
482+ ; R11-RES-NEXT: .cfi_def_cfa_register r11
483+ ; R11-RES-NEXT: .pad #4
484+ ; R11-RES-NEXT: sub sp, #4
485+ ; R11-RES-NEXT: cmp r0, #0
486+ ; R11-RES-NEXT: mov r5, r2
487+ ; R11-RES-NEXT: mov r4, r1
488+ ; R11-RES-NEXT: it ne
489+ ; R11-RES-NEXT: blne knr
490+ ; R11-RES-NEXT: adds r0, r5, #7
491+ ; R11-RES-NEXT: bic r0, r0, #7
492+ ; R11-RES-NEXT: sub.w r0, sp, r0
493+ ; R11-RES-NEXT: mov sp, r0
494+ ; R11-RES-NEXT: bl take_ptr
495+ ; R11-RES-NEXT: mov r0, r4
496+ ; R11-RES-NEXT: movs r1, #0
497+ ; R11-RES-NEXT: bl __aeabi_fcmpeq
498+ ; R11-RES-NEXT: cmp r0, #0
499+ ; R11-RES-NEXT: it eq
500+ ; R11-RES-NEXT: bleq knr
501+ ; R11-RES-NEXT: mov sp, r11
502+ ; R11-RES-NEXT: pop.w {r11, lr}
503+ ; R11-RES-NEXT: pop.w {r4, r5, r6, r7, r12}
504+ ; R11-RES-NEXT: aut r12, lr, sp
505+ ; R11-RES-NEXT: bx lr
506+ ;
339507; R11-ABI-LABEL: test3:
340508; R11-ABI: .cfi_startproc
341509; R11-ABI-NEXT: @ %bb.0: @ %entry
0 commit comments