Skip to content

Commit

Permalink
Add parsing of OpenCL C++ -cl-std flags (#510) (#513)
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 <lucas.zadrozny@hotmail.com>
(cherry picked from commit 545a145)

Co-authored-by: lucasz93 <turbo_sgtls@hotmail.com>
  • Loading branch information
wenju-he and lucasz93 authored May 17, 2024
1 parent c9a6012 commit 842667e
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 842667e

Please sign in to comment.