diff --git a/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp b/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp index 7112d1607dfdc..8daf0faebe1aa 100644 --- a/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp +++ b/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp @@ -290,15 +290,23 @@ struct LDSBarrierOpLowering : public ConvertOpToLLVMPattern { if (requiresInlineAsm) { auto asmDialectAttr = LLVM::AsmDialectAttr::get(rewriter.getContext(), LLVM::AsmDialect::AD_ATT); + Location loc = op->getLoc(); + // Ensure the inlineAsm is guarded with a scheduling region + // So it will not interfere with backend compilation more than + // it needs. + rewriter.create( + loc, amdgpu::sched_barrier_opt_enum::none); const char *asmStr = ";;;WARNING: BREAKS DEBUG WATCHES\ns_waitcnt lgkmcnt(0)\ns_barrier"; const char *constraints = ""; - rewriter.replaceOpWithNewOp( - op, + rewriter.create( + loc, /*resultTypes=*/TypeRange(), /*operands=*/ValueRange(), /*asm_string=*/asmStr, constraints, /*has_side_effects=*/true, /*is_align_stack=*/false, /*asm_dialect=*/asmDialectAttr, /*operand_attrs=*/ArrayAttr()); + rewriter.replaceOpWithNewOp( + op, amdgpu::sched_barrier_opt_enum::none); return success(); } if (chipset.majorVersion < 12) { diff --git a/mlir/test/Conversion/AMDGPUToROCDL/amdgpu-to-rocdl.mlir b/mlir/test/Conversion/AMDGPUToROCDL/amdgpu-to-rocdl.mlir index 7fd5610a88913..9a17cc6a929c0 100644 --- a/mlir/test/Conversion/AMDGPUToROCDL/amdgpu-to-rocdl.mlir +++ b/mlir/test/Conversion/AMDGPUToROCDL/amdgpu-to-rocdl.mlir @@ -239,14 +239,18 @@ func.func @amdgpu_raw_buffer_atomic_cmpswap_v2f16(%src : vector<2xf16>, %cmp : v // CHECK-LABEL: func @lds_barrier func.func @lds_barrier() { + // GFX908: rocdl.sched.barrier 0 // GFX908: llvm.inline_asm has_side_effects asm_dialect = att // GFX908-SAME: ";;;WARNING: BREAKS DEBUG WATCHES\0As_waitcnt lgkmcnt(0)\0As_barrier" + // GFX908: rocdl.sched.barrier 0 // GFX90A: rocdl.waitcnt -7937 // GFX90A-NEXT: rocdl.s.barrier // GFX10: rocdl.waitcnt -16129 // GFX10-NEXT: rocdl.s.barrier + // GFX11: rocdl.sched.barrier 0 // GFX11: llvm.inline_asm has_side_effects asm_dialect = att // GFX11-SAME: ";;;WARNING: BREAKS DEBUG WATCHES\0As_waitcnt lgkmcnt(0)\0As_barrier" + // GFX11: rocdl.sched.barrier 0 // GFX12: rocdl.s.wait.dscnt 0 // GFX12-NEXT: rocdl.s.barrier.signal -1 // GFX12-NEXT: rocdl.s.barrier.wait -1