Skip to content

Commit

Permalink
[SPIRV] Add support for SPV_INTEL_optnone
Browse files Browse the repository at this point in the history
Adds support for SPV_INTEL_optnone.

Currently still in draft form but I wanted to open this revision
to ask some questions.

Differential Revision: https://reviews.llvm.org/D156297
  • Loading branch information
pmatos committed Aug 1, 2023
1 parent eec6931 commit 8f3b87f
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 0 deletions.
11 changes: 11 additions & 0 deletions llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -552,6 +552,10 @@ void RequirementHandler::initAvailableCapabilities(const SPIRVSubtarget &ST) {
// TODO: verify if this needs some checks.
addAvailableCaps({Capability::Float16, Capability::Float64});

// Add cap for SPV_INTEL_optnone.
// FIXME: this should be added only if the target has the extension.
addAvailableCaps({Capability::OptNoneINTEL});

// TODO: add OpenCL extensions.
}
} // namespace SPIRV
Expand Down Expand Up @@ -898,6 +902,13 @@ static void collectReqs(const Module &M, SPIRV::ModuleAnalysisInfo &MAI,
MAI.Reqs.getAndAddRequirements(
SPIRV::OperandCategory::ExecutionModeOperand,
SPIRV::ExecutionMode::VecTypeHint, ST);

if (F.hasOptNone() &&
ST.canUseExtension(SPIRV::Extension::SPV_INTEL_optnone)) {
// Output OpCapability OptNoneINTEL.
MAI.Reqs.addExtension(SPIRV::Extension::SPV_INTEL_optnone);
MAI.Reqs.addCapability(SPIRV::Capability::OptNoneINTEL);
}
}
}

Expand Down
3 changes: 3 additions & 0 deletions llvm/lib/Target/SPIRV/SPIRVSubtarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,11 @@ void SPIRVSubtarget::initAvailableExtensions() {
if (!isOpenCLEnv())
return;
// A default extension for testing.
// FIXME: This should be changed when we can select extensions through a
// command line flag.
AvailableExtensions.insert(
SPIRV::Extension::SPV_KHR_no_integer_wrap_decoration);
AvailableExtensions.insert(SPIRV::Extension::SPV_INTEL_optnone);
}

// TODO: use command line args for this rather than just defaults.
Expand Down
2 changes: 2 additions & 0 deletions llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ defm SPV_KHR_shader_clock : ExtensionOperand<54>;
defm SPV_INTEL_unstructured_loop_controls : ExtensionOperand<55>;
defm SPV_EXT_demote_to_helper_invocation : ExtensionOperand<56>;
defm SPV_INTEL_fpga_reg : ExtensionOperand<57>;
defm SPV_INTEL_optnone : ExtensionOperand<58>;

//===----------------------------------------------------------------------===//
// Multiclass used to define Capabilities enum values and at the same time
Expand Down Expand Up @@ -396,6 +397,7 @@ defm ComputeDerivativeGroupLinearNV : CapabilityOperand<5350, 0, 0, [], []>;
defm FragmentDensityEXT : CapabilityOperand<5291, 0, 0, [], [Shader]>;
defm PhysicalStorageBufferAddressesEXT : CapabilityOperand<5347, 0, 0, [], [Shader]>;
defm CooperativeMatrixNV : CapabilityOperand<5357, 0, 0, [], [Shader]>;
defm OptNoneINTEL : CapabilityOperand<6094, 0, 0, [SPV_INTEL_optnone], []>;

//===----------------------------------------------------------------------===//
// Multiclass used to define SourceLanguage enum values and at the same time
Expand Down
3 changes: 3 additions & 0 deletions llvm/test/CodeGen/SPIRV/optnone.ll
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
;; Check that optnone is correctly ignored when extension is not enabled
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV

; CHECK-SPIRV: OpCapability OptNoneINTEL
; CHECK-SPIRV: OpExtension "SPV_INTEL_optnone"

;; Per SPIR-V spec:
;; FunctionControlDontInlineMask = 0x2 (2)
; CHECK-SPIRV: %[[#]] = OpFunction %[[#]] DontInline
Expand Down

0 comments on commit 8f3b87f

Please sign in to comment.