mirror of https://github.com/llvm/circt.git
80 lines
2.8 KiB
C++
80 lines
2.8 KiB
C++
//===- circt-opt.cpp - The circt-opt driver -------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements the 'circt-opt' tool, which is the circt analog of
|
|
// mlir-opt, used to drive compiler passes, e.g. for testing.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "circt/InitAllDialects.h"
|
|
#include "circt/InitAllPasses.h"
|
|
#include "circt/Support/LoweringOptions.h"
|
|
#include "circt/Support/Version.h"
|
|
#include "mlir/Dialect/Affine/IR/AffineOps.h"
|
|
#include "mlir/Dialect/Arith/IR/Arith.h"
|
|
#include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h"
|
|
#include "mlir/Dialect/EmitC/IR/EmitC.h"
|
|
#include "mlir/Dialect/Func/Extensions/InlinerExtension.h"
|
|
#include "mlir/Dialect/Func/IR/FuncOps.h"
|
|
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
|
|
#include "mlir/Dialect/MemRef/IR/MemRef.h"
|
|
#include "mlir/Dialect/SCF/IR/SCF.h"
|
|
#include "mlir/Dialect/Vector/IR/VectorOps.h"
|
|
#include "mlir/Pass/PassRegistry.h"
|
|
#include "mlir/Tools/mlir-opt/MlirOptMain.h"
|
|
#include "mlir/Transforms/Passes.h"
|
|
#include "llvm/Support/PrettyStackTrace.h"
|
|
|
|
// Defined in the test directory, no public header.
|
|
namespace circt {
|
|
namespace test {
|
|
void registerAnalysisTestPasses();
|
|
} // namespace test
|
|
} // namespace circt
|
|
|
|
int main(int argc, char **argv) {
|
|
// Set the bug report message to indicate users should file issues on
|
|
// llvm/circt and not llvm/llvm-project.
|
|
llvm::setBugReportMsg(circt::circtBugReportMsg);
|
|
|
|
mlir::DialectRegistry registry;
|
|
|
|
// Register MLIR stuff
|
|
registry.insert<mlir::affine::AffineDialect>();
|
|
registry.insert<mlir::LLVM::LLVMDialect>();
|
|
registry.insert<mlir::memref::MemRefDialect>();
|
|
registry.insert<mlir::func::FuncDialect>();
|
|
registry.insert<mlir::arith::ArithDialect>();
|
|
registry.insert<mlir::cf::ControlFlowDialect>();
|
|
registry.insert<mlir::scf::SCFDialect>();
|
|
registry.insert<mlir::emitc::EmitCDialect>();
|
|
registry.insert<mlir::vector::VectorDialect>();
|
|
|
|
circt::registerAllDialects(registry);
|
|
circt::registerAllPasses();
|
|
|
|
mlir::func::registerInlinerExtension(registry);
|
|
|
|
// Register the standard passes we want.
|
|
mlir::registerCSEPass();
|
|
mlir::registerSCCPPass();
|
|
mlir::registerInlinerPass();
|
|
mlir::registerCanonicalizerPass();
|
|
mlir::registerViewOpGraphPass();
|
|
mlir::registerSymbolDCEPass();
|
|
llvm::cl::AddExtraVersionPrinter(
|
|
[](llvm::raw_ostream &os) { os << circt::getCirctVersion() << '\n'; });
|
|
|
|
// Register test passes
|
|
circt::test::registerAnalysisTestPasses();
|
|
mlir::registerMem2RegPass();
|
|
|
|
return mlir::failed(mlir::MlirOptMain(
|
|
argc, argv, "CIRCT modular optimizer driver", registry));
|
|
}
|