Skip to content

Commit

Permalink
Add parsing of OpenCL C++ -cl-std flags (#510)
Browse files Browse the repository at this point in the history
Hello!

Support for OpenCL C++ was added into LLVM 14, but IGC doesn't support
parsing of those flags just yet. I've opened PRs which adds support for
parsing these flags to the following repositories:
[intel-graphics-compiler](intel/intel-graphics-compiler#328),
[compute-runtime](intel/compute-runtime#731) and
[opencl-clang](#510).

The options are passed down into LLVM which then happily compiles my C++
kernel.

PRs should be merged in the following order: opencl-clang,
intel-graphics-compiler, then finally compute-runtime.

Kind regards,
-Lucas

Co-authored-by: Lucas Zadrozny <[email protected]>
(cherry picked from commit 545a145)
  • Loading branch information
lucasz93 authored and wenju-he committed May 16, 2024
1 parent e85b343 commit 4785978
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
3 changes: 3 additions & 0 deletions opencl_clang_options.td
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ def cl_std_CL1_1: Flag<["-"], "cl-std=CL1.1">;
def cl_std_CL1_2: Flag<["-"], "cl-std=CL1.2">;
def cl_std_CL2_0: Flag<["-"], "cl-std=CL2.0">;
def cl_std_CL3_0: Flag<["-"], "cl-std=CL3.0">;
def cl_std_CLCxx: Flag<["-"], "cl-std=CLC++">;
def cl_std_CLCxx1_0: Flag<["-"], "cl-std=CLC++1.0">;
def cl_std_CLCxx2021: Flag<["-"], "cl-std=CLC++2021">;
def cl_uniform_work_group_size: Flag<["-"], "cl-uniform-work-group-size">;
def cl_no_subgroup_ifp: Flag<["-"], "cl-no-subgroup-ifp">;
def triple : Separate<["-"], "triple">, HelpText<"Specify target triple (e.g. i686-apple-darwin9)">;
Expand Down
16 changes: 15 additions & 1 deletion options_compile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ std::string EffectiveOptionsFilter::processOptions(const OpenCLArgList &args,
ArgsVector &effectiveArgs) {
// Reset args
int iCLStdSet = 0;
bool isCpp = false;
bool fp64Enabled = false;
std::string szTriple;
std::string sourceName(llvm::Twine(s_progID++).str());
Expand Down Expand Up @@ -139,6 +140,17 @@ std::string EffectiveOptionsFilter::processOptions(const OpenCLArgList &args,
iCLStdSet = 300;
effectiveArgs.push_back((*it)->getAsString(args));
break;
case OPT_COMPILE_cl_std_CLCxx:
case OPT_COMPILE_cl_std_CLCxx1_0:
iCLStdSet = 200;
isCpp = true;
effectiveArgs.push_back((*it)->getAsString(args));
break;
case OPT_COMPILE_cl_std_CLCxx2021:
iCLStdSet = 300;
isCpp = true;
effectiveArgs.push_back((*it)->getAsString(args));
break;
case OPT_COMPILE_triple:
szTriple = (*it)->getValue();
break;
Expand Down Expand Up @@ -220,7 +232,9 @@ std::string EffectiveOptionsFilter::processOptions(const OpenCLArgList &args,

// Specifying the option makes clang emit function body for functions
// marked with inline keyword.
effectiveArgs.push_back("-fgnu89-inline");
if (!isCpp) {
effectiveArgs.push_back("-fgnu89-inline");
}

// Do not support all extensions by default. Support for a particular
// extension should be enabled by passing a '-cl-ext' option in pszOptionsEx.
Expand Down

0 comments on commit 4785978

Please sign in to comment.