[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