[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