CIRCT 22.0.0git
Loading...
Searching...
No Matches
pipelines.h
Go to the documentation of this file.
1//===- pipelines.h - Arcilator lowering pipelines -------------------------===//
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 declares the 'arcilator' lowering pipelines.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef TOOLS_ARCILATOR_PIPELINES_H
14#define TOOLS_ARCILATOR_PIPELINES_H
15
16#include "mlir/Pass/PassManager.h"
17#include "mlir/Pass/PassOptions.h"
18#include "llvm/Support/CommandLine.h"
19
20namespace circt {
21
22// Pre-process the input such that it no longer contains any SV dialect ops
23// and external modules that are relevant to the arc transformation are
24// represented as intrinsic ops.
26 : mlir::PassPipelineOptions<ArcPreprocessingOptions> {
27 Option<bool> observePorts{*this, "observe-ports",
28 llvm::cl::desc("Make all ports observable"),
29 llvm::cl::init(false)};
30
31 Option<bool> observeWires{*this, "observe-wires",
32 llvm::cl::desc("Make all wires observable"),
33 llvm::cl::init(false)};
34
35 Option<bool> observeNamedValues{
36 *this, "observe-named-values",
37 llvm::cl::desc("Make values with `sv.namehint` observable"),
38 llvm::cl::init(false)};
39
40 Option<bool> observeMemories{
41 *this, "observe-memories",
42 llvm::cl::desc("Make all memory contents observable"),
43 llvm::cl::init(false)};
44};
46 mlir::OpPassManager &pm, const ArcPreprocessingOptions &options = {});
47
48// Restructure the input from a `hw.module` hierarchy to a collection of arcs.
49struct ArcConversionOptions : mlir::PassPipelineOptions<ArcConversionOptions> {
50 Option<bool> observeRegisters{*this, "observe-registers",
51 llvm::cl::desc("Make all registers observable"),
52 llvm::cl::init(false)};
53
54 Option<bool> shouldDedup{*this, "dedup", llvm::cl::desc("Deduplicate arcs"),
55 llvm::cl::init(true)};
56};
57void populateArcConversionPipeline(mlir::OpPassManager &pm,
58 const ArcConversionOptions &options = {});
59
60// Perform arc-level optimizations that are not specific to software
61// simulation.
63 : mlir::PassPipelineOptions<ArcOptimizationOptions> {
64 Option<bool> shouldDedup{*this, "dedup", llvm::cl::desc("Deduplicate arcs"),
65 llvm::cl::init(true)};
66
67 Option<bool> shouldDetectEnables{
68 *this, "detect-enables",
69 llvm::cl::desc("Infer enable conditions for states to avoid computation"),
70 llvm::cl::init(true)};
71
72 Option<bool> shouldDetectResets{
73 *this, "detect-resets",
74 llvm::cl::desc("Infer reset conditions for states to avoid computation"),
75 llvm::cl::init(false)};
76
77 Option<bool> shouldMakeLUTs{
78 *this, "lookup-tables",
79 llvm::cl::desc("Optimize arcs into lookup tables"), llvm::cl::init(true)};
80};
82 mlir::OpPassManager &pm, const ArcOptimizationOptions &options = {});
83
84// Lower stateful arcs into explicit state reads and writes.
86 : mlir::PassPipelineOptions<ArcStateLoweringOptions> {
87 Option<bool> shouldInline{*this, "inline", llvm::cl::desc("Inline arcs"),
88 llvm::cl::init(true)};
89};
91 mlir::OpPassManager &pm, const ArcStateLoweringOptions &options = {});
92
93// Allocate states.
95 : mlir::PassPipelineOptions<ArcStateAllocationOptions> {
96 Option<unsigned> splitFuncsThreshold{
97 *this, "split-funcs-threshold",
98 llvm::cl::desc("Split large MLIR functions that occur above the given "
99 "size threshold"),
100 llvm::cl::ValueOptional};
101};
103 mlir::OpPassManager &pm, const ArcStateAllocationOptions &options = {});
104
105// Lower the arcs and update functions to LLVM. This pipeline lowers modules to
106// LLVM IR.
107void populateArcToLLVMPipeline(mlir::OpPassManager &pm);
108
109} // namespace circt
110
111#endif // TOOLS_ARCILATOR_PIPELINE_H
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
void populateArcStateLoweringPipeline(mlir::OpPassManager &pm, const ArcStateLoweringOptions &options={})
void populateArcOptimizationPipeline(mlir::OpPassManager &pm, const ArcOptimizationOptions &options={})
void populateArcConversionPipeline(mlir::OpPassManager &pm, const ArcConversionOptions &options={})
void populateArcPreprocessingPipeline(mlir::OpPassManager &pm, const ArcPreprocessingOptions &options={})
void populateArcToLLVMPipeline(mlir::OpPassManager &pm)
void populateArcStateAllocationPipeline(mlir::OpPassManager &pm, const ArcStateAllocationOptions &options={})
Option< bool > observeRegisters
Definition pipelines.h:50
Option< bool > shouldDedup
Definition pipelines.h:54
Option< bool > shouldMakeLUTs
Definition pipelines.h:77
Option< bool > shouldDetectResets
Definition pipelines.h:72
Option< bool > shouldDetectEnables
Definition pipelines.h:67
Option< bool > observeNamedValues
Definition pipelines.h:35
Option< bool > observeMemories
Definition pipelines.h:40
Option< unsigned > splitFuncsThreshold
Definition pipelines.h:96