234 changes: 181 additions & 53 deletions llvm/test/Transforms/Inline/AArch64/sme-pstatesm-attrs.ll
Original file line number Diff line number Diff line change
@@ -1,45 +1,73 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
; RUN: opt < %s -mtriple=aarch64-unknown-linux-gnu -mattr=+sme -S -passes=inline | FileCheck %s

declare void @inlined_body() "aarch64_pstate_sm_compatible";

;
; Define some functions that will be called by the functions below.
; These just call a '...body()' function. If we see the call to one of
; these functions being replaced by '...body()', then we know it has been
; inlined.
;

define void @normal_callee() {
; CHECK-LABEL: define void @normal_callee
; CHECK-SAME: () #[[ATTR1:[0-9]+]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @inlined_body()
ret void
}

define void @streaming_callee() "aarch64_pstate_sm_enabled" {
; CHECK-LABEL: define void @streaming_callee
; CHECK-SAME: () #[[ATTR2:[0-9]+]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @inlined_body()
ret void
}

define void @locally_streaming_callee() "aarch64_pstate_sm_body" {
; CHECK-LABEL: define void @locally_streaming_callee
; CHECK-SAME: () #[[ATTR3:[0-9]+]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @inlined_body()
ret void
}

define void @streaming_compatible_callee() "aarch64_pstate_sm_compatible" {
; CHECK-LABEL: define void @streaming_compatible_callee
; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @inlined_body()
ret void
}

define void @streaming_compatible_locally_streaming_callee() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
; CHECK-LABEL: define void @streaming_compatible_locally_streaming_callee
; CHECK-SAME: () #[[ATTR4:[0-9]+]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @inlined_body()
ret void
}

;
; Now test that inlining only happens when their streaming modes match.
; Test for a number of combinations, where:
; N Normal-interface (PSTATE.SM=0 on entry/exit)
Expand All @@ -58,8 +86,12 @@ entry:
; [ ] N -> N + B
; [ ] N -> SC + B
define void @normal_caller_normal_callee_inline() {
; CHECK-LABEL: @normal_caller_normal_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @normal_caller_normal_callee_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @normal_callee()
ret void
Expand All @@ -71,8 +103,12 @@ entry:
; [ ] N -> N + B
; [ ] N -> SC + B
define void @normal_caller_streaming_callee_dont_inline() {
; CHECK-LABEL: @normal_caller_streaming_callee_dont_inline(
; CHECK: call void @streaming_callee()
; CHECK-LABEL: define void @normal_caller_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @streaming_callee()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_callee()
ret void
Expand All @@ -84,8 +120,12 @@ entry:
; [ ] N -> N + B
; [ ] N -> SC + B
define void @normal_caller_streaming_compatible_callee_inline() {
; CHECK-LABEL: @normal_caller_streaming_compatible_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @normal_caller_streaming_compatible_callee_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_compatible_callee()
ret void
Expand All @@ -97,8 +137,12 @@ entry:
; [x] N -> N + B
; [ ] N -> SC + B
define void @normal_caller_locally_streaming_callee_dont_inline() {
; CHECK-LABEL: @normal_caller_locally_streaming_callee_dont_inline(
; CHECK: call void @locally_streaming_callee()
; CHECK-LABEL: define void @normal_caller_locally_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @locally_streaming_callee()
; CHECK-NEXT: ret void
;
entry:
call void @locally_streaming_callee()
ret void
Expand All @@ -110,8 +154,12 @@ entry:
; [ ] N -> N + B
; [x] N -> SC + B
define void @normal_caller_streaming_compatible_locally_streaming_callee_dont_inline() {
; CHECK-LABEL: @normal_caller_streaming_compatible_locally_streaming_callee_dont_inline(
; CHECK: call void @streaming_compatible_locally_streaming_callee()
; CHECK-LABEL: define void @normal_caller_streaming_compatible_locally_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @streaming_compatible_locally_streaming_callee()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_compatible_locally_streaming_callee()
ret void
Expand All @@ -123,8 +171,12 @@ entry:
; [ ] S -> N + B
; [ ] S -> SC + B
define void @streaming_caller_normal_callee_dont_inline() "aarch64_pstate_sm_enabled" {
; CHECK-LABEL: @streaming_caller_normal_callee_dont_inline(
; CHECK: call void @normal_callee()
; CHECK-LABEL: define void @streaming_caller_normal_callee_dont_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @normal_callee()
; CHECK-NEXT: ret void
;
entry:
call void @normal_callee()
ret void
Expand All @@ -136,8 +188,12 @@ entry:
; [ ] S -> N + B
; [ ] S -> SC + B
define void @streaming_caller_streaming_callee_inline() "aarch64_pstate_sm_enabled" {
; CHECK-LABEL: @streaming_caller_streaming_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @streaming_caller_streaming_callee_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_callee()
ret void
Expand All @@ -149,8 +205,12 @@ entry:
; [ ] S -> N + B
; [ ] S -> SC + B
define void @streaming_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_enabled" {
; CHECK-LABEL: @streaming_caller_streaming_compatible_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @streaming_caller_streaming_compatible_callee_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_compatible_callee()
ret void
Expand All @@ -162,8 +222,12 @@ entry:
; [x] S -> N + B
; [ ] S -> SC + B
define void @streaming_caller_locally_streaming_callee_inline() "aarch64_pstate_sm_enabled" {
; CHECK-LABEL: @streaming_caller_locally_streaming_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @streaming_caller_locally_streaming_callee_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @locally_streaming_callee()
ret void
Expand All @@ -175,8 +239,12 @@ entry:
; [ ] S -> N + B
; [x] S -> SC + B
define void @streaming_caller_streaming_compatible_locally_streaming_callee_inline() "aarch64_pstate_sm_enabled" {
; CHECK-LABEL: @streaming_caller_streaming_compatible_locally_streaming_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @streaming_caller_streaming_compatible_locally_streaming_callee_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_compatible_locally_streaming_callee()
ret void
Expand All @@ -188,8 +256,12 @@ entry:
; [ ] N + B -> N + B
; [ ] N + B -> SC + B
define void @locally_streaming_caller_normal_callee_dont_inline() "aarch64_pstate_sm_body" {
; CHECK-LABEL: @locally_streaming_caller_normal_callee_dont_inline(
; CHECK: call void @normal_callee()
; CHECK-LABEL: define void @locally_streaming_caller_normal_callee_dont_inline
; CHECK-SAME: () #[[ATTR3]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @normal_callee()
; CHECK-NEXT: ret void
;
entry:
call void @normal_callee()
ret void
Expand All @@ -201,8 +273,12 @@ entry:
; [ ] N + B -> N + B
; [ ] N + B -> SC + B
define void @locally_streaming_caller_streaming_callee_inline() "aarch64_pstate_sm_body" {
; CHECK-LABEL: @locally_streaming_caller_streaming_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @locally_streaming_caller_streaming_callee_inline
; CHECK-SAME: () #[[ATTR3]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_callee()
ret void
Expand All @@ -214,8 +290,12 @@ entry:
; [ ] N + B -> N + B
; [ ] N + B -> SC + B
define void @locally_streaming_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_body" {
; CHECK-LABEL: @locally_streaming_caller_streaming_compatible_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @locally_streaming_caller_streaming_compatible_callee_inline
; CHECK-SAME: () #[[ATTR3]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_compatible_callee()
ret void
Expand All @@ -227,8 +307,12 @@ entry:
; [x] N + B -> N + B
; [ ] N + B -> SC + B
define void @locally_streaming_caller_locally_streaming_callee_inline() "aarch64_pstate_sm_body" {
; CHECK-LABEL: @locally_streaming_caller_locally_streaming_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @locally_streaming_caller_locally_streaming_callee_inline
; CHECK-SAME: () #[[ATTR3]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @locally_streaming_callee()
ret void
Expand All @@ -240,8 +324,12 @@ entry:
; [ ] N + B -> N + B
; [x] N + B -> SC + B
define void @locally_streaming_caller_streaming_compatible_locally_streaming_callee_inline() "aarch64_pstate_sm_body" {
; CHECK-LABEL: @locally_streaming_caller_streaming_compatible_locally_streaming_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @locally_streaming_caller_streaming_compatible_locally_streaming_callee_inline
; CHECK-SAME: () #[[ATTR3]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_compatible_locally_streaming_callee()
ret void
Expand All @@ -253,8 +341,12 @@ entry:
; [ ] SC -> N + B
; [ ] SC -> SC + B
define void @streaming_compatible_caller_normal_callee_dont_inline() "aarch64_pstate_sm_compatible" {
; CHECK-LABEL: @streaming_compatible_caller_normal_callee_dont_inline(
; CHECK: call void @normal_callee()
; CHECK-LABEL: define void @streaming_compatible_caller_normal_callee_dont_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @normal_callee()
; CHECK-NEXT: ret void
;
entry:
call void @normal_callee()
ret void
Expand All @@ -266,8 +358,12 @@ entry:
; [ ] SC -> N + B
; [ ] SC -> SC + B
define void @streaming_compatible_caller_streaming_callee_dont_inline() "aarch64_pstate_sm_compatible" {
; CHECK-LABEL: @streaming_compatible_caller_streaming_callee_dont_inline(
; CHECK: call void @streaming_callee()
; CHECK-LABEL: define void @streaming_compatible_caller_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @streaming_callee()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_callee()
ret void
Expand All @@ -279,8 +375,12 @@ entry:
; [ ] SC -> N + B
; [ ] SC -> SC + B
define void @streaming_compatible_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_compatible" {
; CHECK-LABEL: @streaming_compatible_caller_streaming_compatible_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @streaming_compatible_caller_streaming_compatible_callee_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_compatible_callee()
ret void
Expand All @@ -292,8 +392,12 @@ entry:
; [x] SC -> N + B
; [ ] SC -> SC + B
define void @streaming_compatible_caller_locally_streaming_callee_dont_inline() "aarch64_pstate_sm_compatible" {
; CHECK-LABEL: @streaming_compatible_caller_locally_streaming_callee_dont_inline(
; CHECK: call void @locally_streaming_callee()
; CHECK-LABEL: define void @streaming_compatible_caller_locally_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @locally_streaming_callee()
; CHECK-NEXT: ret void
;
entry:
call void @locally_streaming_callee()
ret void
Expand All @@ -305,8 +409,12 @@ entry:
; [ ] SC -> N + B
; [x] SC -> SC + B
define void @streaming_compatible_caller_streaming_compatible_locally_streaming_callee_dont_inline() "aarch64_pstate_sm_compatible" {
; CHECK-LABEL: @streaming_compatible_caller_streaming_compatible_locally_streaming_callee_dont_inline(
; CHECK: call void @streaming_compatible_locally_streaming_callee()
; CHECK-LABEL: define void @streaming_compatible_caller_streaming_compatible_locally_streaming_callee_dont_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @streaming_compatible_locally_streaming_callee()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_compatible_locally_streaming_callee()
ret void
Expand All @@ -317,8 +425,12 @@ entry:
; [ ] SC + B -> N + B
; [ ] SC + B -> SC + B
define void @streaming_compatible_locally_streaming_caller_normal_callee_dont_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
; CHECK-LABEL: @streaming_compatible_locally_streaming_caller_normal_callee_dont_inline(
; CHECK: call void @normal_callee()
; CHECK-LABEL: define void @streaming_compatible_locally_streaming_caller_normal_callee_dont_inline
; CHECK-SAME: () #[[ATTR4]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @normal_callee()
; CHECK-NEXT: ret void
;
entry:
call void @normal_callee()
ret void
Expand All @@ -330,8 +442,12 @@ entry:
; [ ] SC + B -> N + B
; [ ] SC + B -> SC + B
define void @streaming_compatible_locally_streaming_caller_streaming_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
; CHECK-LABEL: @streaming_compatible_locally_streaming_caller_streaming_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @streaming_compatible_locally_streaming_caller_streaming_callee_inline
; CHECK-SAME: () #[[ATTR4]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_callee()
ret void
Expand All @@ -343,8 +459,12 @@ entry:
; [ ] SC + B -> N + B
; [ ] SC + B -> SC + B
define void @streaming_compatible_locally_streaming_caller_streaming_compatible_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
; CHECK-LABEL: @streaming_compatible_locally_streaming_caller_streaming_compatible_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @streaming_compatible_locally_streaming_caller_streaming_compatible_callee_inline
; CHECK-SAME: () #[[ATTR4]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_compatible_callee()
ret void
Expand All @@ -356,8 +476,12 @@ entry:
; [x] SC + B -> N + B
; [ ] SC + B -> SC + B
define void @streaming_compatible_locally_streaming_caller_locally_streaming_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
; CHECK-LABEL: @streaming_compatible_locally_streaming_caller_locally_streaming_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @streaming_compatible_locally_streaming_caller_locally_streaming_callee_inline
; CHECK-SAME: () #[[ATTR4]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @locally_streaming_callee()
ret void
Expand All @@ -369,8 +493,12 @@ entry:
; [ ] SC + B -> N + B
; [x] SC + B -> SC + B
define void @streaming_compatible_locally_streaming_caller_and_callee_inline() "aarch64_pstate_sm_compatible" "aarch64_pstate_sm_body" {
; CHECK-LABEL: @streaming_compatible_locally_streaming_caller_and_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @streaming_compatible_locally_streaming_caller_and_callee_inline
; CHECK-SAME: () #[[ATTR4]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @streaming_compatible_locally_streaming_callee()
ret void
Expand Down
85 changes: 66 additions & 19 deletions llvm/test/Transforms/Inline/AArch64/sme-pstateza-attrs.ll
Original file line number Diff line number Diff line change
@@ -1,32 +1,47 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
; RUN: opt -mtriple=aarch64-unknown-linux-gnu -mattr=+sme -S -passes=inline < %s | FileCheck %s

declare void @inlined_body()

;
; Define some functions that will be called by the functions below.
; These just call a '...body()' function. If we see the call to one of
; these functions being replaced by '...body()', then we know it has been
; inlined.
;

define void @nonza_callee() {
; CHECK-LABEL: define void @nonza_callee
; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @inlined_body()
ret void
}

define void @shared_za_callee() "aarch64_pstate_za_shared" {
; CHECK-LABEL: define void @shared_za_callee
; CHECK-SAME: () #[[ATTR1:[0-9]+]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @inlined_body()
ret void
}

define void @new_za_callee() "aarch64_pstate_za_new" {
; CHECK-LABEL: define void @new_za_callee
; CHECK-SAME: () #[[ATTR2:[0-9]+]] {
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
call void @inlined_body()
ret void
}

;
; Now test that inlining only happens when no lazy-save is needed.
; Test for a number of combinations, where:
; N Not using ZA.
Expand All @@ -37,8 +52,12 @@ define void @new_za_callee() "aarch64_pstate_za_new" {
; [ ] N -> S (This combination is invalid)
; [ ] N -> Z
define void @nonza_caller_nonza_callee_inline() {
; CHECK-LABEL: @nonza_caller_nonza_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @nonza_caller_nonza_callee_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @nonza_callee()
ret void
Expand All @@ -48,8 +67,12 @@ entry:
; [ ] N -> S (This combination is invalid)
; [x] N -> Z
define void @nonza_caller_new_za_callee_dont_inline() {
; CHECK-LABEL: @nonza_caller_new_za_callee_dont_inline(
; CHECK: call void @new_za_callee()
; CHECK-LABEL: define void @nonza_caller_new_za_callee_dont_inline
; CHECK-SAME: () #[[ATTR0]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @new_za_callee()
; CHECK-NEXT: ret void
;
entry:
call void @new_za_callee()
ret void
Expand All @@ -59,8 +82,12 @@ entry:
; [ ] Z -> S
; [ ] Z -> Z
define void @new_za_caller_nonza_callee_dont_inline() "aarch64_pstate_za_new" {
; CHECK-LABEL: @new_za_caller_nonza_callee_dont_inline(
; CHECK: call void @nonza_callee()
; CHECK-LABEL: define void @new_za_caller_nonza_callee_dont_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @nonza_callee()
; CHECK-NEXT: ret void
;
entry:
call void @nonza_callee()
ret void
Expand All @@ -70,8 +97,12 @@ entry:
; [x] Z -> S
; [ ] Z -> Z
define void @new_za_caller_shared_za_callee_inline() "aarch64_pstate_za_new" {
; CHECK-LABEL: @new_za_caller_shared_za_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @new_za_caller_shared_za_callee_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @shared_za_callee()
ret void
Expand All @@ -81,8 +112,12 @@ entry:
; [ ] Z -> S
; [x] Z -> Z
define void @new_za_caller_new_za_callee_dont_inline() "aarch64_pstate_za_new" {
; CHECK-LABEL: @new_za_caller_new_za_callee_dont_inline(
; CHECK: call void @new_za_callee()
; CHECK-LABEL: define void @new_za_caller_new_za_callee_dont_inline
; CHECK-SAME: () #[[ATTR2]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @new_za_callee()
; CHECK-NEXT: ret void
;
entry:
call void @new_za_callee()
ret void
Expand All @@ -92,8 +127,12 @@ entry:
; [ ] Z -> S
; [ ] Z -> Z
define void @shared_za_caller_nonza_callee_dont_inline() "aarch64_pstate_za_shared" {
; CHECK-LABEL: @shared_za_caller_nonza_callee_dont_inline(
; CHECK: call void @nonza_callee()
; CHECK-LABEL: define void @shared_za_caller_nonza_callee_dont_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @nonza_callee()
; CHECK-NEXT: ret void
;
entry:
call void @nonza_callee()
ret void
Expand All @@ -103,8 +142,12 @@ entry:
; [x] S -> Z
; [ ] S -> S
define void @shared_za_caller_new_za_callee_dont_inline() "aarch64_pstate_za_shared" {
; CHECK-LABEL: @shared_za_caller_new_za_callee_dont_inline(
; CHECK: call void @new_za_callee()
; CHECK-LABEL: define void @shared_za_caller_new_za_callee_dont_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @new_za_callee()
; CHECK-NEXT: ret void
;
entry:
call void @new_za_callee()
ret void
Expand All @@ -114,8 +157,12 @@ entry:
; [ ] S -> Z
; [x] S -> S
define void @shared_za_caller_shared_za_callee_inline() "aarch64_pstate_za_shared" {
; CHECK-LABEL: @shared_za_caller_shared_za_callee_inline(
; CHECK: call void @inlined_body()
; CHECK-LABEL: define void @shared_za_caller_shared_za_callee_inline
; CHECK-SAME: () #[[ATTR1]] {
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @inlined_body()
; CHECK-NEXT: ret void
;
entry:
call void @shared_za_callee()
ret void
Expand Down