1 /* Copyright 2019 The TensorFlow Authors. All Rights Reserved. 2 3 Licensed under the Apache License, Version 2.0 (the "License"); 4 you may not use this file except in compliance with the License. 5 You may obtain a copy of the License at 6 7 http://www.apache.org/licenses/LICENSE-2.0 8 9 Unless required by applicable law or agreed to in writing, software 10 distributed under the License is distributed on an "AS IS" BASIS, 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 See the License for the specific language governing permissions and 13 limitations under the License. 14 ==============================================================================*/ 15 16 #ifndef TENSORFLOW_COMPILER_MLIR_TENSORFLOW_TRANSFORMS_LOWER_TF_H_ 17 #define TENSORFLOW_COMPILER_MLIR_TENSORFLOW_TRANSFORMS_LOWER_TF_H_ 18 19 #include "mlir/IR/MLIRContext.h" // from @llvm-project 20 #include "mlir/IR/PatternMatch.h" // from @llvm-project 21 22 namespace mlir { 23 namespace TF { 24 25 // Populates TensorFlow lowering patterns to lower some of the TensorFlow 26 // operations that can be represented using other TensorFlow operations. 27 // TODO(laurenzo): For some reason, TFLite uses this pass and has exact 28 // requirements on what it can do. This is fragile and should be fixed (at a 29 // minimum, names should clearly convey scope). In the mean time, for a real 30 // compiler, use PopulateTFLoweringBeforeHLOPatterns. 31 void PopulateLoweringTFPatterns(MLIRContext *context, 32 RewritePatternSet *patterns); 33 34 // Populates TensorFlow lowering patterns to lower some of the TensorFlow 35 // operations that can be represented by means of other TensorFlow operations. 36 // This pattern collection preserves those TensorFlow operations that will later 37 // be lowered to equivalent operations in CHLO or MHLO. This allows for 38 // HLO-specific lowerings. 39 void PopulateTFLoweringBeforeHLOPatterns(MLIRContext *context, 40 RewritePatternSet *patterns); 41 42 // Populates TensorFlow lowering patterns to lower some of the TensorFlow 43 // operations that can be represented using other TensorFlow operations. 44 // Patterns are from ops with some inputs or outputs that are quantized types 45 // only to ops that allow non-quantized types on all inputs and outputs. 46 void PopulateLoweringQuantizedPatterns(MLIRContext *context, 47 RewritePatternSet *patterns); 48 49 // Populates TensorFlow lowering patterns to lower some of the TensorFlow 50 // operations that can be represented using other TensorFlow operations. 51 // Patterns are from ops with some inputs or outputs that are quantized types 52 // only to ops that allow non-quantized types on all inputs and outputs. 53 void PopulateLoweringQuantizedPatterns(MLIRContext *context, 54 OwningRewritePatternList *patterns); 55 56 } // namespace TF 57 } // namespace mlir 58 59 #endif // TENSORFLOW_COMPILER_MLIR_TENSORFLOW_TRANSFORMS_LOWER_TF_H_ 60