Skip to content

Commit d51853c

Browse files
committed
Check that atomic barrier is in LDS if it is present.
1 parent a8fbe1a commit d51853c

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

mlir/lib/Dialect/AMDGPU/IR/AMDGPUDialect.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,16 @@ LogicalResult MakeDmaDescriptorOp::verify() {
730730
return emitOpError("tensor must have same rank as tile.");
731731
}
732732

733+
if (Value atomicBarrierAddress = getAtomicBarrierAddress()) {
734+
MemRefType atomicBarrierAddressType =
735+
cast<MemRefType>(atomicBarrierAddress.getType());
736+
bool barrierInLDS =
737+
hasWorkgroupMemorySpace(atomicBarrierAddressType.getMemorySpace());
738+
if (!barrierInLDS) {
739+
return emitOpError("atomic barrier address must be in LDS.");
740+
}
741+
}
742+
733743
return success();
734744
}
735745

mlir/test/Dialect/AMDGPU/invalid.mlir

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,13 @@ func.func @scaled_mfma_invalid_k(%arg0 : vector<4xf8E8M0FNU>, %arg1 : vector<32x
357357

358358
// -----
359359

360+
func.func @make_dma_base_invalid_barrier(%base: !amdgpu.tdm_base<i32>, %barrier: memref<8xi32>, %idx: index) {
361+
// expected-error@+1 {{'amdgpu.make_dma_descriptor' op atomic barrier address must be in LDS.}}
362+
amdgpu.make_dma_descriptor %base globalSize [0] globalStride [1] sharedSize [0] atomicBarrier(%barrier[%idx] : memref<8xi32>) : !amdgpu.tdm_base<i32> -> !amdgpu.tdm_descriptor
363+
}
364+
365+
// -----
366+
360367
// CHECK-LABEL: func @make_dma_descriptor_invalid_empty_strides
361368
// CHECK-SAME: (%[[BASE:.+]]: !amdgpu.tdm_base<i32>)
362369
func.func @make_dma_descriptor_invalid_empty_strides(%base: !amdgpu.tdm_base<i32>) {

mlir/test/Dialect/AMDGPU/ops.mlir

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -698,8 +698,8 @@ func.func @make_dma_base(%idx: index, %mem: memref<8xi32>, %smem: memref<8xi32,
698698
}
699699

700700
// CHECK-LABEL: func @make_dma_descriptor
701-
// CHECK-SAME: (%[[BASE:.+]]: !amdgpu.tdm_base<i32>, %[[BARRIER:.+]]: memref<8xi32>, %[[IDX:.+]]: index)
702-
func.func @make_dma_descriptor(%base: !amdgpu.tdm_base<i32>, %barrier: memref<8xi32>, %idx: index) {
701+
// CHECK-SAME: (%[[BASE:.+]]: !amdgpu.tdm_base<i32>, %[[BARRIER:.+]]: memref<8xi32, #gpu.address_space<workgroup>>, %[[IDX:.+]]: index)
702+
func.func @make_dma_descriptor(%base: !amdgpu.tdm_base<i32>, %barrier: memref<8xi32, #gpu.address_space<workgroup>>, %idx: index) {
703703

704704
// CHECK: amdgpu.make_dma_descriptor %[[BASE]]
705705
amdgpu.make_dma_descriptor %base
@@ -730,8 +730,8 @@ func.func @make_dma_descriptor(%base: !amdgpu.tdm_base<i32>, %barrier: memref<8x
730730
globalStride [1]
731731
// CHECK-SAME: sharedSize [0]
732732
sharedSize [0]
733-
// CHECK-SAME: atomicBarrier(%[[BARRIER]][%[[IDX]]] : memref<8xi32>)
734-
atomicBarrier(%barrier[%idx] : memref<8xi32>)
733+
// CHECK-SAME: atomicBarrier(%[[BARRIER]][%[[IDX]]] : memref<8xi32, #gpu.address_space<workgroup>>)
734+
atomicBarrier(%barrier[%idx] : memref<8xi32, #gpu.address_space<workgroup>>)
735735
: !amdgpu.tdm_base<i32> -> !amdgpu.tdm_descriptor
736736

737737
// CHECK: amdgpu.make_dma_descriptor %[[BASE]]

0 commit comments

Comments
 (0)