[llvm] [SPIR-V] Add OpUntypedVariableLengthArrayINTEL support for SPV_INTEL_variable_length_array (PR #224756)
Qi Ye via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 1 10:48:23 PDT 2026
https://github.com/Qi-Ye-079 updated https://github.com/llvm/llvm-project/pull/224756
>From dd0fcc07c59b08f7f7e7ca37cf4ae9646777646e Mon Sep 17 00:00:00 2001
From: "Ye, Qi" <qi.ye at intel.com>
Date: Fri, 18 Sep 2026 14:49:44 -0700
Subject: [PATCH 1/2] Add support for OpUntypedVariableLengthArrayINTEL
---
llvm/lib/Target/SPIRV/SPIRVInstrInfo.td | 2 ++
.../Target/SPIRV/SPIRVInstructionSelector.cpp | 29 +++++++++++++---
llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp | 6 ++++
.../lib/Target/SPIRV/SPIRVSymbolicOperands.td | 1 +
.../SPV_INTEL_variable_length_array/vararr.ll | 32 +++++++++++------
.../vararr_spec_const.ll | 34 ++++++++++++-------
6 files changed, 75 insertions(+), 29 deletions(-)
diff --git a/llvm/lib/Target/SPIRV/SPIRVInstrInfo.td b/llvm/lib/Target/SPIRV/SPIRVInstrInfo.td
index cd4faf80c2d97..247258882d9b3 100644
--- a/llvm/lib/Target/SPIRV/SPIRVInstrInfo.td
+++ b/llvm/lib/Target/SPIRV/SPIRVInstrInfo.td
@@ -324,6 +324,8 @@ def OpUntypedGroupAsyncCopyKHR: Op<4434, (outs ID:$res),
def OpVariableLengthArrayINTEL: Op<5818, (outs ID:$res), (ins TYPE:$type, ID:$length),
"$res = OpVariableLengthArrayINTEL $type $length">;
+def OpUntypedVariableLengthArrayINTEL: Op<6244, (outs ID:$res), (ins TYPE:$type, TYPE:$elementType, ID:$length),
+ "$res = OpUntypedVariableLengthArrayINTEL $type $elementType $length">;
def OpSaveMemoryINTEL: Op<5819, (outs ID:$res), (ins TYPE:$type),
"$res = OpSaveMemoryINTEL $type">;
def OpRestoreMemoryINTEL: Op<5820, (outs), (ins ID:$ptr),
diff --git a/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp b/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
index 1d821c5aec993..f0dae45120951 100644
--- a/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp
@@ -7043,11 +7043,30 @@ bool SPIRVInstructionSelector::selectAllocaArray(Register ResVReg,
// there was an allocation size parameter to the allocation instruction
// that is not 1
MachineBasicBlock &BB = *I.getParent();
- BuildMI(BB, I, I.getDebugLoc(), TII.get(SPIRV::OpVariableLengthArrayINTEL))
- .addDef(ResVReg)
- .addUse(GR.getSPIRVTypeID(ResType))
- .addUse(I.getOperand(2).getReg())
- .constrainAllUses(TII, TRI, RBI);
+
+ bool UseUntypedPointers =
+ ResType->getOpcode() == SPIRV::OpTypeUntypedPointerKHR;
+ unsigned Opcode = UseUntypedPointers
+ ? SPIRV::OpUntypedVariableLengthArrayINTEL
+ : SPIRV::OpVariableLengthArrayINTEL;
+
+ auto MIB = BuildMI(BB, I, I.getDebugLoc(), TII.get(Opcode))
+ .addDef(ResVReg)
+ .addUse(GR.getSPIRVTypeID(ResType));
+
+ // OpUntypedVariableLengthArrayINTEL takes an explicit Element Type <id>
+ // right after the result type
+ if (UseUntypedPointers) {
+ SPIRVTypeInst ElementType = GR.getUntypedPtrElementType(ResVReg);
+ assert(ElementType &&
+ "untyped variable length array result must have a recorded element "
+ "type");
+ MIB.addUse(GR.getSPIRVTypeID(ElementType));
+ }
+
+ MIB.addUse(I.getOperand(2).getReg());
+ MIB.constrainAllUses(TII, TRI, RBI);
+
if (!STI.isShader()) {
unsigned Alignment = I.getOperand(3).getImm();
buildOpDecorate(ResVReg, I, TII, SPIRV::Decoration::Alignment, {Alignment});
diff --git a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
index 39918b6610fce..f7cb43eff74ff 100644
--- a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
@@ -2133,6 +2133,12 @@ void addInstrRequirements(const MachineInstr &MI,
Reqs.addCapability(SPIRV::Capability::VariableLengthArrayINTEL);
}
break;
+ case SPIRV::OpUntypedVariableLengthArrayINTEL:
+ if (ST.canUseExtension(SPIRV::Extension::SPV_INTEL_variable_length_array)) {
+ Reqs.addExtension(SPIRV::Extension::SPV_INTEL_variable_length_array);
+ Reqs.addCapability(SPIRV::Capability::UntypedVariableLengthArrayINTEL);
+ }
+ break;
case SPIRV::OpAsmTargetINTEL:
case SPIRV::OpAsmINTEL:
case SPIRV::OpAsmCallINTEL:
diff --git a/llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td b/llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td
index 561d0fdef4026..751428fd046d4 100644
--- a/llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td
+++ b/llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td
@@ -645,6 +645,7 @@ defm ArbitraryPrecisionFloatingPointALTERA : CapabilityOperand<5845, 0, 0,[SPV_A
defm UnstructuredLoopControlsINTEL : CapabilityOperand<5886, 0, 0, [SPV_INTEL_unstructured_loop_controls], []>;
defm PoisonFreezeKHR : CapabilityOperand<5156, 0, 0, [SPV_KHR_poison_freeze], []>;
defm UntypedPointersKHR : CapabilityOperand<4473, 0, 0, [SPV_KHR_untyped_pointers], []>;
+defm UntypedVariableLengthArrayINTEL : CapabilityOperand<6243, 0, 0, [SPV_INTEL_variable_length_array], [VariableLengthArrayINTEL, UntypedPointersKHR]>;
defm LongVectorEXT : CapabilityOperand<5425, 0, 0, [SPV_EXT_long_vector], []>;
//===----------------------------------------------------------------------===//
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr.ll
index 8171446ee940c..453c91e1ae292 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr.ll
@@ -1,27 +1,37 @@
; Modified from: https://github.com/KhronosGroup/SPIRV-LLVM-Translator/test/extensions/INTEL/SPV_INTEL_variable_length_array/basic.ll
; RUN: not llc -O0 -mtriple=spirv32-unknown-unknown %s -o %t.spvt 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
-; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array %s -o - | FileCheck %s --check-prefixes=CHECK-COMMON,CHECK-SPIRV
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array %s -o - -filetype=obj | spirv-val %}
+; TODO: currently spirv-val mistakenly rejects Element Type as operand of OpUntypedVariableLengthArrayINTEL. Re-enable spirv-val once it's fixed.
+; RUNx: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array,+SPV_KHR_untyped_pointers %s -o - -filetype=obj | spirv-val %}
+; RUN: not llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o %t.spvt 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array,+SPV_KHR_untyped_pointers %s -o - | FileCheck %s --check-prefixes=CHECK-COMMON,CHECK-SPIRV-UNTYPED
+
; CHECK-ERROR: LLVM ERROR: array allocation: this instruction requires the following SPIR-V extension: SPV_INTEL_variable_length_array
-; CHECK-SPIRV: Capability VariableLengthArrayINTEL
-; CHECK-SPIRV: Extension "SPV_INTEL_variable_length_array"
+; CHECK-COMMON: Capability VariableLengthArrayINTEL
+; CHECK-SPIRV-UNTYPED: Capability UntypedVariableLengthArrayINTEL
+; CHECK-COMMON-DAG: Extension "SPV_INTEL_variable_length_array"
+; CHECK-SPIRV-UNTYPED-DAG: Extension "SPV_KHR_untyped_pointers"
-; CHECK-SPIRV-DAG: OpName %[[Len:.*]] "a"
-; CHECK-SPIRV-DAG: %[[Long:.*]] = OpTypeInt 64 0
-; CHECK-SPIRV-DAG: %[[Int:.*]] = OpTypeInt 32 0
+; CHECK-COMMON-DAG: OpName %[[Len:.*]] "a"
+; CHECK-COMMON-DAG: %[[Long:.*]] = OpTypeInt 64 0
+; CHECK-COMMON-DAG: %[[Int:.*]] = OpTypeInt 32 0
; CHECK-SPIRV-DAG: %[[Char:.*]] = OpTypeInt 8 0
; CHECK-SPIRV-DAG: %[[CharPtr:.*]] = OpTypePointer {{[a-zA-Z]+}} %[[Char]]
; CHECK-SPIRV-DAG: %[[IntPtr:.*]] = OpTypePointer {{[a-zA-Z]+}} %[[Int]]
-; CHECK-SPIRV: %[[Len]] = OpFunctionParameter %[[Long:.*]]
-; CHECK-SPIRV: %[[SavedMem1:.*]] = OpSaveMemoryINTEL %[[CharPtr]]
+; CHECK-SPIRV-UNTYPED-DAG: %[[CharPtr:.*]] = OpTypeUntypedPointerKHR Function
+; CHECK-COMMON: %[[Len]] = OpFunctionParameter %[[Long]]
+; CHECK-COMMON: %[[SavedMem1:.*]] = OpSaveMemoryINTEL %[[CharPtr]]
; CHECK-SPIRV: OpVariableLengthArrayINTEL %[[IntPtr]] %[[Len]]
-; CHECK-SPIRV: OpRestoreMemoryINTEL %[[SavedMem1]]
-; CHECK-SPIRV: %[[SavedMem2:.*]] = OpSaveMemoryINTEL %[[CharPtr]]
+; CHECK-SPIRV-UNTYPED: OpUntypedVariableLengthArrayINTEL %[[CharPtr]] %[[Int]] %[[Len]]
+; CHECK-COMMON: OpRestoreMemoryINTEL %[[SavedMem1]]
+; CHECK-COMMON: %[[SavedMem2:.*]] = OpSaveMemoryINTEL %[[CharPtr]]
; CHECK-SPIRV: OpVariableLengthArrayINTEL %[[IntPtr]] %[[Len]]
-; CHECK-SPIRV: OpRestoreMemoryINTEL %[[SavedMem2]]
+; CHECK-SPIRV-UNTYPED: OpUntypedVariableLengthArrayINTEL %[[CharPtr]] %[[Int]] %[[Len]]
+; CHECK-COMMON: OpRestoreMemoryINTEL %[[SavedMem2]]
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"
target triple = "spir"
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr_spec_const.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr_spec_const.ll
index 824c5c53f8727..c89794fcb84f7 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr_spec_const.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr_spec_const.ll
@@ -1,23 +1,31 @@
; Modified from: https://github.com/KhronosGroup/SPIRV-LLVM-Translator/test/extensions/INTEL/SPV_INTEL_variable_length_array/vla_spec_const.ll
-; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array %s -o - | FileCheck %s --check-prefixes=CHECK-COMMON,CHECK-SPIRV
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array %s -o - -filetype=obj | spirv-val %}
-; CHECK-SPIRV: Capability VariableLengthArrayINTEL
-; CHECK-SPIRV: Extension "SPV_INTEL_variable_length_array"
-; CHECK-SPIRV: OpDecorate %[[SpecConst:.*]] SpecId 0
-; CHECK-SPIRV-DAG: %[[Long:.*]] = OpTypeInt 64 0
-; CHECK-SPIRV-DAG: %[[Int:.*]] = OpTypeInt 32 0
+; TODO: currently spirv-val mistakenly rejects Element Type as operand of OpUntypedVariableLengthArrayINTEL. Re-enable spirv-val once it's fixed.
+; RUNx: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array,+SPV_KHR_untyped_pointers %s -o - -filetype=obj | spirv-val %}
+; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array,+SPV_KHR_untyped_pointers %s -o - | FileCheck %s --check-prefixes=CHECK-COMMON,CHECK-SPIRV-UNTYPED
+
+; CHECK-COMMON: Capability VariableLengthArrayINTEL
+; CHECK-SPIRV-UNTYPED: Capability UntypedVariableLengthArrayINTEL
+; CHECK-COMMON-DAG: Extension "SPV_INTEL_variable_length_array"
+; CHECK-SPIRV-UNTYPED-DAG: Extension "SPV_KHR_untyped_pointers"
+; CHECK-COMMON: OpDecorate %[[SpecConst:.*]] SpecId 0
+; CHECK-COMMON-DAG: %[[Long:.*]] = OpTypeInt 64 0
+; CHECK-COMMON-DAG: %[[Int:.*]] = OpTypeInt 32 0
; CHECK-SPIRV-DAG: %[[IntPtr:.*]] = OpTypePointer {{[a-zA-Z]+}} %[[Int]]
-; CHECK-SPIRV: %[[SpecConst]] = OpSpecConstant %[[Long]]
-; CHECK-SPIRV-LABEL: FunctionEnd
-; CHECK-SPIRV: %[[SpecConstVal:.*]] = OpFunctionCall %[[Long]]
-; CHECK-SPIRV: OpSaveMemoryINTEL
+; CHECK-SPIRV-UNTYPED-DAG: %[[UPtr:.*]] = OpTypeUntypedPointerKHR Function
+; CHECK-COMMON: %[[SpecConst]] = OpSpecConstant %[[Long]]
+; CHECK-COMMON-LABEL: FunctionEnd
+; CHECK-COMMON: %[[SpecConstVal:.*]] = OpFunctionCall %[[Long]]
+; CHECK-COMMON: OpSaveMemoryINTEL
; CHECK-SPIRV: OpVariableLengthArrayINTEL %[[IntPtr]] %[[SpecConstVal]]
-; CHECK-SPIRV: OpRestoreMemoryINTEL
+; CHECK-SPIRV-UNTYPED: OpUntypedVariableLengthArrayINTEL %[[UPtr]] %[[Int]] %[[SpecConstVal]]
+; CHECK-COMMON: OpRestoreMemoryINTEL
-; CHECK-SPIRV: OpFunction %[[Long]]
-; CHECK-SPIRV: ReturnValue %[[SpecConst]]
+; CHECK-COMMON: OpFunction %[[Long]]
+; CHECK-COMMON: ReturnValue %[[SpecConst]]
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
target triple = "spir64-unknown-linux"
>From 179d56f7ce45d6c0939ca2e49cecc13afb32d369 Mon Sep 17 00:00:00 2001
From: "Ye, Qi" <qi.ye at intel.com>
Date: Thu, 1 Oct 2026 10:48:03 -0700
Subject: [PATCH 2/2] Add spirv-val issue tracker and new testcase for struct
type
---
.../SPV_INTEL_variable_length_array/vararr.ll | 26 +++++++++++++++++++
.../vararr_spec_const.ll | 1 +
2 files changed, 27 insertions(+)
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr.ll
index 453c91e1ae292..8e84e8e0fd279 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr.ll
@@ -5,6 +5,7 @@
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array %s -o - -filetype=obj | spirv-val %}
; TODO: currently spirv-val mistakenly rejects Element Type as operand of OpUntypedVariableLengthArrayINTEL. Re-enable spirv-val once it's fixed.
+; Issue: https://github.com/KhronosGroup/SPIRV-Tools/issues/6921
; RUNx: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array,+SPV_KHR_untyped_pointers %s -o - -filetype=obj | spirv-val %}
; RUN: not llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_KHR_untyped_pointers %s -o %t.spvt 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array,+SPV_KHR_untyped_pointers %s -o - | FileCheck %s --check-prefixes=CHECK-COMMON,CHECK-SPIRV-UNTYPED
@@ -16,12 +17,19 @@
; CHECK-COMMON-DAG: Extension "SPV_INTEL_variable_length_array"
; CHECK-SPIRV-UNTYPED-DAG: Extension "SPV_KHR_untyped_pointers"
+; CHECK-COMMON-DAG: OpName %[[LenN:.*]] "n"
+; CHECK-COMMON-DAG: OpName %[[SVLA:.*]] "svla"
+; CHECK-COMMON-DAG: OpDecorate %[[SVLA]] Alignment 8
+
; CHECK-COMMON-DAG: OpName %[[Len:.*]] "a"
; CHECK-COMMON-DAG: %[[Long:.*]] = OpTypeInt 64 0
; CHECK-COMMON-DAG: %[[Int:.*]] = OpTypeInt 32 0
; CHECK-SPIRV-DAG: %[[Char:.*]] = OpTypeInt 8 0
; CHECK-SPIRV-DAG: %[[CharPtr:.*]] = OpTypePointer {{[a-zA-Z]+}} %[[Char]]
; CHECK-SPIRV-DAG: %[[IntPtr:.*]] = OpTypePointer {{[a-zA-Z]+}} %[[Int]]
+; CHECK-COMMON-DAG: %[[Float:.*]] = OpTypeFloat 32
+; CHECK-COMMON-DAG: %[[Struct:.*]] = OpTypeStruct %[[Int]] %[[Float]]
+; CHECK-SPIRV-DAG: %[[StructPtr:.*]] = OpTypePointer {{[a-zA-Z]+}} %[[Struct]]
; CHECK-SPIRV-UNTYPED-DAG: %[[CharPtr:.*]] = OpTypeUntypedPointerKHR Function
; CHECK-COMMON: %[[Len]] = OpFunctionParameter %[[Long]]
; CHECK-COMMON: %[[SavedMem1:.*]] = OpSaveMemoryINTEL %[[CharPtr]]
@@ -36,6 +44,8 @@
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"
target triple = "spir"
+%struct.S = type { i32, float }
+
define dso_local spir_func i32 @foo(i64 %a, i64 %b) {
entry:
%vector1 = alloca [42 x i32], align 16
@@ -58,6 +68,22 @@ entry:
ret i32 %add5
}
+; Test an aggregate element type instead of a scalar
+; CHECK-COMMON: %[[LenN]] = OpFunctionParameter %[[Long]]
+; CHECK-COMMON: %[[SavedMem3:.*]] = OpSaveMemoryINTEL %[[CharPtr]]
+; CHECK-SPIRV: %[[SVLA]] = OpVariableLengthArrayINTEL %[[StructPtr]] %[[LenN]]
+; CHECK-SPIRV-UNTYPED: %[[SVLA]] = OpUntypedVariableLengthArrayINTEL %[[CharPtr]] %[[Struct]] %[[LenN]]
+; CHECK-COMMON: OpRestoreMemoryINTEL %[[SavedMem3]]
+define dso_local spir_func i32 @bar(i64 %n, i64 %i) {
+entry:
+ %stack = call ptr @llvm.stacksave.p0()
+ %svla = alloca %struct.S, i64 %n, align 8
+ %arrayidx = getelementptr inbounds %struct.S, ptr %svla, i64 %i, i32 0
+ %elem = load i32, ptr %arrayidx, align 4
+ call void @llvm.stackrestore.p0(ptr %stack)
+ ret i32 %elem
+}
+
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
declare ptr @llvm.stacksave.p0()
declare void @llvm.stackrestore.p0(ptr)
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr_spec_const.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr_spec_const.ll
index c89794fcb84f7..2fadc5628fb9d 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr_spec_const.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_variable_length_array/vararr_spec_const.ll
@@ -4,6 +4,7 @@
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array %s -o - -filetype=obj | spirv-val %}
; TODO: currently spirv-val mistakenly rejects Element Type as operand of OpUntypedVariableLengthArrayINTEL. Re-enable spirv-val once it's fixed.
+; Issue: https://github.com/KhronosGroup/SPIRV-Tools/issues/6921
; RUNx: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array,+SPV_KHR_untyped_pointers %s -o - -filetype=obj | spirv-val %}
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown --spirv-ext=+SPV_INTEL_variable_length_array,+SPV_KHR_untyped_pointers %s -o - | FileCheck %s --check-prefixes=CHECK-COMMON,CHECK-SPIRV-UNTYPED
More information about the llvm-commits
mailing list