Skip to content

Commit 26afacd

Browse files
bashbaugjsji
authored andcommitted
add support for SPV_EXT_optnone (#2951)
Specifically: Updates SPIR-V headers to the latest tag, to pull in support for SPV_EXT_optnone (and more). Removes all internal enums for SPV_INTEL_optnone and uses the support in the headers instead. Registers the SPV_EXT_optnone extension. Uses the SPV_EXT_optnone extension if it is enabled, otherwise uses the SPV_INTEL_optnone extension if it is enabled, otherwise ignores the OptimizeNone attribute (the ignoring part is not new). Updates the OptNone test: Ensures that the right extension support is declared, depending on the enabled extensions. Ensures that the OptNone capability is declared when either extension is enabled. Note, the spelling for the capability is unconditionally the EXT version. Ensures that the Function Control is present when either extension is enabled. Original commit: KhronosGroup/SPIRV-LLVM-Translator@dd33e5952bfc1ef
1 parent 383926f commit 26afacd

File tree

8 files changed

+38
-28
lines changed

8 files changed

+38
-28
lines changed

llvm-spirv/include/LLVMSPIRVExtensions.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ EXT(SPV_INTEL_fpga_cluster_attributes)
4646
EXT(SPV_INTEL_loop_fuse)
4747
EXT(SPV_INTEL_long_constant_composite) // TODO: rename to
4848
// SPV_INTEL_long_composites later
49+
EXT(SPV_EXT_optnone)
4950
EXT(SPV_INTEL_optnone)
5051
EXT(SPV_INTEL_fpga_dsp_control)
5152
EXT(SPV_INTEL_memory_access_aliasing)

llvm-spirv/lib/SPIRV/SPIRVInternal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ inline void
251251
SPIRVMap<Attribute::AttrKind, SPIRVFunctionControlMaskKind>::init() {
252252
add(Attribute::AlwaysInline, FunctionControlInlineMask);
253253
add(Attribute::NoInline, FunctionControlDontInlineMask);
254-
add(Attribute::OptimizeNone, internal::FunctionControlOptNoneINTELMask);
254+
add(Attribute::OptimizeNone, FunctionControlOptNoneEXTMask);
255255
}
256256
typedef SPIRVMap<Attribute::AttrKind, SPIRVFunctionControlMaskKind>
257257
SPIRSPIRVFuncCtlMaskMap;

llvm-spirv/lib/SPIRV/SPIRVWriter.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5532,10 +5532,15 @@ SPIRVWord LLVMToSPIRVBase::transFunctionControlMask(Function *F) {
55325532
[&](Attribute::AttrKind Attr, SPIRVFunctionControlMaskKind Mask) {
55335533
if (F->hasFnAttribute(Attr)) {
55345534
if (Attr == Attribute::OptimizeNone) {
5535-
if (!BM->isAllowedToUseExtension(ExtensionID::SPV_INTEL_optnone))
5535+
if (BM->isAllowedToUseExtension(ExtensionID::SPV_EXT_optnone)) {
5536+
BM->addExtension(ExtensionID::SPV_EXT_optnone);
5537+
BM->addCapability(CapabilityOptNoneEXT);
5538+
} else if (BM->isAllowedToUseExtension(
5539+
ExtensionID::SPV_INTEL_optnone)) {
5540+
BM->addExtension(ExtensionID::SPV_INTEL_optnone);
5541+
BM->addCapability(CapabilityOptNoneINTEL);
5542+
} else
55365543
return;
5537-
BM->addExtension(ExtensionID::SPV_INTEL_optnone);
5538-
BM->addCapability(internal::CapabilityOptNoneINTEL);
55395544
}
55405545
FCM |= Mask;
55415546
}
@@ -7024,6 +7029,7 @@ bool runSpirvBackend(Module *M, std::string &Result, std::string &ErrMsg,
70247029
SPIRV::ExtensionID::SPV_INTEL_cache_controls,
70257030
SPIRV::ExtensionID::SPV_INTEL_global_variable_fpga_decorations,
70267031
SPIRV::ExtensionID::SPV_INTEL_global_variable_host_access,
7032+
SPIRV::ExtensionID::SPV_EXT_optnone,
70277033
SPIRV::ExtensionID::SPV_INTEL_optnone,
70287034
SPIRV::ExtensionID::SPV_INTEL_usm_storage_classes,
70297035
SPIRV::ExtensionID::SPV_INTEL_subgroups,

llvm-spirv/lib/SPIRV/libSPIRV/SPIRVIsValidEnum.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ inline bool isValidFunctionControlMask(SPIRVWord Mask) {
294294
ValidMask |= FunctionControlDontInlineMask;
295295
ValidMask |= FunctionControlPureMask;
296296
ValidMask |= FunctionControlConstMask;
297-
ValidMask |= internal::FunctionControlOptNoneINTELMask;
297+
ValidMask |= FunctionControlOptNoneEXTMask;
298298

299299
return (Mask & ~ValidMask) == 0;
300300
}

llvm-spirv/lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ template <> inline void SPIRVMap<Capability, std::string>::init() {
636636
add(CapabilityAtomicFloat32AddEXT, "AtomicFloat32AddEXT");
637637
add(CapabilityAtomicFloat64AddEXT, "AtomicFloat64AddEXT");
638638
add(CapabilityLongCompositesINTEL, "LongCompositesINTEL");
639-
add(CapabilityOptNoneINTEL, "OptNoneINTEL");
639+
add(CapabilityOptNoneEXT, "OptNoneEXT");
640640
add(CapabilityAtomicFloat16AddEXT, "AtomicFloat16AddEXT");
641641
add(CapabilityDebugInfoModuleINTEL, "DebugInfoModuleINTEL");
642642
add(CapabilitySplitBarrierINTEL, "SplitBarrierINTEL");
@@ -656,7 +656,6 @@ template <> inline void SPIRVMap<Capability, std::string>::init() {
656656
add(CapabilityRegisterLimitsINTEL, "RegisterLimitsINTEL");
657657
// From spirv_internal.hpp
658658
add(internal::CapabilityFastCompositeINTEL, "FastCompositeINTEL");
659-
add(internal::CapabilityOptNoneINTEL, "OptNoneINTEL");
660659
add(internal::CapabilityTokenTypeINTEL, "TokenTypeINTEL");
661660
add(internal::CapabilityFPArithmeticFenceINTEL, "FPArithmeticFenceINTEL");
662661
add(internal::CapabilityBfloat16ConversionINTEL, "Bfloat16ConversionINTEL");

llvm-spirv/lib/SPIRV/libSPIRV/spirv_internal.hpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ enum InternalDecoration {
107107

108108
enum InternalCapability {
109109
ICapFastCompositeINTEL = 6093,
110-
ICapOptNoneINTEL = 6094,
111110
ICapTokenTypeINTEL = 6112,
112111
ICapBfloat16ConversionINTEL = 6115,
113112
ICapabilityJointMatrixINTEL = 6118,
@@ -132,8 +131,6 @@ enum InternalCapability {
132131
ICapabilityBindlessImagesINTEL = 6528
133132
};
134133

135-
enum InternalFunctionControlMask { IFunctionControlOptNoneINTELMask = 0x10000 };
136-
137134
enum InternalExecutionMode {
138135
IExecModeFastCompositeKernelINTEL = 6088,
139136
IExecModeNamedSubgroupSizeINTEL = 6446,
@@ -291,8 +288,6 @@ constexpr Decoration DecorationArgumentAttributeINTEL =
291288

292289
constexpr Capability CapabilityFastCompositeINTEL =
293290
static_cast<Capability>(ICapFastCompositeINTEL);
294-
constexpr Capability CapabilityOptNoneINTEL =
295-
static_cast<Capability>(ICapOptNoneINTEL);
296291
constexpr Capability CapabilityTokenTypeINTEL =
297292
static_cast<Capability>(ICapTokenTypeINTEL);
298293
constexpr Capability CapabilityFPArithmeticFenceINTEL =
@@ -302,9 +297,6 @@ constexpr Capability CapabilityBfloat16ConversionINTEL =
302297
constexpr Capability CapabilityGlobalVariableDecorationsINTEL =
303298
static_cast<Capability>(ICapGlobalVariableDecorationsINTEL);
304299

305-
constexpr FunctionControlMask FunctionControlOptNoneINTELMask =
306-
static_cast<FunctionControlMask>(IFunctionControlOptNoneINTELMask);
307-
308300
constexpr ExecutionMode ExecutionModeFastCompositeKernelINTEL =
309301
static_cast<ExecutionMode>(IExecModeFastCompositeKernelINTEL);
310302

llvm-spirv/spirv-headers-tag.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
efb6b4099ddb8fa60f62956dee592c4b94ec6a49
1+
3f17b2af6784bfa2c5aa5dbb8e0e74a607dd8b3b

llvm-spirv/test/optnone.ll

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,44 @@
11
; RUN: llvm-as %s -o %t.bc
2-
; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_INTEL_optnone -spirv-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV
2+
; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_EXT_optnone -spirv-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV-EXT
3+
; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_INTEL_optnone -spirv-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV-INTEL
4+
; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_EXT_optnone,+SPV_INTEL_optnone -spirv-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV-BOTH
35

4-
; RUN: llvm-spirv --spirv-ext=+SPV_INTEL_optnone %t.bc -o %t.spv
6+
7+
; RUN: llvm-spirv --spirv-ext=+SPV_EXT_optnone %t.bc -o %t.spv
58
; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
69
; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM
710

811
; Check that optnone is correctly ignored when extension is not enabled
9-
; RUN: llvm-spirv %t.bc -spirv-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV-NO-EXT
12+
; RUN: llvm-spirv %t.bc -spirv-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV-NONE
1013

1114
; RUN: llvm-spirv %t.bc -o %t.spv
1215
; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
13-
; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM-NO-EXT
16+
; RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM-NONE
17+
18+
; Note: The capability is unconditionally printed with the EXT suffix.
19+
; CHECK-SPIRV-EXT: Capability OptNoneEXT
20+
; CHECK-SPIRV-INTEL: Capability OptNoneEXT
21+
; CHECK-SPIRV-BOTH: Capability OptNoneEXT
1422

15-
; CHECK-SPIRV: Capability OptNoneINTEL
16-
; CHECK-SPIRV: Extension "SPV_INTEL_optnone"
23+
; CHECK-SPIRV-EXT: Extension "SPV_EXT_optnone"
24+
; CHECK-SPIRV-INTEL: Extension "SPV_INTEL_optnone"
25+
; Note: When both extensions are enabled, prefer the EXT extension.
26+
; CHECK-SPIRV-BOTH: Extension "SPV_EXT_optnone"
1727

1828
; Per SPIR-V spec:
1929
; FunctionControlDontInlineMask = 0x2 (2)
20-
; Per SPIR-V spec extension SPV_INTEL_optnone:
21-
; FunctionControlOptNoneINTELMask = 0x10000 (65536)
22-
; CHECK-SPIRV: Function {{[0-9]+}} {{[0-9]+}} 65538
23-
; CHECK-SPIRV-NO-EXT: Function {{[0-9]+}} {{[0-9]+}} 2
30+
; Per SPIR-V spec extension spec:
31+
; FunctionControlOptNoneMask = 0x10000 (65536)
32+
; CHECK-SPIRV-EXT: Function {{[0-9]+}} {{[0-9]+}} 65538
33+
; CHECK-SPIRV-INTEL: Function {{[0-9]+}} {{[0-9]+}} 65538
34+
; CHECK-SPIRV-BOTH: Function {{[0-9]+}} {{[0-9]+}} 65538
35+
; CHECK-SPIRV-NONE: Function {{[0-9]+}} {{[0-9]+}} 2
2436

2537
; CHECK-LLVM: define spir_func void @_Z3foov() #[[ATTR:[0-9]+]]
2638
; CHECK-LLVM: #[[ATTR]] = { {{.*}}noinline{{.*}}optnone{{.*}} }
2739

28-
; CHECK-LLVM-NO-EXT: define spir_func void @_Z3foov() #[[ATTR:[0-9]+]]
29-
; CHECK-LLVM-NO-EXT-NOT: #[[ATTR]] = { {{.*}}noinline{{.*}}optnone{{.*}} }
40+
; CHECK-LLVM-NONE: define spir_func void @_Z3foov() #[[ATTR:[0-9]+]]
41+
; CHECK-LLVM-NONE-NOT: #[[ATTR]] = { {{.*}}noinline{{.*}}optnone{{.*}} }
3042

3143
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
3244
target triple = "spir-unknown-unknown"

0 commit comments

Comments
 (0)