| Issue |
180117
|
| Summary |
[MLIR] Invalid --mlir-debug-counter causes MLIR crash bug
|
| Labels |
mlir
|
| Assignees |
|
| Reporter |
jiayiw2008
|
I encountered a crash triggered by invalid DebugCounter arguments. The code example below demonstrates the problem.
### Code Example
```llvm
module attributes {gpu.container_module} {
gpu.module @kernels {
func.func @gemv_kernel(%arg0: memref<?xf64, 3>, %arg1: memref<?xf64, 2>, %arg2: memref<?xf64>) attributes {gpu.kernel} {
%c1 = arith.constant 1 : index
%c2 = arith.constant 2 : index
%c0 = arith.constant 0 : index
%c1_i64 = arith.constant 1 : i64
%c0_f64 = arith.constant 0.0 : f64
%tidx = gpu.thread_id x
%bidx = gpu.block_id x
%bdim = gpu.block_dim x
%gdim = gpu.grid_dim y
%global_id = arith.addi %bidx, %tidx
%scaled_id = arith.muli %global_id, %c2
%dim0 = memref.dim %arg0, %c0 : memref<?xf64, 3>
%dim1 = memref.dim %arg1, %c1 : memref<?xf64, 2>
scf.while (%iter = %c0) : (index) -> (index) {
%cond = arith.cmpi slt, %iter, %dim0 : index
scf.condition(%cond) %iter : index
} do {
^bb0(%iter: index):
%val = memref.load %arg1[%iter, %c0] : memref<?xf64, 2>
%sum = arith.addf %val, %c0_f64 : f64
memref.store %sum, %arg0[%iter, %c0, %c1] : memref<?xf64, 3>
%next = arith.addi %iter, %c1
scf.yield %next : index
}
scf.for %i = %c0 to %scaled_id step %c2 {
scf.if {
%mod = arith.remsi %i, %c2 : index
%cmp = arith.cmpi eq, %mod, %c0 : index
scf.condition(%cmp)
} {
%temp = memref.alloca() : memref<10xf64>
scf.parallel (%j = %c0 to %c2 step %c1) {
%idx = arith.addi %i, %j
%load = memref.load %arg2[%idx] : memref<?xf64>
%mul = arith.mulf %load, %load : f64
memref.store %mul, %temp[%j] : memref<10xf64>
}
}
}
gpu.return
}
}
func.func @host_launch_gemv(%arg0: memref<?xf64, 3>, %arg1: memref<?xf64, 2>, %arg2: memref<?xf64>) {
%c1 = arith.constant 1 : index
%c64 = arith.constant 64 : index
%c1024 = arith.constant 1024 : index
%dim0 = memref.dim %arg0, %c0 : memref<?xf64, 3>
%blocks = arith.ceildivui %dim0, %c64
%grid_x = arith.select %blocks, %blocks, %c1 : index
%grid_y = arith.constant 2 : index
scf.execute_region {
gpu.launch_func @kernels::@gemv_kernel
blocks in (%grid_x, %grid_y, %c1)
threads in (%c1024)
args(%arg0 : memref<?xf64, 3>, %arg1 : memref<?xf64, 2>, %arg2 : memref<?xf64>)
scf.yield
}
return
}
}
```
I ran the command: `mlir-opt input.mlir --mlir-debug-counter=unique-tag-for-my-action-skip=-1`. Although this command is invalid, it causes a crash. Since MLIR handles other similar cases correctly, I believe this issue should be fixed.
### Stack Trace
```bash
error: expected DebugCounter counter value to be numeric, but got `-1n`
LLVM ERROR: Invalid DebugCounter command-line configuration
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0. Program arguments: mlir-opt input.mlir --mlir-debug-counter=unique-tag-for-my-action-skip=-1n
#0 0x00005e961e5e287d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /llvm/lib/Support/Unix/Signals.inc:842:11
#1 0x00005e961e5e2dab PrintStackTraceSignalHandler(void*) /llvm/lib/Support/Unix/Signals.inc:924:1
#2 0x00005e961e5e0c64 llvm::sys::RunSignalHandlers() /llvm/lib/Support/Signals.cpp:108:5
#3 0x00005e961e5e3449 SignalHandler(int, siginfo_t*, void*) /llvm/lib/Support/Unix/Signals.inc:429:38
#4 0x00007b5d23045330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#5 0x00007b5d2309eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#11 0x00005e961e5bb4b2 /llvm/lib/Support/ErrorHandling.cpp:96:3
#12 0x00005e961f679467 mlir::tracing::DebugCounter::applyCLOptions() /mlir/lib/Debug/DebugCounter.cpp:155:9
#13 0x00005e961f6792b2 mlir::tracing::DebugCounter::DebugCounter() /mlir/lib/Debug/DebugCounter.cpp:46:50
#14 0x00005e961f6752c5 mlir::tracing::InstallDebugHandler::Impl::Impl(mlir::MLIRContext&, mlir::tracing::DebugConfig const&) /mlir/lib/Debug/CLOptionsSetup.cpp:90:39
#15 0x00005e961f66f7ad std::__detail::_MakeUniq<mlir::tracing::InstallDebugHandler::Impl>::__single_object std::make_unique<mlir::tracing::InstallDebugHandler::Impl, mlir::MLIRContext&, mlir::tracing::DebugConfig const&>(mlir::MLIRContext&, mlir::tracing::DebugConfig const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:1070:34
#16 0x00005e961f66eca5 mlir::tracing::InstallDebugHandler::InstallDebugHandler(mlir::MLIRContext&, mlir::tracing::DebugConfig const&) /mlir/lib/Debug/CLOptionsSetup.cpp:152:54
#2 0x00005e961e5e0c64 llvm::sys::RunSignalHandlers() /llvm/lib/Support/Signals.cpp:108:5
#3 0x00005e961e5e3449 SignalHandler(int, siginfo_t*, void*) /llvm/lib/Support/Unix/Signals.inc:429:38
#4 0x00007b5d23045330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#5 0x00007b5d2309eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#6 0x00007b5d2309eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#7 0x00007b5d2309eb2c pthread_kill ./nptl/pthread_kill.c:89:10
#8 0x00007b5d2304527e raise ./signal/../sysdeps/posix/raise.c:27:6
#9 0x00007b5d230288ff abort ./stdlib/abort.c:81:7
#10 0x00005e961e5bb635 llvm::report_fatal_error(llvm::Twine const&, bool) /llvm/lib/Support/ErrorHandling.cpp:137:5
#11 0x00005e961e5bb4b2 /llvm/lib/Support/ErrorHandling.cpp:96:3
#12 0x00005e961f679467 mlir::tracing::DebugCounter::applyCLOptions() /mlir/lib/Debug/DebugCounter.cpp:155:9
#13 0x00005e961f6792b2 mlir::tracing::DebugCounter::DebugCounter() /mlir/lib/Debug/DebugCounter.cpp:46:50
#14 0x00005e961f6752c5 mlir::tracing::InstallDebugHandler::Impl::Impl(mlir::MLIRContext&, mlir::tracing::DebugConfig const&) /mlir/lib/Debug/CLOptionsSetup.cpp:90:39
#15 0x00005e961f66f7ad std::__detail::_MakeUniq<mlir::tracing::InstallDebugHandler::Impl>::__single_object std::make_unique<mlir::tracing::InstallDebugHandler::Impl, mlir::MLIRContext&, mlir::tracing::DebugConfig const&>(mlir::MLIRContext&, mlir::tracing::DebugConfig const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:1070:34
#16 0x00005e961f66eca5 mlir::tracing::InstallDebugHandler::InstallDebugHandler(mlir::MLIRContext&, mlir::tracing::DebugConfig const&) /mlir/lib/Debug/CLOptionsSetup.cpp:152:54
#17 0x00005e961e6ec415 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::MemoryBufferRef, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, mlir::SourceMgrDiagnosticVerifierHandler*, llvm::ThreadPoolInterface*) /mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:668:8
#18 0x00005e961e6ec18c mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::MemoryBufferRef, llvm::raw_ostream&) const /mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:771:12
#19 0x00005e961e6ec096 llvm::LogicalResult llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::MemoryBufferRef const&, llvm::raw_ostream&) /llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#20 0x00005e962cfb8c5a llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::MemoryBufferRef const&, llvm::raw_ostream&) const /llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#21 0x00005e962cfb801a mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) /mlir/lib/Support/ToolUtilities.cpp:30:12
#22 0x00005e961e6e7e16 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) /mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:776:26
#23 0x00005e961e6e8215 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) /mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:822:14
#24 0x00005e961e6e83e8 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) /mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:838:10
#25 0x00005e961e5b7485 main /mlir/tools/mlir-opt/mlir-opt.cpp:347:33
#26 0x00007b5d2302a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#27 0x00007b5d2302a28b call_init ./csu/../csu/libc-start.c:128:20
#28 0x00007b5d2302a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#29 0x00005e961e5b72f5 _start (/mnt/raid/build_all/bin/mlir-opt+0x46a92f5)
Aborted
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs