19
19
#include " mlir/Dialect/OpenMP/OpenMPDialect.h"
20
20
#include " mlir/Dialect/SCF/IR/SCF.h"
21
21
#include " mlir/Dialect/Tensor/IR/Tensor.h"
22
+ #include " mlir/IR/DialectRegistry.h"
22
23
#include " mlir/InitAllPasses.h"
23
24
#include " mlir/Pass/PassManager.h"
24
25
#include " mlir/Support/LogicalResult.h"
32
33
namespace mlir ::gc {
33
34
34
35
// linalg + linalgX + tensor
35
- void populateFrontendPasses (mlir::PassManager &pm) {
36
+ void populateFrontendPasses (mlir::OpPassManager &pm) {
36
37
pm.addPass (createConvertOneDNNGraphToLinalg ());
37
38
}
38
39
39
40
// scf + arith + math + vector + tensor + linalg.brgemm + tensor.pack/unpack
40
- void populateTensorPasses (mlir::PassManager &pm) {
41
+ void populateTensorPasses (mlir::OpPassManager &pm) {
41
42
// todo: padding propagation pass
42
43
// todo: layout propagation pass
43
44
// todo: tensor constant propagation pass
@@ -51,7 +52,7 @@ void populateTensorPasses(mlir::PassManager &pm) {
51
52
}
52
53
53
54
// scf + arith + math + vector + tensor + linalg.brgemm
54
- void populateVectorPasses (mlir::PassManager &pm) {
55
+ void populateVectorPasses (mlir::OpPassManager &pm) {
55
56
// Do promotion for math / arith ops
56
57
pm.addNestedPass <func::FuncOp>(math::createMathLegalizeToF32 ());
57
58
// sourceTypeStrs can be extended
@@ -69,7 +70,7 @@ void populateVectorPasses(mlir::PassManager &pm) {
69
70
}
70
71
71
72
// scf + arith + math + vector + memref + linalg.brgemm
72
- void populateBufferizationPasses (mlir::PassManager &pm) {
73
+ void populateBufferizationPasses (mlir::OpPassManager &pm) {
73
74
bufferization::OneShotBufferizationOptions options;
74
75
options.bufferizeFunctionBoundaries = true ;
75
76
options.setFunctionBoundaryTypeConversion (
@@ -88,7 +89,7 @@ void populateBufferizationPasses(mlir::PassManager &pm) {
88
89
}
89
90
90
91
// scf + arith + math + vector + memref + func/microkernel
91
- void populateMicroKernelPasses (mlir::PassManager &pm) {
92
+ void populateMicroKernelPasses (mlir::OpPassManager &pm) {
92
93
// todo: ConvertLinalgToMicrokernel pass
93
94
// todo: CleanupInvalidMicrokernel pass
94
95
// todo: InvariantMicrokernelMotion pass
@@ -98,13 +99,13 @@ void populateMicroKernelPasses(mlir::PassManager &pm) {
98
99
// todo: DispatchMicrokernel
99
100
}
100
101
101
- void populateCPURuntimePasses (mlir::PassManager &pm) {
102
+ void populateCPURuntimePasses (mlir::OpPassManager &pm) {
102
103
// todo: flatten nested parallel pass to support coarse-grain usion
103
104
// remove this pass after we add FlattenNestedParallel
104
105
pm.addPass (createConvertSCFToOpenMPPass ());
105
106
}
106
107
107
- void populateLoweringToLLVMPasses (mlir::PassManager &pm) {
108
+ void populateLoweringToLLVMPasses (mlir::OpPassManager &pm) {
108
109
pm.addPass (createFinalizeMemRefToLLVMConversionPass ());
109
110
pm.addPass (createConvertSCFToCFPass ());
110
111
pm.addPass (cpuruntime::createCPURuntimeToLLVM ());
@@ -120,13 +121,13 @@ void populateLoweringToLLVMPasses(mlir::PassManager &pm) {
120
121
pm.addPass (createSymbolDCEPass ());
121
122
}
122
123
123
- void populateLLVMPasses (mlir::PassManager &pm) {
124
+ void populateLLVMPasses (mlir::OpPassManager &pm) {
124
125
pm.addPass (memref::createExpandOpsPass ());
125
126
pm.addPass (memref::createExpandStridedMetadataPass ());
126
127
populateLoweringToLLVMPasses (pm);
127
128
}
128
129
129
- void populateCPUPipeline (mlir::PassManager &pm) {
130
+ void populateCPUPipeline (mlir::OpPassManager &pm) {
130
131
// front-end, oneDNN graph dialect
131
132
populateFrontendPasses (pm);
132
133
// middle-end, LinalgX/Linalg/tensor dialects
@@ -144,24 +145,10 @@ void populateCPUPipeline(mlir::PassManager &pm) {
144
145
populateLLVMPasses (pm);
145
146
}
146
147
147
- #define GEN_PASS_DEF_GCCPUPIPELINE
148
- #include " gc/Transforms/Passes.h.inc"
149
- namespace {
150
-
151
- class GCCPUPipeline : public impl ::GCCPUPipelineBase<GCCPUPipeline> {
152
- public:
153
- friend struct PassHelper ;
154
- using impl::GCCPUPipelineBase<GCCPUPipeline>::GCCPUPipelineBase;
155
- void runOnOperation () final {
156
- auto op = getOperation ();
157
- PassManager pm{op->getContext ()};
158
- populateCPUPipeline (pm);
159
- // TODO(longsheng): add a option to
160
- // disable threading and enable pm.enableIRPrinting();
161
- if (failed (pm.run (op)))
162
- signalPassFailure ();
163
- }
164
- };
148
+ void registerCPUPipeline () {
149
+ PassPipelineRegistration<>(" gc-cpu-pipeline" ,
150
+ " The CPU pipeline for Graph Compiler" ,
151
+ populateCPUPipeline);
152
+ }
165
153
166
- } // namespace
167
154
} // namespace mlir::gc
0 commit comments