1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file implements machinery for any CIR <-> CIR passes used by clang. 10 // 11 //===----------------------------------------------------------------------===// 12 13 // #include "clang/AST/ASTContext.h" 14 #include "mlir/IR/BuiltinOps.h" 15 #include "mlir/Pass/PassManager.h" 16 #include "clang/CIR/Dialect/Passes.h" 17 #include "llvm/Support/TimeProfiler.h" 18 19 namespace cir { runCIRToCIRPasses(mlir::ModuleOp theModule,mlir::MLIRContext & mlirContext,clang::ASTContext & astContext,bool enableVerifier,bool enableCIRSimplify)20mlir::LogicalResult runCIRToCIRPasses(mlir::ModuleOp theModule, 21 mlir::MLIRContext &mlirContext, 22 clang::ASTContext &astContext, 23 bool enableVerifier, 24 bool enableCIRSimplify) { 25 26 llvm::TimeTraceScope scope("CIR To CIR Passes"); 27 28 mlir::PassManager pm(&mlirContext); 29 pm.addPass(mlir::createCIRCanonicalizePass()); 30 31 if (enableCIRSimplify) 32 pm.addPass(mlir::createCIRSimplifyPass()); 33 34 pm.addPass(mlir::createLoweringPreparePass()); 35 36 pm.enableVerifier(enableVerifier); 37 (void)mlir::applyPassManagerCLOptions(pm); 38 return pm.run(theModule); 39 } 40 41 } // namespace cir 42 43 namespace mlir { 44 populateCIRPreLoweringPasses(OpPassManager & pm)45void populateCIRPreLoweringPasses(OpPassManager &pm) { 46 pm.addPass(createHoistAllocasPass()); 47 pm.addPass(createCIRFlattenCFGPass()); 48 } 49 50 } // namespace mlir 51