llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-aarch64 Author: None (llvmbot) <details> <summary>Changes</summary> Backport 10aca26ffffe6a9ee049f479ed7fee9e07421dad Requested by: @<!-- -->MacDue --- Full diff: https://github.com/llvm/llvm-project/pull/177169.diff 2 Files Affected: - (modified) llvm/lib/Target/AArch64/AArch64ISelLowering.cpp (+2-1) - (added) llvm/test/CodeGen/AArch64/sme-new-za-zt0-no-tail-call.ll (+78) ``````````diff diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp index 74ee8ff8ab5f5..093927049e9d1 100644 --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -9328,7 +9328,8 @@ bool AArch64TargetLowering::isEligibleForTailCallOptimization( if (CallAttrs.requiresSMChange() || CallAttrs.requiresLazySave() || CallAttrs.requiresPreservingAllZAState() || CallAttrs.requiresPreservingZT0() || - CallAttrs.caller().hasStreamingBody()) + CallAttrs.caller().hasStreamingBody() || CallAttrs.caller().isNewZA() || + CallAttrs.caller().isNewZT0()) return false; // Functions using the C or Fast calling convention that have an SVE signature diff --git a/llvm/test/CodeGen/AArch64/sme-new-za-zt0-no-tail-call.ll b/llvm/test/CodeGen/AArch64/sme-new-za-zt0-no-tail-call.ll new file mode 100644 index 0000000000000..3c76132556600 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/sme-new-za-zt0-no-tail-call.ll @@ -0,0 +1,78 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2 -O3 -verify-machineinstrs < %s | FileCheck %s + +declare void @inout_za_zt0() "aarch64_inout_za" "aarch64_inout_zt0" + +define void @new_za_zt0() "aarch64_new_za" "aarch64_new_zt0" { +; CHECK-LABEL: new_za_zt0: +; CHECK: // %bb.0: // %entry +; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill +; CHECK-NEXT: .cfi_def_cfa_offset 16 +; CHECK-NEXT: .cfi_offset w30, -16 +; CHECK-NEXT: mrs x8, TPIDR2_EL0 +; CHECK-NEXT: cbz x8, .LBB0_2 +; CHECK-NEXT: // %bb.1: // %entry +; CHECK-NEXT: bl __arm_tpidr2_save +; CHECK-NEXT: msr TPIDR2_EL0, xzr +; CHECK-NEXT: zero {za} +; CHECK-NEXT: zero { zt0 } +; CHECK-NEXT: .LBB0_2: // %entry +; CHECK-NEXT: smstart za +; CHECK-NEXT: bl inout_za_zt0 +; CHECK-NEXT: smstop za +; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload +; CHECK-NEXT: ret +entry: + tail call void @inout_za_zt0() + ret void +} + +declare void @inout_za() "aarch64_inout_za" + +define void @new_za() "aarch64_new_za" { +; CHECK-LABEL: new_za: +; CHECK: // %bb.0: // %entry +; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill +; CHECK-NEXT: .cfi_def_cfa_offset 16 +; CHECK-NEXT: .cfi_offset w30, -16 +; CHECK-NEXT: mrs x8, TPIDR2_EL0 +; CHECK-NEXT: cbz x8, .LBB1_2 +; CHECK-NEXT: // %bb.1: // %entry +; CHECK-NEXT: bl __arm_tpidr2_save +; CHECK-NEXT: msr TPIDR2_EL0, xzr +; CHECK-NEXT: zero {za} +; CHECK-NEXT: .LBB1_2: // %entry +; CHECK-NEXT: smstart za +; CHECK-NEXT: bl inout_za +; CHECK-NEXT: smstop za +; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload +; CHECK-NEXT: ret +entry: + tail call void @inout_za() + ret void +} + +declare void @inout_zt0() "aarch64_inout_zt0" + +define void @new_zt0() "aarch64_new_zt0" { +; CHECK-LABEL: new_zt0: +; CHECK: // %bb.0: // %entry +; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill +; CHECK-NEXT: .cfi_def_cfa_offset 16 +; CHECK-NEXT: .cfi_offset w30, -16 +; CHECK-NEXT: mrs x8, TPIDR2_EL0 +; CHECK-NEXT: cbz x8, .LBB2_2 +; CHECK-NEXT: // %bb.1: // %entry +; CHECK-NEXT: bl __arm_tpidr2_save +; CHECK-NEXT: msr TPIDR2_EL0, xzr +; CHECK-NEXT: zero { zt0 } +; CHECK-NEXT: .LBB2_2: // %entry +; CHECK-NEXT: smstart za +; CHECK-NEXT: bl inout_zt0 +; CHECK-NEXT: smstop za +; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload +; CHECK-NEXT: ret +entry: + tail call void @inout_zt0() + ret void +} `````````` </details> https://github.com/llvm/llvm-project/pull/177169 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
