NFC: Update pattern rewrite API to pass OwningRewritePatternList by const reference.
authorRiver Riddle <riverriddle@google.com>
Mon, 12 Aug 2019 01:33:42 +0000 (18:33 -0700)
committerA. Unique TensorFlower <gardener@tensorflow.org>
Mon, 12 Aug 2019 01:34:14 +0000 (18:34 -0700)
The pattern list is not modified by any of these APIs and should thus be passed with const.

PiperOrigin-RevId: 262844002

mlir/include/mlir/IR/PatternMatch.h
mlir/include/mlir/Transforms/DialectConversion.h
mlir/lib/IR/PatternMatch.cpp
mlir/lib/Transforms/DialectConversion.cpp
mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp

index 4f1e50b..d47b924 100644 (file)
@@ -436,7 +436,7 @@ private:
 class RewritePatternMatcher {
 public:
   /// Create a RewritePatternMatcher with the specified set of patterns.
-  explicit RewritePatternMatcher(OwningRewritePatternList &patterns);
+  explicit RewritePatternMatcher(const OwningRewritePatternList &patterns);
 
   /// Try to match the given operation to a pattern and rewrite it. Return
   /// true if any pattern matches.
@@ -457,7 +457,8 @@ private:
 /// the result operation regions.
 /// Note: This does not apply patterns to the top-level operation itself.
 ///
-bool applyPatternsGreedily(Operation *op, OwningRewritePatternList &patterns);
+bool applyPatternsGreedily(Operation *op,
+                           const OwningRewritePatternList &patterns);
 
 } // end namespace mlir
 
index 3a62c5f..bd7d021 100644 (file)
@@ -469,24 +469,28 @@ private:
 /// returns failure if there are unreachable blocks in any of the regions nested
 /// within 'ops'. If 'converter' is provided, the signatures of blocks and
 /// regions are also converted.
-LLVM_NODISCARD LogicalResult applyPartialConversion(
-    ArrayRef<Operation *> ops, ConversionTarget &target,
-    OwningRewritePatternList &patterns, TypeConverter *converter = nullptr);
-LLVM_NODISCARD LogicalResult applyPartialConversion(
-    Operation *op, ConversionTarget &target, OwningRewritePatternList &patterns,
-    TypeConverter *converter = nullptr);
+LLVM_NODISCARD LogicalResult
+applyPartialConversion(ArrayRef<Operation *> ops, ConversionTarget &target,
+                       const OwningRewritePatternList &patterns,
+                       TypeConverter *converter = nullptr);
+LLVM_NODISCARD LogicalResult
+applyPartialConversion(Operation *op, ConversionTarget &target,
+                       const OwningRewritePatternList &patterns,
+                       TypeConverter *converter = nullptr);
 
 /// Apply a complete conversion on the given operations, and all nested
 /// operations. This method returns failure if the conversion of any operation
 /// fails, or if there are unreachable blocks in any of the regions nested
 /// within 'ops'. If 'converter' is provided, the signatures of blocks and
 /// regions are also converted.
-LLVM_NODISCARD LogicalResult applyFullConversion(
-    ArrayRef<Operation *> ops, ConversionTarget &target,
-    OwningRewritePatternList &patterns, TypeConverter *converter = nullptr);
-LLVM_NODISCARD LogicalResult applyFullConversion(
-    Operation *op, ConversionTarget &target, OwningRewritePatternList &patterns,
-    TypeConverter *converter = nullptr);
+LLVM_NODISCARD LogicalResult
+applyFullConversion(ArrayRef<Operation *> ops, ConversionTarget &target,
+                    const OwningRewritePatternList &patterns,
+                    TypeConverter *converter = nullptr);
+LLVM_NODISCARD LogicalResult
+applyFullConversion(Operation *op, ConversionTarget &target,
+                    const OwningRewritePatternList &patterns,
+                    TypeConverter *converter = nullptr);
 
 /// Apply an analysis conversion on the given operations, and all nested
 /// operations. This method analyzes which operations would be successfully
@@ -500,10 +504,11 @@ LLVM_NODISCARD LogicalResult applyFullConversion(
 /// considered for conversion.
 LLVM_NODISCARD LogicalResult applyAnalysisConversion(
     ArrayRef<Operation *> ops, ConversionTarget &target,
-    OwningRewritePatternList &patterns, DenseSet<Operation *> &convertedOps,
-    TypeConverter *converter = nullptr);
+    const OwningRewritePatternList &patterns,
+    DenseSet<Operation *> &convertedOps, TypeConverter *converter = nullptr);
 LLVM_NODISCARD LogicalResult applyAnalysisConversion(
-    Operation *op, ConversionTarget &target, OwningRewritePatternList &patterns,
+    Operation *op, ConversionTarget &target,
+    const OwningRewritePatternList &patterns,
     DenseSet<Operation *> &convertedOps, TypeConverter *converter = nullptr);
 } // end namespace mlir
 
index b575abe..aa560a9 100644 (file)
@@ -148,7 +148,7 @@ void PatternRewriter::updatedRootInPlace(
 //===----------------------------------------------------------------------===//
 
 RewritePatternMatcher::RewritePatternMatcher(
-    OwningRewritePatternList &patterns) {
+    const OwningRewritePatternList &patterns) {
   for (auto &pattern : patterns)
     this->patterns.push_back(pattern.get());
 
index cfb85be..5a4145a 100644 (file)
@@ -681,7 +681,7 @@ public:
   using LegalizationAction = ConversionTarget::LegalizationAction;
 
   OperationLegalizer(ConversionTarget &targetInfo,
-                     OwningRewritePatternList &patterns)
+                     const OwningRewritePatternList &patterns)
       : target(targetInfo) {
     buildLegalizationGraph(patterns);
     computeLegalizationGraphBenefit();
@@ -704,7 +704,7 @@ private:
   /// function populates 'legalizerPatterns' with the operations that are not
   /// directly legal, but may be transitively legal for the current target given
   /// the provided patterns.
-  void buildLegalizationGraph(OwningRewritePatternList &patterns);
+  void buildLegalizationGraph(const OwningRewritePatternList &patterns);
 
   /// Compute the benefit of each node within the computed legalization graph.
   /// This orders the patterns within 'legalizerPatterns' based upon two
@@ -817,7 +817,7 @@ OperationLegalizer::legalizePattern(Operation *op, RewritePattern *pattern,
 }
 
 void OperationLegalizer::buildLegalizationGraph(
-    OwningRewritePatternList &patterns) {
+    const OwningRewritePatternList &patterns) {
   // A mapping between an operation and a set of operations that can be used to
   // generate it.
   DenseMap<OperationName, SmallPtrSet<OperationName, 2>> parentOps;
@@ -963,7 +963,7 @@ enum OpConversionMode {
 // converted using the appropriate 'convertType' calls.
 struct OperationConverter {
   explicit OperationConverter(ConversionTarget &target,
-                              OwningRewritePatternList &patterns,
+                              const OwningRewritePatternList &patterns,
                               OpConversionMode mode,
                               DenseSet<Operation *> *legalizableOps = nullptr)
       : opLegalizer(target, patterns), mode(mode),
@@ -1334,17 +1334,16 @@ void ConversionTarget::setLegalityCallback(
 /// Apply a partial conversion on the given operations, and all nested
 /// operations. This method converts as many operations to the target as
 /// possible, ignoring operations that failed to legalize.
-LogicalResult mlir::applyPartialConversion(ArrayRef<Operation *> ops,
-                                           ConversionTarget &target,
-                                           OwningRewritePatternList &patterns,
-                                           TypeConverter *converter) {
+LogicalResult mlir::applyPartialConversion(
+    ArrayRef<Operation *> ops, ConversionTarget &target,
+    const OwningRewritePatternList &patterns, TypeConverter *converter) {
   OperationConverter opConverter(target, patterns, OpConversionMode::Partial);
   return opConverter.convertOperations(ops, converter);
 }
-LogicalResult mlir::applyPartialConversion(Operation *op,
-                                           ConversionTarget &target,
-                                           OwningRewritePatternList &patterns,
-                                           TypeConverter *converter) {
+LogicalResult
+mlir::applyPartialConversion(Operation *op, ConversionTarget &target,
+                             const OwningRewritePatternList &patterns,
+                             TypeConverter *converter) {
   return applyPartialConversion(llvm::makeArrayRef(op), target, patterns,
                                 converter);
 }
@@ -1352,16 +1351,17 @@ LogicalResult mlir::applyPartialConversion(Operation *op,
 /// Apply a complete conversion on the given operations, and all nested
 /// operations. This method will return failure if the conversion of any
 /// operation fails.
-LogicalResult mlir::applyFullConversion(ArrayRef<Operation *> ops,
-                                        ConversionTarget &target,
-                                        OwningRewritePatternList &patterns,
-                                        TypeConverter *converter) {
+LogicalResult
+mlir::applyFullConversion(ArrayRef<Operation *> ops, ConversionTarget &target,
+                          const OwningRewritePatternList &patterns,
+                          TypeConverter *converter) {
   OperationConverter opConverter(target, patterns, OpConversionMode::Full);
   return opConverter.convertOperations(ops, converter);
 }
-LogicalResult mlir::applyFullConversion(Operation *op, ConversionTarget &target,
-                                        OwningRewritePatternList &patterns,
-                                        TypeConverter *converter) {
+LogicalResult
+mlir::applyFullConversion(Operation *op, ConversionTarget &target,
+                          const OwningRewritePatternList &patterns,
+                          TypeConverter *converter) {
   return applyFullConversion(llvm::makeArrayRef(op), target, patterns,
                              converter);
 }
@@ -1372,20 +1372,19 @@ LogicalResult mlir::applyFullConversion(Operation *op, ConversionTarget &target,
 /// were found to be legalizable to the given 'target' are placed within the
 /// provided 'convertedOps' set; note that no actual rewrites are applied to the
 /// operations on success and only pre-existing operations are added to the set.
-LogicalResult mlir::applyAnalysisConversion(ArrayRef<Operation *> ops,
-                                            ConversionTarget &target,
-                                            OwningRewritePatternList &patterns,
-                                            DenseSet<Operation *> &convertedOps,
-                                            TypeConverter *converter) {
+LogicalResult mlir::applyAnalysisConversion(
+    ArrayRef<Operation *> ops, ConversionTarget &target,
+    const OwningRewritePatternList &patterns,
+    DenseSet<Operation *> &convertedOps, TypeConverter *converter) {
   OperationConverter opConverter(target, patterns, OpConversionMode::Analysis,
                                  &convertedOps);
   return opConverter.convertOperations(ops, converter);
 }
-LogicalResult mlir::applyAnalysisConversion(Operation *op,
-                                            ConversionTarget &target,
-                                            OwningRewritePatternList &patterns,
-                                            DenseSet<Operation *> &convertedOps,
-                                            TypeConverter *converter) {
+LogicalResult
+mlir::applyAnalysisConversion(Operation *op, ConversionTarget &target,
+                              const OwningRewritePatternList &patterns,
+                              DenseSet<Operation *> &convertedOps,
+                              TypeConverter *converter) {
   return applyAnalysisConversion(llvm::makeArrayRef(op), target, patterns,
                                  convertedOps, converter);
 }
index d202a37..fe15fb4 100644 (file)
@@ -44,7 +44,7 @@ namespace {
 class GreedyPatternRewriteDriver : public PatternRewriter {
 public:
   explicit GreedyPatternRewriteDriver(MLIRContext *ctx,
-                                      OwningRewritePatternList &patterns)
+                                      const OwningRewritePatternList &patterns)
       : PatternRewriter(ctx), matcher(patterns) {
     worklist.reserve(64);
   }
@@ -221,7 +221,7 @@ bool GreedyPatternRewriteDriver::simplify(Operation *op, int maxIterations) {
 /// Note: This does not apply patterns to the top-level operation itself.
 ///
 bool mlir::applyPatternsGreedily(Operation *op,
-                                 OwningRewritePatternList &patterns) {
+                                 const OwningRewritePatternList &patterns) {
   // The top-level operation must be known to be isolated from above to
   // prevent performing canonicalizations on operations defined at or above
   // the region containing 'op'.