1 ; RUN: opt -mtriple=aarch64-unknown-linux-gnu -mattr=+sme -S -passes=inline < %s | FileCheck %s
3 declare void @inlined_body()
6 ; Define some functions that will be called by the functions below.
7 ; These just call a '...body()' function. If we see the call to one of
8 ; these functions being replaced by '...body()', then we know it has been
12 define void @nonza_callee() {
14 call void @inlined_body()
18 define void @shared_za_callee() "aarch64_pstate_za_shared" {
20 call void @inlined_body()
24 define void @new_za_callee() "aarch64_pstate_za_new" {
25 call void @inlined_body()
30 ; Now test that inlining only happens when no lazy-save is needed.
31 ; Test for a number of combinations, where:
33 ; S Shared ZA interface
37 ; [ ] N -> S (This combination is invalid)
39 define void @nonza_caller_nonza_callee_inline() {
40 ; CHECK-LABEL: @nonza_caller_nonza_callee_inline(
41 ; CHECK: call void @inlined_body()
43 call void @nonza_callee()
48 ; [ ] N -> S (This combination is invalid)
50 define void @nonza_caller_new_za_callee_dont_inline() {
51 ; CHECK-LABEL: @nonza_caller_new_za_callee_dont_inline(
52 ; CHECK: call void @new_za_callee()
54 call void @new_za_callee()
61 define void @new_za_caller_nonza_callee_dont_inline() "aarch64_pstate_za_new" {
62 ; CHECK-LABEL: @new_za_caller_nonza_callee_dont_inline(
63 ; CHECK: call void @nonza_callee()
65 call void @nonza_callee()
72 define void @new_za_caller_shared_za_callee_inline() "aarch64_pstate_za_new" {
73 ; CHECK-LABEL: @new_za_caller_shared_za_callee_inline(
74 ; CHECK: call void @inlined_body()
76 call void @shared_za_callee()
83 define void @new_za_caller_new_za_callee_dont_inline() "aarch64_pstate_za_new" {
84 ; CHECK-LABEL: @new_za_caller_new_za_callee_dont_inline(
85 ; CHECK: call void @new_za_callee()
87 call void @new_za_callee()
94 define void @shared_za_caller_nonza_callee_dont_inline() "aarch64_pstate_za_shared" {
95 ; CHECK-LABEL: @shared_za_caller_nonza_callee_dont_inline(
96 ; CHECK: call void @nonza_callee()
98 call void @nonza_callee()
105 define void @shared_za_caller_new_za_callee_dont_inline() "aarch64_pstate_za_shared" {
106 ; CHECK-LABEL: @shared_za_caller_new_za_callee_dont_inline(
107 ; CHECK: call void @new_za_callee()
109 call void @new_za_callee()
116 define void @shared_za_caller_shared_za_callee_inline() "aarch64_pstate_za_shared" {
117 ; CHECK-LABEL: @shared_za_caller_shared_za_callee_inline(
118 ; CHECK: call void @inlined_body()
120 call void @shared_za_callee()