| 
									
										
										
										
											2020-07-16 01:56:59 +08:00
										 |  |  | /* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  | you may not use this file except in compliance with the License. | 
					
						
							|  |  |  | You may obtain a copy of the License at | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  | distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  | See the License for the specific language governing permissions and | 
					
						
							|  |  |  | limitations under the License. | 
					
						
							|  |  |  | ==============================================================================*/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 07:12:08 +08:00
										 |  |  | #include "mlir-hlo/Dialect/mhlo/IR/hlo_ops.h"
 | 
					
						
							|  |  |  | #include "mlir-hlo/Dialect/mhlo/transforms/passes.h"
 | 
					
						
							|  |  |  | #include "mlir-hlo/Dialect/mhlo/transforms/rewriters.h"
 | 
					
						
							|  |  |  | #include "mlir/Dialect/StandardOps/IR/Ops.h"
 | 
					
						
							|  |  |  | #include "mlir/IR/MLIRContext.h"
 | 
					
						
							|  |  |  | #include "mlir/IR/Operation.h"
 | 
					
						
							|  |  |  | #include "mlir/IR/PatternMatch.h"
 | 
					
						
							|  |  |  | #include "mlir/Pass/Pass.h"
 | 
					
						
							|  |  |  | #include "mlir/Transforms/DialectConversion.h"
 | 
					
						
							| 
									
										
										
										
											2020-07-16 01:56:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | using mlir::FunctionPass; | 
					
						
							|  |  |  | using mlir::PassWrapper; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace { | 
					
						
							| 
									
										
										
										
											2020-07-29 07:12:08 +08:00
										 |  |  | class OptimizeMhloPass : public PassWrapper<OptimizeMhloPass, FunctionPass> { | 
					
						
							| 
									
										
										
										
											2020-07-16 01:56:59 +08:00
										 |  |  |  public: | 
					
						
							| 
									
										
										
										
											2020-07-29 07:12:08 +08:00
										 |  |  |   explicit OptimizeMhloPass() : PassWrapper<OptimizeMhloPass, FunctionPass>() {} | 
					
						
							| 
									
										
										
										
											2020-07-16 01:56:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /// Performs the lowering to MHLO dialect.
 | 
					
						
							|  |  |  |   void runOnFunction() override; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | }  // end anonymous namespace
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Lowers the complex operations that can be represented using other operations.
 | 
					
						
							| 
									
										
										
										
											2020-07-29 07:12:08 +08:00
										 |  |  | void OptimizeMhloPass::runOnFunction() { | 
					
						
							| 
									
										
										
										
											2020-07-16 01:56:59 +08:00
										 |  |  |   // Add lowering patterns to the list.
 | 
					
						
							|  |  |  |   mlir::OwningRewritePatternList patterns; | 
					
						
							|  |  |  |   mlir::mhlo::PopulateOptimizeMHLOPatterns(&getContext(), &patterns); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   applyPatternsAndFoldGreedily(getFunction(), patterns); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 07:12:08 +08:00
										 |  |  | std::unique_ptr<mlir::FunctionPass> mlir::mhlo::createOptimizeMhloPass() { | 
					
						
							|  |  |  |   return std::make_unique<OptimizeMhloPass>(); | 
					
						
							|  |  |  | } |