diff --git a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td index 709dd922b8fa2..7bbf18fe0106f 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td @@ -2101,6 +2101,23 @@ def NVVM_WgmmaMmaAsyncOp : NVVM_Op<"wgmma.mma_async", }]; } +//===----------------------------------------------------------------------===// +// NVVM breakpoint Op +//===----------------------------------------------------------------------===// + +def NVVM_Breakpoint : NVVM_Op<"breakpoint"> { + let summary = "Breakpoint Op"; + let description = [{ + Breakpoint suspends execution of the program for debugging. + [For more information, see PTX ISA](https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#miscellaneous-instructions-brkpt) + }]; + string llvmBuilder = [{ + createIntrinsicCall(builder, llvm::Intrinsic::debugtrap); + }]; + + let assemblyFormat = "attr-dict"; +} + //===----------------------------------------------------------------------===// // NVVM target attribute. //===----------------------------------------------------------------------===// diff --git a/mlir/test/Target/LLVMIR/nvvmir.mlir b/mlir/test/Target/LLVMIR/nvvmir.mlir index 6e2787d121ae6..88ffb1c7bfdf7 100644 --- a/mlir/test/Target/LLVMIR/nvvmir.mlir +++ b/mlir/test/Target/LLVMIR/nvvmir.mlir @@ -610,4 +610,12 @@ llvm.func @nvvm_fence_proxy_tensormap_generic_acquire(%addr : !llvm.ptr) { // CHECK: call void @llvm.nvvm.fence.proxy.tensormap_generic.acquire.sys(ptr {{%[0-9]+}}, i32 128) nvvm.fence.proxy.acquire #nvvm.mem_scope %addr, %c128 llvm.return -} \ No newline at end of file +} + +// ----- +// CHECK-LABEL: @nvvm_breakpoint +llvm.func @nvvm_breakpoint() { + // CHECK: call void @llvm.debugtrap() + nvvm.breakpoint + llvm.return +}