Skip to content

Commit 0adab6b

Browse files
authored
[AArch64][Clang] Define __ARM_NEON_SVE_BRIDGE unconditionally (llvm#118272)
The meaning of `__ARM_NEON_SVE_BRIDGE` was changed here: ARM-software/acle#362 Such that it should be defined to `1` if the `arm_neon_sve_bridge.h` header file is available, which is the case for Clang.
1 parent 04b26f0 commit 0adab6b

File tree

4 files changed

+20
-3
lines changed

4 files changed

+20
-3
lines changed

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,9 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
447447
Builder.defineMacro("__ARM_FP16_FORMAT_IEEE", "1");
448448
Builder.defineMacro("__ARM_FP16_ARGS", "1");
449449

450+
// Clang supports arm_neon_sve_bridge.h
451+
Builder.defineMacro("__ARM_NEON_SVE_BRIDGE", "1");
452+
450453
if (Opts.UnsafeFPMath)
451454
Builder.defineMacro("__ARM_FP_FAST", "1");
452455

@@ -464,9 +467,6 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
464467
if (FPU & SveMode)
465468
Builder.defineMacro("__ARM_FEATURE_SVE", "1");
466469

467-
if ((FPU & NeonMode) && (FPU & SveMode))
468-
Builder.defineMacro("__ARM_NEON_SVE_BRIDGE", "1");
469-
470470
if (HasSVE2)
471471
Builder.defineMacro("__ARM_FEATURE_SVE2", "1");
472472

clang/test/Preprocessor/aarch64-target-features.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
// CHECK-NOT: __ARM_FP_FAST 1
4040
// CHECK: __ARM_NEON 1
4141
// CHECK: __ARM_NEON_FP 0xE
42+
// CHECK: __ARM_NEON_SVE_BRIDGE 1
4243
// CHECK: __ARM_PCS_AAPCS64 1
4344
// CHECK-NOT: __ARM_PCS 1
4445
// CHECK-NOT: __ARM_PCS_VFP 1

clang/test/Preprocessor/init-aarch64.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
// AARCH64-NEXT: #define __ARM_FP 0xE
3131
// AARCH64-NEXT: #define __ARM_FP16_ARGS 1
3232
// AARCH64-NEXT: #define __ARM_FP16_FORMAT_IEEE 1
33+
// AARCH64-NEXT: #define __ARM_NEON_SVE_BRIDGE 1
3334
// AARCH64-NEXT: #define __ARM_PCS_AAPCS64 1
3435
// AARCH64-NEXT: #define __ARM_SIZEOF_MINIMAL_ENUM 4
3536
// AARCH64-NEXT: #define __ARM_SIZEOF_WCHAR_T 4
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -verify -emit-llvm -o - %s
2+
// REQUIRES: aarch64-registered-target
3+
4+
// Test that we can use __ARM_NEON_SVE_BRIDGE to guard to inclusion of arm_neon_sve_bridge.h,
5+
// and use the associated intrinsics via a target() attribute.
6+
7+
// expected-no-diagnostics
8+
9+
#ifdef __ARM_NEON_SVE_BRIDGE
10+
#include <arm_neon_sve_bridge.h>
11+
#endif
12+
13+
uint32x4_t __attribute__((target("+sve"))) foo(svuint32_t a) {
14+
return svget_neonq_u32(a);
15+
}

0 commit comments

Comments
 (0)