[compiler-rt] Revert "[compiler-rt][aarch64] Add SME ABI support routines." (PR #68875)

Henrik G. Olsson via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 12 04:09:44 PDT 2023


https://github.com/hnrklssn created https://github.com/llvm/llvm-project/pull/68875

This reverts commit 2b05fa8f0be7e38f4b4364ea855a3d200ded7480.

It seems be causing build failures on green dragon:
https://green.lab.llvm.org/green/job/clang-san-iossim/19806/consoleFull#25062429549ba4694-19c4-4d7e-bec5-911270d8a58c
https://green.lab.llvm.org/green/job/clang-stage1-RA/lastFailedBuild/consoleFull#20418663849ba4694-19c4-4d7e-bec5-911270d8a58c

/var/folders/09/r4vw4v8n5kb67jl66zvlbljw0000gn/T/sme-abi-e48b7e.s:55:3: error: ADR/ADRP relocations must be GOT relative
  adrp x16, ___aarch64_has_sme_and_tpidr2_el0
  ^
/var/folders/09/r4vw4v8n5kb67jl66zvlbljw0000gn/T/sme-abi-e48b7e.s:55:3: error: unknown AArch64 fixup kind!
  adrp x16, ___aarch64_has_sme_and_tpidr2_el0
  ^
/var/folders/09/r4vw4v8n5kb67jl66zvlbljw0000gn/T/sme-abi-e48b7e.s:56:3: error: unknown AArch64 fixup kind!
  ldrb w16, [x16, :lo12:___aarch64_has_sme_and_tpidr2_el0]
  ^
/var/folders/09/r4vw4v8n5kb67jl66zvlbljw0000gn/T/sme-abi-e48b7e.s:105:3: error: ADR/ADRP relocations must be GOT relative
  adrp x14, ___aarch64_has_sme_and_tpidr2_el0
  ^
/var/folders/09/r4vw4v8n5kb67jl66zvlbljw0000gn/T/sme-abi-e48b7e.s:105:3: error: unknown AArch64 fixup kind!
  adrp x14, ___aarch64_has_sme_and_tpidr2_el0
  ^
/var/folders/09/r4vw4v8n5kb67jl66zvlbljw0000gn/T/sme-abi-e48b7e.s:106:3: error: unknown AArch64 fixup kind!
  ldrb w14, [x14, :lo12:___aarch64_has_sme_and_tpidr2_el0]
  ^
/var/folders/09/r4vw4v8n5kb67jl66zvlbljw0000gn/T/sme-abi-e48b7e.s:144:3: error: ADR/ADRP relocations must be GOT relative
  adrp x14, ___aarch64_has_sme_and_tpidr2_el0
  ^
/var/folders/09/r4vw4v8n5kb67jl66zvlbljw0000gn/T/sme-abi-e48b7e.s:144:3: error: unknown AArch64 fixup kind!
  adrp x14, ___aarch64_has_sme_and_tpidr2_el0
  ^
/var/folders/09/r4vw4v8n5kb67jl66zvlbljw0000gn/T/sme-abi-e48b7e.s:145:3: error: unknown AArch64 fixup kind!
  ldrb w14, [x14, :lo12:___aarch64_has_sme_and_tpidr2_el0]
  ^

>From a9bc94be6bcbff50dd22280301499e8ad01fa3de Mon Sep 17 00:00:00 2001
From: "Henrik G. Olsson" <hnrklssn at gmail.com>
Date: Thu, 12 Oct 2023 13:07:04 +0200
Subject: [PATCH] Revert "[compiler-rt][aarch64] Add SME ABI support routines."

This reverts commit 2b05fa8f0be7e38f4b4364ea855a3d200ded7480.
It caused build errors in compiler-rt.
---
 compiler-rt/cmake/Modules/AddCompilerRT.cmake |   4 -
 compiler-rt/cmake/builtin-config-ix.cmake     |   6 -
 compiler-rt/lib/builtins/CMakeLists.txt       |   3 -
 .../lib/builtins/aarch64/sme-abi-init.c       |  49 -----
 compiler-rt/lib/builtins/aarch64/sme-abi.S    | 187 ------------------
 5 files changed, 249 deletions(-)
 delete mode 100644 compiler-rt/lib/builtins/aarch64/sme-abi-init.c
 delete mode 100644 compiler-rt/lib/builtins/aarch64/sme-abi.S

diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
index 5ed49f0f5588144..a72e279dd75e8fe 100644
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -312,10 +312,6 @@ function(add_compiler_rt_runtime name type)
       set(COMPONENT_OPTION COMPONENT ${libname})
     endif()
 
-    if(type STREQUAL "SHARED")
-      list(APPEND LIB_DEFS COMPILER_RT_SHARED_LIB)
-    endif()
-
     if(type STREQUAL "OBJECT")
       if(CMAKE_C_COMPILER_ID MATCHES Clang AND CMAKE_C_COMPILER_TARGET)
         list(APPEND extra_cflags_${libname} "--target=${CMAKE_C_COMPILER_TARGET}")
diff --git a/compiler-rt/cmake/builtin-config-ix.cmake b/compiler-rt/cmake/builtin-config-ix.cmake
index e91e3923a756c53..9cf4877baf48953 100644
--- a/compiler-rt/cmake/builtin-config-ix.cmake
+++ b/compiler-rt/cmake/builtin-config-ix.cmake
@@ -33,12 +33,6 @@ asm(\".arch armv8-a+lse\");
 asm(\"cas w0, w1, [x2]\");
 ")
 
-builtin_check_c_compiler_source(COMPILER_RT_HAS_ASM_SME
-"
-asm(\".arch armv9-a+sme\");
-asm(\"smstart\");
-")
-
 if(ANDROID)
   set(OS_NAME "Android")
 else()
diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt
index b1863746a57e7ee..1afceddc62d846f 100644
--- a/compiler-rt/lib/builtins/CMakeLists.txt
+++ b/compiler-rt/lib/builtins/CMakeLists.txt
@@ -551,8 +551,6 @@ set(aarch64_SOURCES
   ${GENERIC_SOURCES}
   cpu_model.c
   aarch64/fp_mode.c
-  aarch64/sme-abi.S
-  aarch64/sme-abi-init.c
 )
 
 # Generate outline atomics helpers from lse.S base
@@ -782,7 +780,6 @@ else ()
   endif()
 
   append_list_if(COMPILER_RT_HAS_ASM_LSE HAS_ASM_LSE BUILTIN_DEFS)
-  append_list_if(COMPILER_RT_HAS_ASM_SME HAS_ASM_SME BUILTIN_DEFS)
 
   foreach (arch ${BUILTIN_SUPPORTED_ARCH})
     if (CAN_TARGET_${arch})
diff --git a/compiler-rt/lib/builtins/aarch64/sme-abi-init.c b/compiler-rt/lib/builtins/aarch64/sme-abi-init.c
deleted file mode 100644
index 501228c8c6d4452..000000000000000
--- a/compiler-rt/lib/builtins/aarch64/sme-abi-init.c
+++ /dev/null
@@ -1,49 +0,0 @@
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-__attribute__((visibility("hidden"), nocommon))
-_Bool __aarch64_has_sme_and_tpidr2_el0;
-
-// We have multiple ways to check that the function has SME, depending on our
-// target.
-// * For Linux we can use __getauxval().
-// * For newlib we can use __aarch64_sme_accessible().
-
-#if defined(__linux__)
-
-#ifndef AT_HWCAP2
-#define AT_HWCAP2 26
-#endif
-
-#ifndef HWCAP2_SME
-#define HWCAP2_SME (1 << 23)
-#endif
-
-extern unsigned long int __getauxval (unsigned long int);
-
-static _Bool has_sme(void) {
-  return __getauxval(AT_HWCAP2) & HWCAP2_SME;
-}
-
-#else  // defined(__linux__)
-
-#if defined(COMPILER_RT_SHARED_LIB)
-__attribute__((weak))
-#endif
-extern _Bool __aarch64_sme_accessible(void);
-
-static _Bool has_sme(void)  {
-#if defined(COMPILER_RT_SHARED_LIB)
-  if (!__aarch64_sme_accessible)
-    return 0;
-#endif
-  return __aarch64_sme_accessible();
-}
-
-#endif // defined(__linux__)
-
-__attribute__((constructor(90)))
-static void init_aarch64_has_sme(void) {
-  __aarch64_has_sme_and_tpidr2_el0 = has_sme();
-}
diff --git a/compiler-rt/lib/builtins/aarch64/sme-abi.S b/compiler-rt/lib/builtins/aarch64/sme-abi.S
deleted file mode 100644
index f0b037f16b07063..000000000000000
--- a/compiler-rt/lib/builtins/aarch64/sme-abi.S
+++ /dev/null
@@ -1,187 +0,0 @@
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-// This patch implements the support routines for the SME ABI,
-// described here:
-//  https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst#sme-support-routines
-
-#include "../assembly.h"
-
-#ifdef HAS_ASM_SME
-#define ARCH armv9-a+sme
-#define SMSTOP_SM smstop sm
-#define SMSTOP_ZA smstop za
-#define REG_TPIDR2_EL0 TPIDR2_EL0
-#define REG_SVCR SVCR
-#define ADDSVL_X16_X16_1 addsvl x16, x16, #1
-#define LDR_ZA_W15_0_X16 ldr za[w15,0], [x16]
-#define STR_ZA_W15_0_X16 str za[w15,0], [x16]
-#define CNTD_X0 cntd x0
-#define CFI_OFFSET_VG_MINUS_16 .cfi_offset vg, -16
-#else
-#define ARCH armv8-a
-#define SMSTOP_SM .inst 0xd503427f
-#define SMSTOP_ZA .inst 0xd503447f
-#define REG_TPIDR2_EL0 S3_3_C13_C0_5
-#define REG_SVCR S3_3_C4_C2_2
-#define ADDSVL_X16_X16_1 .inst 0x04305830
-#define LDR_ZA_W15_0_X16 .inst 0xe1006200
-#define STR_ZA_W15_0_X16 .inst 0xe1206200
-#define CNTD_X0 .inst 0x04e0e3e0
-#define CFI_OFFSET_VG_MINUS_16 .cfi_escape 0x10, 0x2e, 0x03, 0x11, 0x70, 0x22 // $vg  @ cfa - 16
-#endif
-
-.arch ARCH
-
-// Utility function which calls a system's abort() routine. Because the function
-// is streaming-compatible it should disable streaming-SVE mode before calling
-// abort(). Note that there is no need to preserve any state before the call,
-// because the function does not return.
-DEFINE_COMPILERRT_PRIVATE_FUNCTION(do_abort)
-.cfi_startproc
-	.variant_pcs	SYMBOL_NAME(do_abort)
-	stp	x29, x30, [sp, #-32]!
-  CNTD_X0
-  // Store VG to a stack location that we describe with .cfi_offset
-  str x0, [sp, #16]
-  .cfi_def_cfa_offset 32
-  .cfi_offset w30, -24
-  .cfi_offset w29, -32
-  CFI_OFFSET_VG_MINUS_16
-	bl	__arm_sme_state
-	tbz	x0, #0, 2f
-1:
-	SMSTOP_SM
-2:
-  // We can't make this into a tail-call because the unwinder would
-  // need to restore the value of VG.
-	bl	SYMBOL_NAME(abort)
-.cfi_endproc
-END_COMPILERRT_FUNCTION(do_abort)
-
-// __arm_sme_state fills the result registers based on a local
-// that is set as part of the compiler-rt startup code.
-//   __aarch64_has_sme_and_tpidr2_el0
-DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_sme_state)
-	.variant_pcs	__arm_sme_state
-  mov x0, xzr
-  mov x1, xzr
-
-  adrp  x16, SYMBOL_NAME(__aarch64_has_sme_and_tpidr2_el0)
-  ldrb w16, [x16, :lo12:SYMBOL_NAME(__aarch64_has_sme_and_tpidr2_el0)]
-  cbz w16, 1f
-0:
-  orr x0, x0, #0xC000000000000000
-  mrs x16, REG_SVCR
-  bfxil x0, x16, #0, #2
-  mrs x1, REG_TPIDR2_EL0
-1:
-  ret
-END_COMPILERRT_OUTLINE_FUNCTION(__arm_sme_state)
-
-DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_tpidr2_restore)
-	.variant_pcs	__arm_tpidr2_restore
-  // If TPIDR2_EL0 is nonnull, the subroutine aborts in some platform-specific
-  // manner.
-  mrs x14, REG_TPIDR2_EL0
-  cbnz  x14, 2f
-
-  // If any of the reserved bytes in the first 16 bytes of BLK are nonzero,
-  // the subroutine [..] aborts in some platform-defined manner.
-  ldrh  w14, [x0, #10]
-  cbnz  w14, 2f
-  ldr w14, [x0, #12]
-  cbnz  w14, 2f
-
-  // If BLK.za_save_buffer is NULL, the subroutine does nothing.
-  ldr x16, [x0]
-  cbz x16, 1f
-
-  // If BLK.num_za_save_slices is zero, the subroutine does nothing.
-  ldrh  w14, [x0, #8]
-  cbz x14, 1f
-
-  mov x15, xzr
-0:
-  LDR_ZA_W15_0_X16
-  ADDSVL_X16_X16_1
-  add x15, x15, #1
-  cmp x14, x15
-  b.ne  0b
-1:
-  ret
-2:
-  b  SYMBOL_NAME(do_abort)
-END_COMPILERRT_OUTLINE_FUNCTION(__arm_tpidr2_restore)
-
-DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_tpidr2_save)
-  // If the current thread does not have access to TPIDR2_EL0, the subroutine
-  // does nothing.
-  adrp  x14, SYMBOL_NAME(__aarch64_has_sme_and_tpidr2_el0)
-  ldrb w14, [x14, :lo12:SYMBOL_NAME(__aarch64_has_sme_and_tpidr2_el0)]
-  cbz w14, 1f
-
-  // If TPIDR2_EL0 is null, the subroutine does nothing.
-  mrs x16, REG_TPIDR2_EL0
-  cbz x16, 1f
-
-  // If any of the reserved bytes in the first 16 bytes of the TPIDR2 block are
-  // nonzero, the subroutine [..] aborts in some platform-defined manner.
-  ldrh  w14, [x16, #10]
-  cbnz  w14, 2f
-  ldr w14, [x16, #12]
-  cbnz  w14, 2f
-
-  // If num_za_save_slices is zero, the subroutine does nothing.
-  ldrh  w14, [x16, #8]
-  cbz x14, 1f
-
-  // If za_save_buffer is NULL, the subroutine does nothing.
-  ldr x16, [x16]
-  cbz x16, 1f
-
-  mov x15, xzr
-0:
-  STR_ZA_W15_0_X16
-  ADDSVL_X16_X16_1
-  add x15, x15, #1
-  cmp x14, x15
-  b.ne  0b
-1:
-  ret
-2:
-  b  SYMBOL_NAME(do_abort)
-END_COMPILERRT_OUTLINE_FUNCTION(__arm_tpidr2_save)
-
-DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_za_disable)
-  // If the current thread does not have access to SME, the subroutine does
-  // nothing.
-  adrp  x14, SYMBOL_NAME(__aarch64_has_sme_and_tpidr2_el0)
-  ldrb w14, [x14, :lo12:SYMBOL_NAME(__aarch64_has_sme_and_tpidr2_el0)]
-  cbz w14, 0f
-
-  // Otherwise, the subroutine behaves as if it did the following:
-  // * Call __arm_tpidr2_save.
-  stp x29, x30, [sp, #-16]!
-  .cfi_def_cfa_offset 16
-  mov x29, sp
-  .cfi_def_cfa w29, 16
-  .cfi_offset w30, -8
-  .cfi_offset w29, -16
-  bl  __arm_tpidr2_save
-
-  // * Set TPIDR2_EL0 to null.
-  msr REG_TPIDR2_EL0, xzr
-
-  // * Set PSTATE.ZA to 0.
-  SMSTOP_ZA
-
-  .cfi_def_cfa wsp, 16
-  ldp x29, x30, [sp], #16
-  .cfi_def_cfa_offset 0
-  .cfi_restore w30
-  .cfi_restore w29
-0:
-  ret
-END_COMPILERRT_OUTLINE_FUNCTION(__arm_za_disable)



More information about the llvm-commits mailing list