Skip to content

Commit 14f9431

Browse files
committed
75 passes
1 parent a9914b1 commit 14f9431

4 files changed

Lines changed: 3453 additions & 2913 deletions

File tree

fix_spirv.sh

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
set -e
3+
LLVM_IR_FILE="$1"
4+
SPIRV_FILE="$2"
5+
STRIP_NAME=$(basename "$LLVM_IR_FILE" .ll)
6+
# Disassemble the LLVM IR
7+
llvm-dis-18 "$LLVM_IR_FILE" -o /tmp/temp$STRIP_NAME.ll
8+
9+
# Fix address spaces - ensure all global variables have explicit address space 0
10+
sed -i -E 's/@_([0-9]+) = internal global/@_\1 = internal addrspace(1) global/g' /tmp/temp$STRIP_NAME.ll
11+
sed -i 's/addrspace(5)/addrspace(0)/g' /tmp/temp$STRIP_NAME.ll
12+
sed -i 's/addrspace(4) byref/addrspace(1) byref/g' /tmp/temp$STRIP_NAME.ll
13+
14+
# 同时也需要修改加载这些参数的指令
15+
sed -i 's/load i64, ptr addrspace(4) %"\([0-9]\+\)", align/load i64, ptr addrspace(1) %"\1", align/g' /tmp/temp$STRIP_NAME.ll
16+
17+
# 更新元数据中的函数签名(如果有)
18+
sed -i 's/!0 = !{.*ptr addrspace(4)/!0 = !{ptr @vector_extract, !"vector_extract"}/g' /tmp/temp$STRIP_NAME.ll
19+
sed -i 's/amdgpu_kernel/spir_kernel/g' /tmp/temp$STRIP_NAME.ll
20+
# 为inttoptr到addrspace(1)的每个实例创建新的变量序列
21+
sed -i 's/%"\([0-9]\+\)" = inttoptr \(.*\) to ptr addrspace(1)/%"\1_tmp" = inttoptr \2 to ptr addrspace(4)\n %"\1" = addrspacecast ptr addrspace(4) %"\1_tmp" to ptr addrspace(1)/g' /tmp/temp$STRIP_NAME.ll
22+
# Reassemble and convert to SPIR-V
23+
llvm-as-18 /tmp/temp$STRIP_NAME.ll -o /tmp/temp$STRIP_NAME.bc
24+
llvm-spirv-18 /tmp/temp$STRIP_NAME.bc -o "$SPIRV_FILE"

0 commit comments

Comments
 (0)