Wrap cl::opt flags within passes in a category with the pass name. This improves the help output of tools like mlir-opt.

Example:

dma-generate options:

  -dma-fast-mem-capacity                 - Set fast memory space  ...
  -dma-fast-mem-space=<uint>             - Set fast memory space  ...

loop-fusion options:

  -fusion-compute-tolerance=<number>     - Fractional increase in  ...
  -fusion-maximal                        - Enables maximal loop fusion

loop-tile options:

  -tile-size=<uint>                      - Use this tile size for  ...

loop-unroll options:

  -unroll-factor=<uint>                  - Use this unroll factor  ...
  -unroll-full                           - Fully unroll loops
  -unroll-full-threshold=<uint>          - Unroll all loops with  ...
  -unroll-num-reps=<uint>                - Unroll innermost loops  ...

loop-unroll-jam options:

  -unroll-jam-factor=<uint>              - Use this unroll jam factor ...

PiperOrigin-RevId: 231019363
diff --git a/mlir/lib/Transforms/DmaGeneration.cpp b/mlir/lib/Transforms/DmaGeneration.cpp
index 0796584..0437fb1 100644
--- a/mlir/lib/Transforms/DmaGeneration.cpp
+++ b/mlir/lib/Transforms/DmaGeneration.cpp
@@ -39,13 +39,17 @@
 using namespace mlir;
 using llvm::SmallMapVector;
 
+static llvm::cl::OptionCategory clOptionsCategory(DEBUG_TYPE " options");
+
 static llvm::cl::opt<unsigned> clFastMemorySpace(
     "dma-fast-mem-space", llvm::cl::Hidden,
-    llvm::cl::desc("Set fast memory space id for DMA generation"));
+    llvm::cl::desc("Set fast memory space id for DMA generation"),
+    llvm::cl::cat(clOptionsCategory));
 
 static llvm::cl::opt<uint64_t> clFastMemoryCapacity(
     "dma-fast-mem-capacity", llvm::cl::Hidden,
-    llvm::cl::desc("Set fast memory space capacity in KiB"));
+    llvm::cl::desc("Set fast memory space capacity in KiB"),
+    llvm::cl::cat(clOptionsCategory));
 
 namespace {
 
diff --git a/mlir/lib/Transforms/LoopFusion.cpp b/mlir/lib/Transforms/LoopFusion.cpp
index 0add797..77a4559 100644
--- a/mlir/lib/Transforms/LoopFusion.cpp
+++ b/mlir/lib/Transforms/LoopFusion.cpp
@@ -47,16 +47,20 @@
 
 using namespace mlir;
 
+static llvm::cl::OptionCategory clOptionsCategory(DEBUG_TYPE " options");
+
 /// Disables fusion profitability check and fuses if valid.
 static llvm::cl::opt<bool>
     clMaximalLoopFusion("fusion-maximal", llvm::cl::Hidden,
-                        llvm::cl::desc("Enables maximal loop fusion"));
+                        llvm::cl::desc("Enables maximal loop fusion"),
+                        llvm::cl::cat(clOptionsCategory));
 
 /// A threshold in percent of additional computation allowed when fusing.
 static llvm::cl::opt<double> clFusionAddlComputeTolerance(
     "fusion-compute-tolerance", llvm::cl::Hidden,
     llvm::cl::desc("Fractional increase in additional"
-                   "computation tolerated while fusing"));
+                   " computation tolerated while fusing"),
+    llvm::cl::cat(clOptionsCategory));
 
 namespace {
 
diff --git a/mlir/lib/Transforms/LoopTiling.cpp b/mlir/lib/Transforms/LoopTiling.cpp
index ee66c9b..2a4b7bc 100644
--- a/mlir/lib/Transforms/LoopTiling.cpp
+++ b/mlir/lib/Transforms/LoopTiling.cpp
@@ -31,10 +31,15 @@
 
 using namespace mlir;
 
+#define DEBUG_TYPE "loop-tile"
+
+static llvm::cl::OptionCategory clOptionsCategory(DEBUG_TYPE " options");
+
 // Tile size for all loops.
 static llvm::cl::opt<unsigned>
     clTileSize("tile-size", llvm::cl::Hidden,
-               llvm::cl::desc("Use this tile size for all loops"));
+               llvm::cl::desc("Use this tile size for all loops"),
+               llvm::cl::cat(clOptionsCategory));
 
 namespace {
 
diff --git a/mlir/lib/Transforms/LoopUnroll.cpp b/mlir/lib/Transforms/LoopUnroll.cpp
index 554fbc2..39ef758 100644
--- a/mlir/lib/Transforms/LoopUnroll.cpp
+++ b/mlir/lib/Transforms/LoopUnroll.cpp
@@ -35,22 +35,30 @@
 
 using namespace mlir;
 
+#define DEBUG_TYPE "loop-unroll"
+
+static llvm::cl::OptionCategory clOptionsCategory(DEBUG_TYPE " options");
+
 // Loop unrolling factor.
 static llvm::cl::opt<unsigned> clUnrollFactor(
     "unroll-factor", llvm::cl::Hidden,
-    llvm::cl::desc("Use this unroll factor for all loops being unrolled"));
+    llvm::cl::desc("Use this unroll factor for all loops being unrolled"),
+    llvm::cl::cat(clOptionsCategory));
 
 static llvm::cl::opt<bool> clUnrollFull("unroll-full", llvm::cl::Hidden,
-                                        llvm::cl::desc("Fully unroll loops"));
+                                        llvm::cl::desc("Fully unroll loops"),
+                                        llvm::cl::cat(clOptionsCategory));
 
 static llvm::cl::opt<unsigned> clUnrollNumRepetitions(
     "unroll-num-reps", llvm::cl::Hidden,
-    llvm::cl::desc("Unroll innermost loops repeatedly this many times"));
+    llvm::cl::desc("Unroll innermost loops repeatedly this many times"),
+    llvm::cl::cat(clOptionsCategory));
 
 static llvm::cl::opt<unsigned> clUnrollFullThreshold(
     "unroll-full-threshold", llvm::cl::Hidden,
     llvm::cl::desc(
-        "Unroll all loops with trip count less than or equal to this"));
+        "Unroll all loops with trip count less than or equal to this"),
+    llvm::cl::cat(clOptionsCategory));
 
 namespace {
 /// Loop unrolling pass. Unrolls all innermost loops unless full unrolling and a
diff --git a/mlir/lib/Transforms/LoopUnrollAndJam.cpp b/mlir/lib/Transforms/LoopUnrollAndJam.cpp
index d0cf278..71d7781 100644
--- a/mlir/lib/Transforms/LoopUnrollAndJam.cpp
+++ b/mlir/lib/Transforms/LoopUnrollAndJam.cpp
@@ -57,11 +57,16 @@
 
 using namespace mlir;
 
+#define DEBUG_TYPE "loop-unroll-jam"
+
+static llvm::cl::OptionCategory clOptionsCategory(DEBUG_TYPE " options");
+
 // Loop unroll and jam factor.
 static llvm::cl::opt<unsigned>
     clUnrollJamFactor("unroll-jam-factor", llvm::cl::Hidden,
                       llvm::cl::desc("Use this unroll jam factor for all loops"
-                                     " (default 4)"));
+                                     " (default 4)"),
+                      llvm::cl::cat(clOptionsCategory));
 
 namespace {
 /// Loop unroll jam pass. Currently, this just unroll jams the first
diff --git a/mlir/lib/Transforms/Vectorization/VectorizerTestPass.cpp b/mlir/lib/Transforms/Vectorization/VectorizerTestPass.cpp
index ad966e8..c08ffd4 100644
--- a/mlir/lib/Transforms/Vectorization/VectorizerTestPass.cpp
+++ b/mlir/lib/Transforms/Vectorization/VectorizerTestPass.cpp
@@ -43,36 +43,41 @@
 
 using functional::map;
 
+static llvm::cl::OptionCategory clOptionsCategory(DEBUG_TYPE " options");
+
 static llvm::cl::list<int> clTestVectorShapeRatio(
     "vector-shape-ratio",
     llvm::cl::desc("Specify the HW vector size for vectorization"),
-    llvm::cl::ZeroOrMore);
+    llvm::cl::ZeroOrMore, llvm::cl::cat(clOptionsCategory));
 static llvm::cl::opt<bool> clTestForwardSlicingAnalysis(
     "forward-slicing",
-    llvm::cl::desc(
-        "Specify to enable testing forward static slicing and topological sort "
-        "functionalities"));
+    llvm::cl::desc("Enable testing forward static slicing and topological sort "
+                   "functionalities"),
+    llvm::cl::cat(clOptionsCategory));
 static llvm::cl::opt<bool> clTestBackwardSlicingAnalysis(
     "backward-slicing",
-    llvm::cl::desc("Specify to enable testing backward static slicing and "
-                   "topological sort functionalities"));
+    llvm::cl::desc("Enable testing backward static slicing and "
+                   "topological sort functionalities"),
+    llvm::cl::cat(clOptionsCategory));
 static llvm::cl::opt<bool> clTestSlicingAnalysis(
     "slicing",
-    llvm::cl::desc(
-        "Specify to enable testing static slicing and topological sort "
-        "functionalities"));
+    llvm::cl::desc("Enable testing static slicing and topological sort "
+                   "functionalities"),
+    llvm::cl::cat(clOptionsCategory));
 static llvm::cl::opt<bool> clTestComposeMaps(
     "compose-maps",
     llvm::cl::desc(
-        "Specify to enable testing the composition of AffineMap where each "
+        "Enable testing the composition of AffineMap where each "
         "AffineMap in the composition is specified as the affine_map attribute "
-        "in a constant op."));
+        "in a constant op."),
+    llvm::cl::cat(clOptionsCategory));
 static llvm::cl::opt<bool> clTestNormalizeMaps(
     "normalize-maps",
     llvm::cl::desc(
-        "Specify to enable testing the normalization of AffineAffineApplyOp "
+        "Enable testing the normalization of AffineAffineApplyOp "
         "where each AffineAffineApplyOp in the composition is a single output "
-        "instruction."));
+        "instruction."),
+    llvm::cl::cat(clOptionsCategory));
 
 namespace {
 
diff --git a/mlir/lib/Transforms/Vectorize.cpp b/mlir/lib/Transforms/Vectorize.cpp
index 3ad82fa..29a9799 100644
--- a/mlir/lib/Transforms/Vectorize.cpp
+++ b/mlir/lib/Transforms/Vectorize.cpp
@@ -547,10 +547,12 @@
 using llvm::DenseSet;
 using llvm::SetVector;
 
+static llvm::cl::OptionCategory clOptionsCategory("vectorize options");
+
 static llvm::cl::list<int> clVirtualVectorSize(
     "virtual-vector-size",
     llvm::cl::desc("Specify n-D virtual vector size for early vectorization"),
-    llvm::cl::ZeroOrMore);
+    llvm::cl::ZeroOrMore, llvm::cl::cat(clOptionsCategory));
 
 static llvm::cl::list<int> clFastestVaryingPattern(
     "test-fastest-varying",
@@ -558,7 +560,7 @@
         "Specify a 1-D, 2-D or 3-D pattern of fastest varying memory"
         " dimensions to match. See defaultPatterns in Vectorize.cpp for a"
         " description and examples. This is used for testing purposes"),
-    llvm::cl::ZeroOrMore);
+    llvm::cl::ZeroOrMore, llvm::cl::cat(clOptionsCategory));
 
 /// Forward declaration.
 static FilterFunctionType