mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-26 13:26:22 +00:00
[Clang][CUDA] Disable diagnostics for neon attrs for GPU-side CUDA compilation
Disable diagnostics for neon attributes for GPU-side CUDA compilation. Test plan: ninja check-all Differential revision: https://reviews.llvm.org/D152403
This commit is contained in:
parent
dcbbdbe3e5
commit
8b0ea48740
@ -8169,10 +8169,18 @@ static bool verifyValidIntegerConstantExpr(Sema &S, const ParsedAttr &Attr,
|
||||
/// match one of the standard Neon vector types.
|
||||
static void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr,
|
||||
Sema &S, VectorType::VectorKind VecKind) {
|
||||
bool IsTargetCUDAAndHostARM = false;
|
||||
if (S.getLangOpts().CUDAIsDevice) {
|
||||
const TargetInfo *AuxTI = S.getASTContext().getAuxTargetInfo();
|
||||
IsTargetCUDAAndHostARM =
|
||||
AuxTI && (AuxTI->getTriple().isAArch64() || AuxTI->getTriple().isARM());
|
||||
}
|
||||
|
||||
// Target must have NEON (or MVE, whose vectors are similar enough
|
||||
// not to need a separate attribute)
|
||||
if (!S.Context.getTargetInfo().hasFeature("neon") &&
|
||||
!S.Context.getTargetInfo().hasFeature("mve")) {
|
||||
if (!(S.Context.getTargetInfo().hasFeature("neon") ||
|
||||
S.Context.getTargetInfo().hasFeature("mve") ||
|
||||
IsTargetCUDAAndHostARM)) {
|
||||
S.Diag(Attr.getLoc(), diag::err_attribute_unsupported)
|
||||
<< Attr << "'neon' or 'mve'";
|
||||
Attr.setInvalid();
|
||||
@ -8180,8 +8188,8 @@ static void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr,
|
||||
}
|
||||
// Check the attribute arguments.
|
||||
if (Attr.getNumArgs() != 1) {
|
||||
S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr
|
||||
<< 1;
|
||||
S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments)
|
||||
<< Attr << 1;
|
||||
Attr.setInvalid();
|
||||
return;
|
||||
}
|
||||
@ -8191,7 +8199,8 @@ static void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr,
|
||||
return;
|
||||
|
||||
// Only certain element types are supported for Neon vectors.
|
||||
if (!isPermittedNeonBaseType(CurType, VecKind, S)) {
|
||||
if (!isPermittedNeonBaseType(CurType, VecKind, S) &&
|
||||
!IsTargetCUDAAndHostARM) {
|
||||
S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;
|
||||
Attr.setInvalid();
|
||||
return;
|
||||
|
21
clang/test/SemaCUDA/neon-attrs.cu
Normal file
21
clang/test/SemaCUDA/neon-attrs.cu
Normal file
@ -0,0 +1,21 @@
|
||||
// CPU-side compilation on ARM with neon enabled (no errors expected).
|
||||
// RUN: %clang_cc1 -triple arm64-linux-gnu -target-feature +neon -aux-triple nvptx64 -x cuda -fsyntax-only -verify=quiet %s
|
||||
|
||||
// CPU-side compilation on ARM with neon disabled.
|
||||
// RUN: %clang_cc1 -triple arm64-linux-gnu -target-feature -neon -aux-triple nvptx64 -x cuda -fsyntax-only -verify %s
|
||||
|
||||
// GPU-side compilation on ARM (no errors expected).
|
||||
// RUN: %clang_cc1 -triple nvptx64 -aux-triple arm64-linux-gnu -fcuda-is-device -x cuda -fsyntax-only -verify=quiet %s
|
||||
|
||||
// Regular C++ compilation on ARM with neon enabled (no errors expected).
|
||||
// RUN: %clang_cc1 -triple arm64-linux-gnu -target-feature +neon -x c++ -fsyntax-only -verify=quiet %s
|
||||
|
||||
// Regular C++ compilation on ARM with neon disabled.
|
||||
// RUN: %clang_cc1 -triple arm64-linux-gnu -target-feature -neon -x c++ -fsyntax-only -verify %s
|
||||
|
||||
// quiet-no-diagnostics
|
||||
typedef __attribute__((neon_vector_type(4))) float float32x4_t;
|
||||
// expected-error@-1 {{'neon_vector_type' attribute is not supported on targets missing 'neon' or 'mve'}}
|
||||
typedef unsigned char poly8_t;
|
||||
typedef __attribute__((neon_polyvector_type(8))) poly8_t poly8x8_t;
|
||||
// expected-error@-1 {{'neon_polyvector_type' attribute is not supported on targets missing 'neon' or 'mve'}}
|
Loading…
x
Reference in New Issue
Block a user