brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · ccc8387 Raw
52 lines · cpp
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-exception6//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 19namespace cir {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(&astContext));35 36  pm.enableVerifier(enableVerifier);37  (void)mlir::applyPassManagerCLOptions(pm);38  return pm.run(theModule);39}40 41} // namespace cir42 43namespace mlir {44 45void populateCIRPreLoweringPasses(OpPassManager &pm) {46  pm.addPass(createHoistAllocasPass());47  pm.addPass(createCIRFlattenCFGPass());48  pm.addPass(createGotoSolverPass());49}50 51} // namespace mlir52