-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[MLIR][AMDGPU] Use Attr for resetOffset + boundsCheck in RawBufferCastOp #149939
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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]>
|
@llvm/pr-subscribers-mlir-gpu @llvm/pr-subscribers-backend-amdgpu Author: Stanley Winata (raikonenfnu) ChangesIn 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:
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>>
|
|
✅ With the latest revision this PR passed the Python code formatter. |
krzysz00
left a comment
There was a problem hiding this 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 ...
makslevental
left a comment
There was a problem hiding this 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)>, |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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 :)
|
@makslevental, the man of the hour! Would be nice to kick off a chat wrt enabling prop in pythonic binding! |
Signed-off-by: Stanley Winata <[email protected]>
…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]>
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.