Skip to content

Conversation

@raikonenfnu
Copy link
Member

In order to access and modify resetOffset and boundsCheck of RawBufferCastOp in pythonic binding, we will have to use Attrs instead of Property. This is because we do not have python binding support for property yet. We should move back to property once we add pythonic binding support for it.

In order to access and modify resetOffset and boundsCheck of
RawBufferCastOp in pythonic binding, we will have to use Attrs instead
of Property. This is because we do not have python binding support for
property yet. We should move back to property once we add pythonic
binding support for it.

Signed-off-by: Stanley Winata <[email protected]>
@llvmbot
Copy link
Member

llvmbot commented Jul 21, 2025

@llvm/pr-subscribers-mlir-gpu
@llvm/pr-subscribers-mlir

@llvm/pr-subscribers-backend-amdgpu

Author: Stanley Winata (raikonenfnu)

Changes

In order to access and modify resetOffset and boundsCheck of RawBufferCastOp in pythonic binding, we will have to use Attrs instead of Property. This is because we do not have python binding support for property yet. We should move back to property once we add pythonic binding support for it.


Full diff: https://github.com/llvm/llvm-project/pull/149939.diff

2 Files Affected:

  • (modified) mlir/include/mlir/Dialect/AMDGPU/IR/AMDGPU.td (+2-2)
  • (modified) mlir/test/python/dialects/amdgpu.py (+26-1)
diff --git a/mlir/include/mlir/Dialect/AMDGPU/IR/AMDGPU.td b/mlir/include/mlir/Dialect/AMDGPU/IR/AMDGPU.td
index 80959ffbaf426..e2ca1ba9ae5e6 100644
--- a/mlir/include/mlir/Dialect/AMDGPU/IR/AMDGPU.td
+++ b/mlir/include/mlir/Dialect/AMDGPU/IR/AMDGPU.td
@@ -237,8 +237,8 @@ def AMDGPU_FatRawBufferCastOp :
     Arguments<(ins AnyMemRef:$source,
       Optional<I32>:$validBytes,
       Optional<I<14>>:$cacheSwizzleStride,
-      DefaultValuedProp<BoolProp, "true">:$boundsCheck,
-      UnitProp:$resetOffset)>,
+      DefaultValuedAttr<BoolAttr, "true">:$boundsCheck,
+      UnitAttr:$resetOffset)>,
     Results<(outs AnyMemRef:$result)> {
   let summary = "Create a raw buffer fat pointer that matches `memref`";
   let description = [{
diff --git a/mlir/test/python/dialects/amdgpu.py b/mlir/test/python/dialects/amdgpu.py
index c8039d494cf81..090888a94d667 100644
--- a/mlir/test/python/dialects/amdgpu.py
+++ b/mlir/test/python/dialects/amdgpu.py
@@ -2,7 +2,7 @@
 # This is just a smoke test that the dialect is functional.
 
 from mlir.ir import *
-from mlir.dialects import amdgpu, arith, memref
+from mlir.dialects import amdgpu, func
 
 
 def constructAndPrintInModule(f):
@@ -20,3 +20,28 @@ def constructAndPrintInModule(f):
 def testSmoke():
     # CHECK: amdgpu.lds_barrier
     amdgpu.LDSBarrierOp()
+
+
+# CHECK-LABEL: testFatRawBufferCastOpParams
+@constructAndPrintInModule
+def testFatRawBufferCastOpParams():
+    memref_type = MemRefType.get(
+        [ShapedType.get_dynamic_size(), ShapedType.get_dynamic_size()],
+        F32Type.get(),
+    )
+    f = func.FuncOp(
+        "test_raw_buffer_cast_params", ([memref_type], [])
+    )
+    with InsertionPoint(f.add_entry_block()):
+        block_args = f.arguments
+        amdgpu.FatRawBufferCastOp(block_args[0])
+        amdgpu.FatRawBufferCastOp(block_args[0], resetOffset=True)
+        amdgpu.FatRawBufferCastOp(block_args[0], boundsCheck=False)
+        amdgpu.FatRawBufferCastOp(block_args[0], boundsCheck=False, resetOffset=True)
+        func.ReturnOp([])
+
+    #CHECK:     func.func @test_raw_buffer_cast_params(%[[ARG0:.+]]: memref<?x?xf32>) {
+    #CHECK:        amdgpu.fat_raw_buffer_cast %[[ARG0]] : memref<?x?xf32> to memref<?x?xf32, #amdgpu.address_space<fat_raw_buffer>>
+    #CHECK-NEXT:   amdgpu.fat_raw_buffer_cast %[[ARG0]] resetOffset : memref<?x?xf32> to memref<?x?xf32, #amdgpu.address_space<fat_raw_buffer>>
+    #CHECK-NEXT:   amdgpu.fat_raw_buffer_cast %[[ARG0]] boundsCheck(false) : memref<?x?xf32> to memref<?x?xf32, #amdgpu.address_space<fat_raw_buffer>>
+    #CHECK-NEXT:   amdgpu.fat_raw_buffer_cast %[[ARG0]] boundsCheck(false) resetOffset : memref<?x?xf32> to memref<?x?xf32, #amdgpu.address_space<fat_raw_buffer>>

@github-actions
Copy link

github-actions bot commented Jul 21, 2025

✅ With the latest revision this PR passed the Python code formatter.

Copy link
Contributor

@krzysz00 krzysz00 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, if we must ...

Copy link
Contributor

@makslevental makslevental left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

DefaultValuedProp<BoolProp, "true">:$boundsCheck,
UnitProp:$resetOffset)>,
DefaultValuedAttr<BoolAttr, "true">:$boundsCheck,
UnitAttr:$resetOffset)>,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pls, add a TODO somewhere nearby

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a TODO, but not sure this is best spot, let me know if you can think of a better spot :)

@raikonenfnu
Copy link
Member Author

@makslevental, the man of the hour! Would be nice to kick off a chat wrt enabling prop in pythonic binding!
CC: @krzysz00 @Hardcode84

Signed-off-by: Stanley Winata <[email protected]>
@raikonenfnu raikonenfnu merged commit 6fa759b into llvm:main Jul 21, 2025
9 checks passed
mahesh-attarde pushed a commit to mahesh-attarde/llvm-project that referenced this pull request Jul 28, 2025
…tOp (llvm#149939)

In order to access and modify resetOffset and boundsCheck of
RawBufferCastOp in pythonic binding, we will have to use Attrs instead
of Property. This is because we do not have python binding support for
property yet. We should move back to property once we add pythonic
binding support for it.

---------

Signed-off-by: Stanley Winata <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants