From ff88304c44a09400224434764a9827df6eb58a8c Mon Sep 17 00:00:00 2001 From: Andrew Savonichev Date: Thu, 4 Jun 2026 14:41:36 +0900 Subject: [PATCH] [mlir][dxsa] Fix attribute type of dxsa.index.rel.imm dxsa.index.rel.imm corresponds to D3D10_SB_OPERAND_INDEX_IMMEDIATE32_PLUS_RELATIVE, so it should have a 32-bit integer attribute for an immediate. There is also D3D10_SB_OPERAND_INDEX_IMMEDIATE64_PLUS_RELATIVE defined in the header, but the original compiler does not support it, so we omit it as well. --- mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td | 2 +- mlir/test/Target/DXSA/inputs/mov_index_rel_imm.bin | Bin 0 -> 32 bytes mlir/test/Target/DXSA/mov_index_rel_imm.mlir | 13 +++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 mlir/test/Target/DXSA/inputs/mov_index_rel_imm.bin create mode 100644 mlir/test/Target/DXSA/mov_index_rel_imm.mlir diff --git a/mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td b/mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td index 33055b8991dc..a1685f271700 100644 --- a/mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td +++ b/mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td @@ -396,7 +396,7 @@ def DXSA_IndexRelImm : DXSA_Op<"index.rel.imm"> { TODO }]; - let arguments = (ins DXSA_OperandType:$operand, StrAttr:$op, I64Attr:$imm); + let arguments = (ins DXSA_OperandType:$operand, StrAttr:$op, I32Attr:$imm); let results = (outs DXSA_IndexType:$index); let assemblyFormat = "$operand attr-dict"; } diff --git a/mlir/test/Target/DXSA/inputs/mov_index_rel_imm.bin b/mlir/test/Target/DXSA/inputs/mov_index_rel_imm.bin new file mode 100644 index 0000000000000000000000000000000000000000..4ae0ee3cdbb2380a463f89e5f3bc2a66fdfc22f4 GIT binary patch literal 32 dcmXqGVBq+qAiw|uZgLM8oPabJ1B4F}0{}zn0|5X4 literal 0 HcmV?d00001 diff --git a/mlir/test/Target/DXSA/mov_index_rel_imm.mlir b/mlir/test/Target/DXSA/mov_index_rel_imm.mlir new file mode 100644 index 000000000000..108bd8decdbf --- /dev/null +++ b/mlir/test/Target/DXSA/mov_index_rel_imm.mlir @@ -0,0 +1,13 @@ +// RUN: mlir-translate --import-dxsa-bin %S/inputs/mov_index_rel_imm.bin | FileCheck %s +// mov o0.xyzw, v[r0.x + 66][0].xyzw + +// CHECK: module { +// CHECK-NEXT: %0 = dxsa.index.imm {imm = 0 : i32} +// CHECK-NEXT: %1 = dxsa.operand %0 {mask = 240 : i32, num_components = 4 : i32, type = 2 : i32} +// CHECK-NEXT: %2 = dxsa.index.imm {imm = 0 : i32} +// CHECK-NEXT: %3 = dxsa.operand %2 {num_components = 4 : i32, one = 0 : i32, type = 0 : i32} +// CHECK-NEXT: %4 = dxsa.index.rel.imm %3 {imm = 66 : i32, op = "add"} +// CHECK-NEXT: %5 = dxsa.index.imm {imm = 0 : i32} +// CHECK-NEXT: %6 = dxsa.operand %4, %5 {num_components = 4 : i32, swizzle = dense<[0, 1, 2, 3]> : vector<4xi32>, type = 1 : i32} +// CHECK-NEXT: dxsa.instruction "mov" %1, %6 +// CHECK-NEXT: }