Skip to content

Commit 1fe6526

Browse files
aratajewbashbaug
andauthored
[Backport to 14] add support for SPV_EXT_optnone (#2951) (#3474)
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. Co-authored-by: Ben Ashbaugh <[email protected]>
1 parent f272a0c commit 1fe6526

File tree

7 files changed

+36
-27
lines changed

7 files changed

+36
-27
lines changed

include/LLVMSPIRVExtensions.inc

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

lib/SPIRV/SPIRVInternal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ SPIRVMap<Attribute::AttrKind, SPIRVFunctionControlMaskKind>::init() {
257257
add(Attribute::ReadOnly, FunctionControlConstMask);
258258
add(Attribute::AlwaysInline, FunctionControlInlineMask);
259259
add(Attribute::NoInline, FunctionControlDontInlineMask);
260-
add(Attribute::OptimizeNone, internal::FunctionControlOptNoneINTELMask);
260+
add(Attribute::OptimizeNone, FunctionControlOptNoneEXTMask);
261261
}
262262
typedef SPIRVMap<Attribute::AttrKind, SPIRVFunctionControlMaskKind>
263263
SPIRSPIRVFuncCtlMaskMap;

lib/SPIRV/SPIRVWriter.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4741,10 +4741,15 @@ SPIRVWord LLVMToSPIRVBase::transFunctionControlMask(Function *F) {
47414741
[&](Attribute::AttrKind Attr, SPIRVFunctionControlMaskKind Mask) {
47424742
if (F->hasFnAttribute(Attr)) {
47434743
if (Attr == Attribute::OptimizeNone) {
4744-
if (!BM->isAllowedToUseExtension(ExtensionID::SPV_INTEL_optnone))
4744+
if (BM->isAllowedToUseExtension(ExtensionID::SPV_EXT_optnone)) {
4745+
BM->addExtension(ExtensionID::SPV_EXT_optnone);
4746+
BM->addCapability(CapabilityOptNoneEXT);
4747+
} else if (BM->isAllowedToUseExtension(
4748+
ExtensionID::SPV_INTEL_optnone)) {
4749+
BM->addExtension(ExtensionID::SPV_INTEL_optnone);
4750+
BM->addCapability(CapabilityOptNoneINTEL);
4751+
} else
47454752
return;
4746-
BM->addExtension(ExtensionID::SPV_INTEL_optnone);
4747-
BM->addCapability(internal::CapabilityOptNoneINTEL);
47484753
}
47494754
FCM |= Mask;
47504755
}

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
}

lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,7 @@ template <> inline void SPIRVMap<Capability, std::string>::init() {
600600
add(CapabilityAtomicFloat32AddEXT, "AtomicFloat32AddEXT");
601601
add(CapabilityAtomicFloat64AddEXT, "AtomicFloat64AddEXT");
602602
add(CapabilityLongCompositesINTEL, "LongCompositesINTEL");
603-
add(CapabilityOptNoneINTEL, "OptNoneINTEL");
603+
add(CapabilityOptNoneEXT, "OptNoneEXT");
604604
add(CapabilityAtomicFloat16AddEXT, "AtomicFloat16AddEXT");
605605
add(CapabilityDebugInfoModuleINTEL, "DebugInfoModuleINTEL");
606606
add(CapabilitySplitBarrierINTEL, "SplitBarrierINTEL");
@@ -620,7 +620,6 @@ template <> inline void SPIRVMap<Capability, std::string>::init() {
620620

621621
// From spirv_internal.hpp
622622
add(internal::CapabilityFPGADSPControlINTEL, "FPGADSPControlINTEL");
623-
add(internal::CapabilityOptNoneINTEL, "OptNoneINTEL");
624623
add(internal::CapabilityFPGAInvocationPipeliningAttributesINTEL,
625624
"FPGAInvocationPipeliningAttributesINTEL");
626625
add(internal::CapabilityTokenTypeINTEL, "TokenTypeINTEL");

lib/SPIRV/libSPIRV/spirv_internal.hpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ enum InternalCapability {
114114
ICapFPGADSPControlINTEL = 5908,
115115
ICapFPGAInvocationPipeliningAttributesINTEL = 5916,
116116
ICapRuntimeAlignedAttributeINTEL = 5939,
117-
ICapOptNoneINTEL = 6094,
118117
ICapTokenTypeINTEL = 6112,
119118
ICapBfloat16ConversionINTEL = 6115,
120119
ICapabilityJointMatrixINTEL = 6118,
@@ -143,8 +142,6 @@ enum InternalCapability {
143142
ICapabilityBindlessImagesINTEL = 6528
144143
};
145144

146-
enum InternalFunctionControlMask { IFunctionControlOptNoneINTELMask = 0x10000 };
147-
148145
enum InternalExecutionMode {
149146
IExecModeStreamingInterfaceINTEL = 6154,
150147
IExecModeMaximumRegistersINTEL = 6461,
@@ -329,8 +326,6 @@ constexpr Decoration DecorationCacheControlLoadINTEL =
329326
constexpr Decoration DecorationCacheControlStoreINTEL =
330327
static_cast<Decoration>(IDecCacheControlStoreINTEL);
331328

332-
constexpr Capability CapabilityOptNoneINTEL =
333-
static_cast<Capability>(ICapOptNoneINTEL);
334329
constexpr Capability CapabilityFPGADSPControlINTEL =
335330
static_cast<Capability>(ICapFPGADSPControlINTEL);
336331
constexpr Capability CapabilityFPGAInvocationPipeliningAttributesINTEL =
@@ -356,9 +351,6 @@ constexpr Capability CapabilityInt16AtomicsINTEL =
356351
constexpr Capability CapabilityAtomicBFloat16LoadStoreINTEL =
357352
static_cast<Capability>(ICapabilityAtomicBFloat16LoadStoreINTEL);
358353

359-
constexpr FunctionControlMask FunctionControlOptNoneINTELMask =
360-
static_cast<FunctionControlMask>(IFunctionControlOptNoneINTELMask);
361-
362354
constexpr Decoration DecorationMathOpDSPModeINTEL =
363355
static_cast<Decoration>(IDecMathOpDSPModeINTEL);
364356

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)