Skip to content

Commit 8b8f191

Browse files
[AArch64][SME] Disable inlining of callees with new ZT0 state
Inlining must be disabled for new-ZT0 callees as the callee is required to save ZT0 and toggle PSTATE.ZA on entry.
1 parent 998bdae commit 8b8f191

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ bool AArch64TTIImpl::areInlineCompatible(const Function *Caller,
256256
CalleeAttrs.set(SMEAttrs::SM_Enabled, true);
257257
}
258258

259-
if (CalleeAttrs.isNewZA())
259+
if (CalleeAttrs.isNewZA() || CalleeAttrs.isNewZT0())
260260
return false;
261261

262262
if (CallerAttrs.requiresLazySave(CalleeAttrs) ||

llvm/test/Transforms/Inline/AArch64/sme-pstateza-attrs.ll

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -391,9 +391,33 @@ define void @nonzt0_callee() {
391391
ret void
392392
}
393393

394+
define void @new_zt0_callee() "aarch64_new_zt0" {
395+
; CHECK-LABEL: define void @new_zt0_callee
396+
; CHECK-SAME: () #[[ATTR4:[0-9]+]] {
397+
; CHECK-NEXT: call void asm sideeffect "
398+
; CHECK-NEXT: call void @inlined_body()
399+
; CHECK-NEXT: ret void
400+
;
401+
call void asm sideeffect "; inlineasm", ""()
402+
call void @inlined_body()
403+
ret void
404+
}
405+
406+
define void @nonzt0_caller_new_zt0_callee_dont_inline() {
407+
; CHECK-LABEL: define void @nonzt0_caller_new_zt0_callee_dont_inline
408+
; CHECK-SAME: () #[[ATTR0]] {
409+
; CHECK-NEXT: entry:
410+
; CHECK-NEXT: call void @new_zt0_callee()
411+
; CHECK-NEXT: ret void
412+
;
413+
entry:
414+
call void @new_zt0_callee()
415+
ret void
416+
}
417+
394418
define void @shared_zt0_caller_nonzt0_callee_dont_inline() "aarch64_inout_zt0" {
395419
; CHECK-LABEL: define void @shared_zt0_caller_nonzt0_callee_dont_inline
396-
; CHECK-SAME: () #[[ATTR4:[0-9]+]] {
420+
; CHECK-SAME: () #[[ATTR5:[0-9]+]] {
397421
; CHECK-NEXT: call void @nonzt0_callee()
398422
; CHECK-NEXT: ret void
399423
;
@@ -403,7 +427,7 @@ define void @shared_zt0_caller_nonzt0_callee_dont_inline() "aarch64_inout_zt0" {
403427

404428
define void @shared_zt0_callee() "aarch64_inout_zt0" {
405429
; CHECK-LABEL: define void @shared_zt0_callee
406-
; CHECK-SAME: () #[[ATTR4]] {
430+
; CHECK-SAME: () #[[ATTR5]] {
407431
; CHECK-NEXT: call void asm sideeffect "
408432
; CHECK-NEXT: call void @inlined_body()
409433
; CHECK-NEXT: ret void
@@ -415,7 +439,7 @@ define void @shared_zt0_callee() "aarch64_inout_zt0" {
415439

416440
define void @shared_zt0_caller_shared_zt0_callee_inline() "aarch64_inout_zt0" {
417441
; CHECK-LABEL: define void @shared_zt0_caller_shared_zt0_callee_inline
418-
; CHECK-SAME: () #[[ATTR4]] {
442+
; CHECK-SAME: () #[[ATTR5]] {
419443
; CHECK-NEXT: call void asm sideeffect "
420444
; CHECK-NEXT: call void @inlined_body()
421445
; CHECK-NEXT: ret void

0 commit comments

Comments
 (0)