[clang] [llvm] [SPIRV] Add support for the `SPV_EXT_long_vector` extension (PR #210279)

Marcos Maronas via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 29 06:02:56 PDT 2026


================
@@ -0,0 +1,129 @@
+; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_EXT_long_vector %s -o - | FileCheck %s
+; spirv-val seems to have problems reading OpTypeVectorIdEXT correctly, enable once fixed
+; TODO: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_EXT_long_vector %s -o - -filetype=obj | spirv-val %}
+
+; CHECK-DAG: OpName %[[#main:]] "main"
+; CHECK-DAG: %[[#float:]] = OpTypeFloat 32
+; CHECK-DAG: %[[#v17f32:]] = OpTypeVectorIdEXT %[[#float]] 17
+; CHECK-DAG: %[[#int:]] = OpTypeInt 32 0
+; CHECK-DAG: %[[#c17:]] = OpConstant %[[#int]] 17
+; CHECK-DAG: %[[#v17i32:]] = OpTypeVectorIdEXT %[[#int]] 17
+; CHECK-DAG: %[[#ptr_v17i32:]] = OpTypePointer CrossWorkgroup %[[#v17i32]]
+
+ at f1 = internal addrspace(1) global [4 x [17 x float] ] zeroinitializer
+ at f2 = internal addrspace(1) global [4 x [17 x float] ] zeroinitializer
+ at i1 = internal addrspace(1) global [4 x [17 x i32] ] zeroinitializer
+ at i2 = internal addrspace(1) global [4 x [17 x i32] ] zeroinitializer
+
+define void @main() local_unnamed_addr {
+; CHECK: %[[#main]] = OpFunction
+entry:
+  %2 = getelementptr [4 x [17 x float] ], ptr addrspace(1) @f1, i32 0, i32 0
+  %3 = load <17 x float>, ptr addrspace(1) %2, align 4
+  %4 = getelementptr [4 x [17 x float] ], ptr addrspace(1) @f1, i32 0, i32 1
+  %5 = load <17 x float>, ptr addrspace(1) %4, align 4
+  %6 = getelementptr [4 x [17 x float] ], ptr addrspace(1) @f1, i32 0, i32 2
+  %7 = load <17 x float>, ptr addrspace(1) %6, align 4
+  %8 = getelementptr [4 x [17 x float] ], ptr addrspace(1) @f1, i32 0, i32 3
+  %9 = load <17 x float>, ptr addrspace(1) %8, align 4
+
+  ; CHECK: %[[#Mul:]] = OpFMul %[[#v17f32]]
+  %10 = fmul reassoc nnan ninf nsz arcp afn <17 x float> %3, splat (float 3.000000e+00)
+
+  ; CHECK: %[[#Add:]] = OpFAdd %[[#v17f32]] %[[#Mul]]
+  %11 = fadd reassoc nnan ninf nsz arcp afn <17 x float> %10, %5
+
+  ; CHECK: %[[#Sub:]] = OpFSub %[[#v17f32]] %[[#Add]]
+  %13 = fsub reassoc nnan ninf nsz arcp afn <17 x float> %11, %9
+
+  ; CHECK: OpStore %[[#]] %[[#Sub]]
+
+  %14 = getelementptr [4 x [17 x float] ], ptr addrspace(1) @f2, i32 0, i32 0
+  store <17 x float> %13, ptr addrspace(1) %14, align 4
+  ret void
+}
+
+; Test integer vector arithmetic operations
----------------
maarquitos14 wrote:

```suggestion
; Test integer vector arithmetic operations.
```

https://github.com/llvm/llvm-project/pull/210279


More information about the cfe-commits mailing list