diff options
author | Vyacheslav Levytskyy <vyacheslav.levytskyy@intel.com> | 2025-01-28 17:33:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-28 17:33:11 +0100 |
commit | df122fc734ce002632f3bfe8a5fc5010349dba16 (patch) | |
tree | 18c6def51992712223102594c04d9d1853e0bc60 /llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp | |
parent | a58e774fba42e13aa00667d644e96b783fc914b4 (diff) | |
download | llvm-df122fc734ce002632f3bfe8a5fc5010349dba16.zip llvm-df122fc734ce002632f3bfe8a5fc5010349dba16.tar.gz llvm-df122fc734ce002632f3bfe8a5fc5010349dba16.tar.bz2 |
[SPIR-V] Change a way SPIR-V Backend API works with user facing options (#124745)
This PR fixes https://github.com/llvm/llvm-project/issues/124703:
* added a new API call `SPIRVTranslate` that is to replace entirely old
`SPIRVTranslateModule` after existing clients switch into the new
function;
* the new `SPIRVTranslate` doesn't require option parsing, replacing the
`Opts` argument with explicit `CodeGenOptLevel` and `Triple` arguments;
* the old `SPIRVTranslateModule` call is a wrapper for `SPIRVTranslate`,
it doesn't require option parsing either and doesn't hold any logic
inside except for converting string options into `CodeGenOptLevel` and
`Triple` arguments;
* usage of the extensions list is reworked to avoid writes to the global
cl::opt variable `lib/Target/SPIRV/SPIRVSubtarget.cpp::Extensions` --
instead a new class member in SPIRVSubtarget.cpp is implemented that
allows to replace supported extensions after SPIRVSubtarget.cpp is
created;
* both API calls don't require option parsing and don't write to global
cl::opt variables.
Other related/required changes:
* SPIRV::Capability::Shader is marked as an capability of lesser
priority for OpenCL environment (to remediate absence of the
"avoid-spirv-capabilities" command line option in API calls);
* unit tests are updated and extended to cover testing of a newer API
call;
* old API call is marked with TODO to remove it after existing clients
switch into the new function.
Diffstat (limited to 'llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp')
-rw-r--r-- | llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp index bc00d50..d3afaf42 100644 --- a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp @@ -73,8 +73,10 @@ static SPIRV::Requirements getSymbolicOperandRequirements(SPIRV::OperandCategory::OperandCategory Category, unsigned i, const SPIRVSubtarget &ST, SPIRV::RequirementHandler &Reqs) { - static AvoidCapabilitiesSet - AvoidCaps; // contains capabilities to avoid if there is another option + // A set of capabilities to avoid if there is another option. + AvoidCapabilitiesSet AvoidCaps; + if (ST.isOpenCLEnv()) + AvoidCaps.S.insert(SPIRV::Capability::Shader); VersionTuple ReqMinVer = getSymbolicOperandMinVersion(Category, i); VersionTuple ReqMaxVer = getSymbolicOperandMaxVersion(Category, i); |