diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -531,9 +531,6 @@ def err_drv_invalid_object_mode : Error<"OBJECT_MODE setting %0 is not recognized and is not a valid setting.">; -def err_drv_invalid_sve_vector_bits : Error< - "'-msve-vector-bits' is not supported without SVE enabled">; - def err_aix_default_altivec_abi : Error< "The default Altivec ABI on AIX is not yet supported, use '-mabi=vec-extabi' for the extended Altivec ABI">; diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -2839,7 +2839,8 @@ "attribute ignored">, InGroup; def err_attribute_unsupported - : Error<"%0 attribute is not supported for this target">; + : Error<"%0 attribute is not supported on targets missing %1;" + " specify an appropriate -march= or -mcpu=">; // The err_*_attribute_argument_not_int are separate because they're used by // VerifyIntegerConstantExpression. def err_aligned_attribute_argument_not_int : Error< diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -376,12 +376,6 @@ if (V8_6Pos != std::end(Features)) V8_6Pos = Features.insert(std::next(V8_6Pos), {"+i8mm", "+bf16"}); - bool HasSve = llvm::is_contained(Features, "+sve"); - // -msve-vector-bits= flag is valid only if SVE is enabled. - if (Args.hasArg(options::OPT_msve_vector_bits_EQ)) - if (!HasSve) - D.Diag(diag::err_drv_invalid_sve_vector_bits); - if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) { if (A->getOption().matches(options::OPT_mno_unaligned_access)) diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -7785,7 +7785,8 @@ // not to need a separate attribute) if (!S.Context.getTargetInfo().hasFeature("neon") && !S.Context.getTargetInfo().hasFeature("mve")) { - S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr; + S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) + << Attr << "'neon' or 'mve'"; Attr.setInvalid(); return; } @@ -7828,7 +7829,8 @@ Sema &S) { // Target must have SVE. if (!S.Context.getTargetInfo().hasFeature("sve")) { - S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr; + S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) + << Attr << "'sve'"; Attr.setInvalid(); return; } diff --git a/clang/test/Driver/aarch64-sve-vector-bits.c b/clang/test/Driver/aarch64-sve-vector-bits.c --- a/clang/test/Driver/aarch64-sve-vector-bits.c +++ b/clang/test/Driver/aarch64-sve-vector-bits.c @@ -22,21 +22,6 @@ // CHECK-2048: "-msve-vector-bits=2048" // CHECK-SCALABLE-NOT: "-msve-vector-bits= -// Bail out if -msve-vector-bits is specified without SVE enabled -// ----------------------------------------------------------------------------- -// RUN: %clang -c %s -### -target aarch64-none-linux-gnu -msve-vector-bits=128 \ -// RUN: 2>&1 | FileCheck --check-prefix=CHECK-NO-SVE-ERROR %s -// RUN: %clang -c %s -### -target aarch64-none-linux-gnu -msve-vector-bits=256 \ -// RUN: 2>&1 | FileCheck --check-prefix=CHECK-NO-SVE-ERROR %s -// RUN: %clang -c %s -### -target aarch64-none-linux-gnu -msve-vector-bits=512 \ -// RUN: 2>&1 | FileCheck --check-prefix=CHECK-NO-SVE-ERROR %s -// RUN: %clang -c %s -### -target aarch64-none-linux-gnu -msve-vector-bits=1024 \ -// RUN: 2>&1 | FileCheck --check-prefix=CHECK-NO-SVE-ERROR %s -// RUN: %clang -c %s -### -target aarch64-none-linux-gnu -msve-vector-bits=2048 \ -// RUN: 2>&1 | FileCheck --check-prefix=CHECK-NO-SVE-ERROR %s - -// CHECK-NO-SVE-ERROR: error: '-msve-vector-bits' is not supported without SVE enabled - // Error out if an unsupported value is passed to -msve-vector-bits. // ----------------------------------------------------------------------------- // RUN: %clang -c %s -### -target aarch64-none-linux-gnu -march=armv8-a+sve \ diff --git a/clang/test/Sema/arm-vector-types-support.c b/clang/test/Sema/arm-vector-types-support.c new file mode 100644 --- /dev/null +++ b/clang/test/Sema/arm-vector-types-support.c @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 %s -triple armv7 -fsyntax-only -verify + +typedef __attribute__((neon_vector_type(2))) int int32x2_t; // expected-error{{'neon_vector_type' attribute is not supported on targets missing 'neon' or 'mve'; specify an appropriate -march= or -mcpu=}} +typedef __attribute__((neon_polyvector_type(16))) short poly8x16_t; // expected-error{{'neon_polyvector_type' attribute is not supported on targets missing 'neon' or 'mve'; specify an appropriate -march= or -mcpu=}} +typedef __attribute__((arm_sve_vector_bits(256))) void nosveflag; // expected-error{{'arm_sve_vector_bits' attribute is not supported on targets missing 'sve'; specify an appropriate -march= or -mcpu=}} diff --git a/clang/test/Sema/neon-vector-types-support.c b/clang/test/Sema/neon-vector-types-support.c deleted file mode 100644 --- a/clang/test/Sema/neon-vector-types-support.c +++ /dev/null @@ -1,4 +0,0 @@ -// RUN: %clang_cc1 %s -triple armv7 -fsyntax-only -verify - -typedef __attribute__((neon_vector_type(2))) int int32x2_t; // expected-error{{'neon_vector_type' attribute is not supported for this target}} -typedef __attribute__((neon_polyvector_type(16))) short poly8x16_t; // expected-error{{'neon_polyvector_type' attribute is not supported for this target}}