[Mlir-commits] [mlir] e22f04b - [mlir][gpu] Fix option parsing in `TargetOptions`
Fabian Mora
llvmlistbot at llvm.org
Mon Sep 4 17:54:34 PDT 2023
Author: Fabian Mora
Date: 2023-09-04T20:54:29-04:00
New Revision: e22f04b597e03339739d42e3a60c05634bb74313
URL: https://github.com/llvm/llvm-project/commit/e22f04b597e03339739d42e3a60c05634bb74313
DIFF: https://github.com/llvm/llvm-project/commit/e22f04b597e03339739d42e3a60c05634bb74313.diff
LOG: [mlir][gpu] Fix option parsing in `TargetOptions`
`TargetOptions` includes a field for passing additional command line options to
the GPU compilation process. This field is typically used during the 'gpu-module-to-binary`
pass:
```
--gpu-module-to-binary=opts="-v -c"
```
The problem is that `tokenizeCmdOptions` receives the quoted string, which produces an
incorrect tokenization for `"-v -c"`. This patch removes quotes, fixing this issue.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D159434
Added:
Modified:
mlir/lib/Dialect/GPU/IR/GPUDialect.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp
index 2422dd2438d32d2..f417a083337fcaf 100644
--- a/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp
+++ b/mlir/lib/Dialect/GPU/IR/GPUDialect.cpp
@@ -2006,11 +2006,20 @@ std::pair<llvm::BumpPtrAllocator, SmallVector<const char *>>
TargetOptions::tokenizeCmdOptions() const {
std::pair<llvm::BumpPtrAllocator, SmallVector<const char *>> options;
llvm::StringSaver stringSaver(options.first);
+ StringRef opts = cmdOptions;
+ // For a correct tokenization of the command line options `opts` must be
+ // unquoted, otherwise the tokenization function returns a single string: the
+ // unquoted `cmdOptions` -which is not the desired behavior.
+ // Remove any quotes if they are at the beginning and end of the string:
+ if (!opts.empty() && opts.front() == '"' && opts.back() == '"')
+ opts.consume_front("\""), opts.consume_back("\"");
+ if (!opts.empty() && opts.front() == '\'' && opts.back() == '\'')
+ opts.consume_front("'"), opts.consume_back("'");
#ifdef _WIN32
- llvm::cl::TokenizeWindowsCommandLine(cmdOptions, stringSaver, options.second,
+ llvm::cl::TokenizeWindowsCommandLine(opts, stringSaver, options.second,
/*MarkEOLs=*/false);
#else
- llvm::cl::TokenizeGNUCommandLine(cmdOptions, stringSaver, options.second,
+ llvm::cl::TokenizeGNUCommandLine(opts, stringSaver, options.second,
/*MarkEOLs=*/false);
#endif // _WIN32
return options;
More information about the Mlir-commits
mailing list