xref: /freebsd/contrib/llvm-project/clang/lib/CIR/Lowering/CIRPasses.cpp (revision 700637cbb5e582861067a11aaca4d053546871d2)
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)20 mlir::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)45 void populateCIRPreLoweringPasses(OpPassManager &pm) {
46   pm.addPass(createHoistAllocasPass());
47   pm.addPass(createCIRFlattenCFGPass());
48 }
49 
50 } // namespace mlir
51