Index: clang/docs/OpenCLSupport.rst =================================================================== --- clang/docs/OpenCLSupport.rst +++ clang/docs/OpenCLSupport.rst @@ -114,6 +114,8 @@ OpenCL builtins --------------- +**Clang builtins** + There are some standard OpenCL functions that are implemented as Clang builtins: - All pipe functions from `section 6.13.16.2/6.13.16.3 @@ -129,6 +131,28 @@ enqueue query functions from `section 6.13.17.5 `_. +**Fast builtin function declarations** + +The implementation of the fast builtin function declarations (available via the +:ref:`-fdeclare-opencl-builtins option `) consists of the +following main components: + +- A TableGen definitions file ``OpenCLBuiltins.td``. This contains a compact + representation of the supported builtin functions. When adding new builtin + functions, this is normally the only file that needs modifying. + +- A Clang TableGen emitter defined in ``ClangOpenCLBuiltinEmitter.cpp``. During + Clang build time, the emitter reads the TableGen definition file and + generates ``OpenCLBuiltins.inc``. This generated file contains various tables + and functions that capture the builtin function data from the TableGen + definitions in a compact manner. + +- OpenCL specific code in ``SemaLookup.cpp``. When ``Sema::LookupBuiltin`` + encounters a potential builtin function, it will check if the name corresponds + to a valid OpenCL builtin function. If so, all overloads of the function are + inserted using ``InsertOCLBuiltinDeclarationsFromTable`` and overload + resolution takes place. + .. _opencl_addrsp: Address spaces attribute @@ -239,6 +263,8 @@ `_ or via `Bugzilla `__. +.. _opencl_fast_builtins: + Fast builtin function declarations ----------------------------------