Author: Romaric Jodin Date: 2024-05-17T06:13:32-07:00 New Revision: 932ca85680db5e4579306f37e55746097fb8ec7f
URL: https://github.com/llvm/llvm-project/commit/932ca85680db5e4579306f37e55746097fb8ec7f DIFF: https://github.com/llvm/llvm-project/commit/932ca85680db5e4579306f37e55746097fb8ec7f.diff LOG: libclc: remove __attribute__((assume)) for clspv targets (#92126) Instead add a proper attribute in clang, and add convert it to function metadata to keep the information in the IR. The goal is to remove the dependency on __attribute__((assume)) that should have not be there in the first place. Ref https://github.com/llvm/llvm-project/pull/84934 Added: clang/test/CodeGen/clspv_libclc_builtin.c Modified: clang/docs/ReleaseNotes.rst clang/include/clang/Basic/Attr.td clang/include/clang/Basic/AttrDocs.td clang/lib/CodeGen/CodeGenFunction.cpp clang/test/Misc/pragma-attribute-supported-attributes-list.test libclc/generic/include/clc/clcfunc.h Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 40e41c940b6af..9799f878d7d72 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -403,6 +403,10 @@ Attribute Changes in Clang - Clang now warns that the ``exclude_from_explicit_instantiation`` attribute is ignored when applied to a local class or a member thereof. +- The ``clspv_libclc_builtin`` attribute has been added to allow clspv + (`OpenCL-C to Vulkan SPIR-V compiler <https://github.com/google/clspv>`_) to identify functions coming from libclc + (`OpenCL-C builtin library <https://libclc.llvm.org>`_). + Improvements to Clang's diagnostics ----------------------------------- - Clang now applies syntax highlighting to the code snippets it diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 52552ba488560..38ee8356583be 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -4561,3 +4561,10 @@ def CodeAlign: StmtAttr { static constexpr int MaximumAlignment = 4096; }]; } + +def ClspvLibclcBuiltin: InheritableAttr { + let Spellings = [Clang<"clspv_libclc_builtin">]; + let Subjects = SubjectList<[Function]>; + let Documentation = [ClspvLibclcBuiltinDoc]; + let SimpleHandler = 1; +} diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index f351822ac74bd..b48aaf65558ac 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -8087,3 +8087,17 @@ requirement: } }]; } + +def ClspvLibclcBuiltinDoc : Documentation { + let Category = DocCatFunction; + let Content = [{ +Attribute used by `clspv`_ (OpenCL-C to Vulkan SPIR-V compiler) to identify functions coming from `libclc`_ (OpenCL-C builtin library). + +.. code-block:: c + + void __attribute__((clspv_libclc_builtin)) libclc_builtin() {} + +.. _`clspv`: https://github.com/google/clspv +.. _`libclc`: https://libclc.llvm.org +}]; +} diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 34dc0bd5c15bc..04abdadd95379 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -985,6 +985,11 @@ void CodeGenFunction::StartFunction(GlobalDecl GD, QualType RetTy, EmitKernelMetadata(FD, Fn); } + if (FD && FD->hasAttr<ClspvLibclcBuiltinAttr>()) { + Fn->setMetadata("clspv_libclc_builtin", + llvm::MDNode::get(getLLVMContext(), {})); + } + // If we are checking function types, emit a function type signature as // prologue data. if (FD && SanOpts.has(SanitizerKind::Function)) { diff --git a/clang/test/CodeGen/clspv_libclc_builtin.c b/clang/test/CodeGen/clspv_libclc_builtin.c new file mode 100644 index 0000000000000..ada2555c79e5b --- /dev/null +++ b/clang/test/CodeGen/clspv_libclc_builtin.c @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -triple spir -emit-llvm %s -o - | FileCheck %s + +// CHECK: @foo() +// CHECK-SAME: !clspv_libclc_builtin + +void __attribute__((clspv_libclc_builtin)) foo() {} diff --git a/clang/test/Misc/pragma-attribute-supported-attributes-list.test b/clang/test/Misc/pragma-attribute-supported-attributes-list.test index 318bfb2df2a7a..fd0e6d71baa80 100644 --- a/clang/test/Misc/pragma-attribute-supported-attributes-list.test +++ b/clang/test/Misc/pragma-attribute-supported-attributes-list.test @@ -48,6 +48,7 @@ // CHECK-NEXT: Capability (SubjectMatchRule_record, SubjectMatchRule_type_alias) // CHECK-NEXT: CarriesDependency (SubjectMatchRule_variable_is_parameter, SubjectMatchRule_objc_method, SubjectMatchRule_function) // CHECK-NEXT: Cleanup (SubjectMatchRule_variable_is_local) +// CHECK-NEXT: ClspvLibclcBuiltin (SubjectMatchRule_function) // CHECK-NEXT: CmseNSEntry (SubjectMatchRule_function) // CHECK-NEXT: Cold (SubjectMatchRule_function) // CHECK-NEXT: Common (SubjectMatchRule_variable) diff --git a/libclc/generic/include/clc/clcfunc.h b/libclc/generic/include/clc/clcfunc.h index ad9eb23f29333..086d780b97085 100644 --- a/libclc/generic/include/clc/clcfunc.h +++ b/libclc/generic/include/clc/clcfunc.h @@ -7,8 +7,7 @@ #if defined(CLC_SPIRV) || defined(CLC_SPIRV64) #define _CLC_DEF #elif defined(CLC_CLSPV) || defined(CLC_CLSPV64) -#define _CLC_DEF \ - __attribute__((noinline)) __attribute__((assume("clspv_libclc_builtin"))) +#define _CLC_DEF __attribute__((noinline)) __attribute__((clspv_libclc_builtin)) #else #define _CLC_DEF __attribute__((always_inline)) #endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits