77
88#include " mlir/Dialect/Arithmetic/IR/Arithmetic.h"
99#include " mlir/Dialect/MemRef/IR/MemRef.h"
10- #include " mlir/Dialect/MemRef/Transforms/Passes.h"
11- #include " mlir/Dialect/Affine/Passes.h"
1210#include " mlir/Dialect/Func/IR/FuncOps.h"
1311
14- #include " imex/Dialect/PTensor/IR/PTensorOps.h"
15-
1612#include " mlir/Pass/Pass.h"
1713#include " mlir/Pass/PassManager.h"
18- #include " mlir/Transforms/Passes.h"
14+ // #include "mlir/Transforms/Passes.h"
1915#include " llvm/ADT/Twine.h"
16+
2017#include " mlir/Pass/PassRegistry.h"
18+ #include " mlir/Conversion/Passes.h"
19+ #include " mlir/Dialect/Affine/Passes.h"
20+ #include " mlir/Dialect/Arithmetic/Transforms/Passes.h"
21+ // #include "mlir/Dialect/Async/Passes.h"
22+ #include " mlir/Dialect/Bufferization/Transforms/Passes.h"
23+ #include " mlir/Dialect/Func/Transforms/Passes.h"
24+ // #include "mlir/Dialect/GPU/Transforms/Passes.h"
25+ // #include "mlir/Dialect/LLVMIR/Transforms/Passes.h"
26+ #include " mlir/Dialect/Linalg/Passes.h"
27+ #include " mlir/Dialect/MemRef/Transforms/Passes.h"
28+ // #include "mlir/Dialect/NVGPU/Passes.h"
29+ #include " mlir/Dialect/SCF/Transforms/Passes.h"
30+ // #include "mlir/Dialect/SPIRV/Transforms/Passes.h"
31+ #include " mlir/Dialect/Shape/Transforms/Passes.h"
32+ // #include "mlir/Dialect/SparseTensor/Pipelines/Passes.h"
33+ // #include "mlir/Dialect/SparseTensor/Transforms/Passes.h"
34+ #include " mlir/Dialect/Tensor/Transforms/Passes.h"
35+ // #include "mlir/Dialect/Tosa/Transforms/Passes.h"
36+ // #include "mlir/Dialect/Transform/Transforms/Passes.h"
37+ // #include "mlir/Dialect/Vector/Transforms/Passes.h"
38+ #include " mlir/Transforms/Passes.h"
39+
2140
2241#include " mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h"
2342#include " mlir/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.h"
2645#include " mlir/ExecutionEngine/OptUtils.h"
2746#include " mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h"
2847
29- #include < mlir/InitAllDialects.h>
30- #include < mlir/InitAllPasses.h>
48+ #include < imex/Dialect/PTensor/IR/PTensorOps.h>
3149#include < imex/InitIMEXDialects.h>
3250#include < imex/InitIMEXPasses.h>
3351
@@ -213,11 +231,18 @@ void DepManager::deliver(intptr_t * output, uint64_t sz)
213231}
214232
215233int JIT::run (::mlir::ModuleOp & module , const std::string & fname, std::vector<void *> & inp, intptr_t * out)
216- {
234+ {
235+ // lower to LLVM
217236 if (::mlir::failed (_pm.run (module )))
218237 throw std::runtime_error (" failed to run pass manager" );
219238
220- module .dump ();
239+ const char * v_ = getenv (" DDPT_VERBOSE" );
240+ if (v_) {
241+ std::string v (v_);
242+ if (v == " 0" || v == " n" || v == " N" || v == " off" || v == " OFF" ) v_ = nullptr ;
243+ }
244+ if (v_) module .dump ();
245+
221246 // An optimization pipeline to use within the execution engine.
222247 auto optPipeline = ::mlir::makeOptimizingTransformer (/* optLevel=*/ 0 ,
223248 /* sizeLevel=*/ 0 ,
@@ -231,9 +256,6 @@ int JIT::run(::mlir::ModuleOp & module, const std::string & fname, std::vector<v
231256 assert (maybeEngine && " failed to construct an execution engine" );
232257 auto &engine = maybeEngine.get ();
233258
234- const char * fn = getenv (" DDPT_FN" );
235- if (!fn) fn = fname.c_str ();
236-
237259 llvm::SmallVector<void *> args;
238260 // first arg must be the result ptr
239261 args.push_back (&out);
@@ -244,7 +266,7 @@ int JIT::run(::mlir::ModuleOp & module, const std::string & fname, std::vector<v
244266 }
245267
246268 // Invoke the JIT-compiled function.
247- if (engine->invokePacked (std::string (" _mlir_ciface_" ) + fn , args)) {
269+ if (engine->invokePacked (std::string (" _mlir_ciface_" ) + fname. c_str () , args)) {
248270 ::llvm::errs () << "JIT invocation failed\n";
249271 throw std::runtime_error (" JIT invocation failed" );
250272 }
@@ -281,7 +303,24 @@ JIT::JIT()
281303void init ()
282304{
283305 assert (sizeof (intptr_t ) == sizeof (void *));
284- ::mlir::registerAllPasses ();
306+ // ::mlir::registerAllPasses();
307+ ::mlir::registerSCFPasses ();
308+ ::mlir::registerSCFToControlFlowPass ();
309+ ::mlir::registerShapePasses ();
310+ ::mlir::registerConvertShapeToStandardPass ();
311+ ::mlir::tensor::registerTensorPasses ();
312+ ::mlir::registerLinalgPasses ();
313+ ::mlir::func::registerFuncPasses ();
314+ ::mlir::registerConvertFuncToLLVMPass ();
315+ ::mlir::bufferization::registerBufferizationPasses ();
316+ ::mlir::arith::registerArithmeticPasses ();
317+ ::mlir::registerAffinePasses ();
318+ ::mlir::registerConvertMemRefToLLVMPass ();
319+ ::mlir::registerCanonicalizerPass ();
320+ ::mlir::registerConvertAffineToStandardPass ();
321+ ::mlir::memref::registerMemRefPasses ();
322+ ::mlir::registerReconcileUnrealizedCastsPass ();
323+
285324 ::imex::registerAllPasses ();
286325
287326 // ::mlir::DialectRegistry registry;
0 commit comments