Pierre-vh updated this revision to Diff 477871. Pierre-vh added a comment. Fixing condition, adding new test case
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D138651/new/ https://reviews.llvm.org/D138651 Files: clang/lib/AST/ASTContext.cpp clang/lib/Sema/SemaType.cpp clang/test/SemaCUDA/amdgpu-bf16.cu Index: clang/test/SemaCUDA/amdgpu-bf16.cu =================================================================== --- /dev/null +++ clang/test/SemaCUDA/amdgpu-bf16.cu @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -fsyntax-only -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-linux-gnu -verify %s +// expected-no-diagnostics + +// If AMDGPU is the main target and X86 the aux target, ensure we +// don't complain about unsupported BF16 types in x86 code. + +#include "Inputs/cuda.h" + +__device__ void devicefn() { +} + +__bf16 hostfn(__bf16 a) { + return a; +} + +typedef __bf16 foo __attribute__((__vector_size__(16), __aligned__(16))); \ No newline at end of file Index: clang/lib/Sema/SemaType.cpp =================================================================== --- clang/lib/Sema/SemaType.cpp +++ clang/lib/Sema/SemaType.cpp @@ -1518,7 +1518,9 @@ break; case DeclSpec::TST_half: Result = Context.HalfTy; break; case DeclSpec::TST_BFloat16: - if (!S.Context.getTargetInfo().hasBFloat16Type()) + // Likewise, CUDA host and device may have different __bf16 support. + if (!S.Context.getTargetInfo().hasBFloat16Type() && !S.getLangOpts().CUDA && + !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsDevice)) S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << "__bf16"; Result = Context.BFloat16Ty; Index: clang/lib/AST/ASTContext.cpp =================================================================== --- clang/lib/AST/ASTContext.cpp +++ clang/lib/AST/ASTContext.cpp @@ -2171,9 +2171,13 @@ Align = Target->getLongFractAlign(); break; case BuiltinType::BFloat16: - if (Target->hasBFloat16Type()) { + if (Target->hasBFloat16Type() && + (!getLangOpts().OpenMP || !getLangOpts().OpenMPIsDevice)) { Width = Target->getBFloat16Width(); Align = Target->getBFloat16Align(); + } else if (AuxTarget && AuxTarget->hasBFloat16Type()) { + Width = AuxTarget->getBFloat16Width(); + Align = AuxTarget->getBFloat16Align(); } break; case BuiltinType::Float16:
Index: clang/test/SemaCUDA/amdgpu-bf16.cu =================================================================== --- /dev/null +++ clang/test/SemaCUDA/amdgpu-bf16.cu @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -fsyntax-only -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-linux-gnu -verify %s +// expected-no-diagnostics + +// If AMDGPU is the main target and X86 the aux target, ensure we +// don't complain about unsupported BF16 types in x86 code. + +#include "Inputs/cuda.h" + +__device__ void devicefn() { +} + +__bf16 hostfn(__bf16 a) { + return a; +} + +typedef __bf16 foo __attribute__((__vector_size__(16), __aligned__(16))); \ No newline at end of file Index: clang/lib/Sema/SemaType.cpp =================================================================== --- clang/lib/Sema/SemaType.cpp +++ clang/lib/Sema/SemaType.cpp @@ -1518,7 +1518,9 @@ break; case DeclSpec::TST_half: Result = Context.HalfTy; break; case DeclSpec::TST_BFloat16: - if (!S.Context.getTargetInfo().hasBFloat16Type()) + // Likewise, CUDA host and device may have different __bf16 support. + if (!S.Context.getTargetInfo().hasBFloat16Type() && !S.getLangOpts().CUDA && + !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsDevice)) S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << "__bf16"; Result = Context.BFloat16Ty; Index: clang/lib/AST/ASTContext.cpp =================================================================== --- clang/lib/AST/ASTContext.cpp +++ clang/lib/AST/ASTContext.cpp @@ -2171,9 +2171,13 @@ Align = Target->getLongFractAlign(); break; case BuiltinType::BFloat16: - if (Target->hasBFloat16Type()) { + if (Target->hasBFloat16Type() && + (!getLangOpts().OpenMP || !getLangOpts().OpenMPIsDevice)) { Width = Target->getBFloat16Width(); Align = Target->getBFloat16Align(); + } else if (AuxTarget && AuxTarget->hasBFloat16Type()) { + Width = AuxTarget->getBFloat16Width(); + Align = AuxTarget->getBFloat16Align(); } break; case BuiltinType::Float16:
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits