xref: /llvm-project/llvm/test/CodeGen/ARM/unwind-init.ll (revision d24ab20e9b11d2076d8b9d5cd96f41a6b9c399fb)
11804b579SDerek Schuff; RUN: llc -mtriple=armv7-unknown-linux-gnueabi < %s | FileCheck %s
21804b579SDerek Schuff; Check that all callee-saved registers are saved and restored in functions
31804b579SDerek Schuff; that call __builtin_unwind_init(). This is its undocumented behavior in gcc,
41804b579SDerek Schuff; and it is used in compiling libgcc_eh.
51804b579SDerek Schuff; See also PR8541
61804b579SDerek Schuff
71804b579SDerek Schuffdeclare void @llvm.eh.unwind.init()
81804b579SDerek Schuff
91804b579SDerek Schuffdefine void @calls_unwind_init() {
101804b579SDerek Schuff  call void @llvm.eh.unwind.init()
111804b579SDerek Schuff  ret void
121804b579SDerek Schuff}
131804b579SDerek Schuff
14*d24ab20eSStephen Lin; CHECK-LABEL: calls_unwind_init:
151804b579SDerek Schuff; CHECK: push    {r4, r5, r6, r7, r8, r9, r10, r11, lr}
161804b579SDerek Schuff; CHECK: vpush   {d8, d9, d10, d11, d12, d13, d14, d15}
171804b579SDerek Schuff; CHECK: vpop    {d8, d9, d10, d11, d12, d13, d14, d15}
181804b579SDerek Schuff; CHECK: pop     {r4, r5, r6, r7, r8, r9, r10, r11, pc}
19