[AMDGPU] Add True16 register classes.
[llvm-project.git] / llvm / test / Transforms / Inline / AArch64 / sme-pstateza-attrs.ll
blobbdc9e637fe90c2d1f12c5da0811925ee0c940bf4
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
9 ; inlined.
12 define void @nonza_callee() {
13 entry:
14   call void @inlined_body()
15   ret void
18 define void @shared_za_callee() "aarch64_pstate_za_shared" {
19 entry:
20   call void @inlined_body()
21   ret void
24 define void @new_za_callee() "aarch64_pstate_za_new" {
25   call void @inlined_body()
26   ret void
30 ; Now test that inlining only happens when no lazy-save is needed.
31 ; Test for a number of combinations, where:
32 ; N   Not using ZA.
33 ; S   Shared ZA interface
34 ; Z   New ZA interface
36 ; [x] N -> N
37 ; [ ] N -> S (This combination is invalid)
38 ; [ ] N -> Z
39 define void @nonza_caller_nonza_callee_inline() {
40 ; CHECK-LABEL: @nonza_caller_nonza_callee_inline(
41 ; CHECK: call void @inlined_body()
42 entry:
43   call void @nonza_callee()
44   ret void
47 ; [ ] N -> N
48 ; [ ] N -> S (This combination is invalid)
49 ; [x] N -> Z
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()
53 entry:
54   call void @new_za_callee()
55   ret void
58 ; [x] Z -> N
59 ; [ ] Z -> S
60 ; [ ] Z -> Z
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()
64 entry:
65   call void @nonza_callee()
66   ret void
69 ; [ ] Z -> N
70 ; [x] Z -> S
71 ; [ ] Z -> Z
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()
75 entry:
76   call void @shared_za_callee()
77   ret void
80 ; [ ] Z -> N
81 ; [ ] Z -> S
82 ; [x] Z -> Z
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()
86 entry:
87   call void @new_za_callee()
88   ret void
91 ; [x] Z -> N
92 ; [ ] Z -> S
93 ; [ ] Z -> Z
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()
97 entry:
98   call void @nonza_callee()
99   ret void
102 ; [ ] S -> N
103 ; [x] S -> Z
104 ; [ ] S -> S
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()
108 entry:
109   call void @new_za_callee()
110   ret void
113 ; [ ] S -> N
114 ; [ ] S -> Z
115 ; [x] S -> S
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()
119 entry:
120   call void @shared_za_callee()
121   ret void