-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathvpux-opt.cpp
102 lines (90 loc) · 4.22 KB
/
vpux-opt.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//
// Copyright (C) 2022-2023 Intel Corporation.
// SPDX-License-Identifier: Apache 2.0
//
#include "vpux/compiler/NPU37XX/dialect/VPURT/transforms/passes.hpp"
#include "vpux/compiler/NPU40XX/dialect/ELF/passes.hpp"
#include "vpux/compiler/NPU40XX/dialect/VPU/transforms/passes.hpp"
#include "vpux/compiler/NPU40XX/dialect/VPUIP/transforms/passes.hpp"
#include "vpux/compiler/NPU40XX/dialect/VPURT/transforms/passes.hpp"
#include "vpux/compiler/ShaveCodeGen/passes.hpp"
#include "vpux/compiler/conversion.hpp"
#include "vpux/compiler/dialect/ELFNPU37XX/passes.hpp"
#include "vpux/compiler/dialect/IE/transforms/passes.hpp"
#include "vpux/compiler/dialect/VPU/IR/attributes.hpp"
#include "vpux/compiler/dialect/VPU/transforms/passes.hpp"
#include "vpux/compiler/dialect/VPUASM/passes.hpp"
#include "vpux/compiler/dialect/VPUIP/transforms/passes.hpp"
#include "vpux/compiler/dialect/VPUIPDPU/passes.hpp"
#include "vpux/compiler/dialect/VPUMI37XX/passes.hpp"
#include "vpux/compiler/dialect/VPUMI40XX/passes.hpp"
#include "vpux/compiler/dialect/VPURT/IR/ops.hpp"
#include "vpux/compiler/dialect/VPURT/transforms/passes.hpp"
#include "vpux/compiler/dialect/VPURegMapped/passes.hpp"
#include "vpux/compiler/dialect/const/passes.hpp"
#include "vpux/compiler/dialect/core/transforms/passes.hpp"
#include "vpux/compiler/init.hpp"
#include "vpux/compiler/interfaces_registry.hpp"
#include "vpux/compiler/passes_register.hpp"
#include "vpux/compiler/pipelines_register.hpp"
#include "vpux/compiler/tools/options.hpp"
#include "vpux/utils/core/error.hpp"
#include <mlir/Dialect/Func/Transforms/Passes.h>
#include <mlir/Dialect/Linalg/Passes.h>
#include <mlir/Dialect/MemRef/Transforms/Passes.h>
#include <mlir/Tools/mlir-opt/MlirOptMain.h>
#include <mlir/Transforms/Passes.h>
#include <cstdlib>
#include <iostream>
int main(int argc, char* argv[]) {
try {
// TODO: need to rework this unconditional replacement for dummy ops
// there is an option for vpux-translate we can do it in the same way
// Ticket: E#50937
auto registry = vpux::createDialectRegistry(vpux::DummyOpMode::ENABLED, /*enableExtraShapeBoundOps=*/true);
const auto hwSpecificRegistration = [&](vpux::StringRef helpHeader) {
const auto archKind = vpux::parseArchKind(argc, argv, helpHeader);
const auto pipelineRegistry = vpux::createPipelineRegistry(archKind);
pipelineRegistry->registerPipelines();
const auto passesRegistry = vpux::createPassesRegistry(archKind);
passesRegistry->registerPasses();
auto interfacesRegistry = vpux::createInterfacesRegistry(archKind);
interfacesRegistry->registerInterfaces(registry);
};
vpux::Core::registerPasses();
vpux::Const::registerPasses();
vpux::IE::registerPasses();
vpux::IE::registerIEPipelines();
vpux::VPU::registerPasses();
vpux::VPU::registerVPUPipelines();
vpux::VPUIP::registerPasses();
vpux::VPUIP::registerVPUIPPipelines();
vpux::VPURT::registerVPURTPipelines();
vpux::VPURT::registerPasses();
vpux::ELFNPU37XX::registerPasses();
vpux::ELF::registerPasses();
vpux::VPUMI37XX::registerPasses();
vpux::VPUMI40XX::registerPasses();
vpux::VPUASM::registerPasses();
vpux::VPUIPDPU::registerPasses();
vpux::ShaveCodeGen::registerPasses();
vpux::registerConversionPasses();
vpux::registerConversionPipelines();
mlir::registerTransformsPasses();
mlir::func::registerFuncPasses();
mlir::memref::registerResolveShapedTypeResultDims();
mlir::registerConvertElementwiseToLinalg();
mlir::registerLinalgBufferize();
mlir::registerLinalgGeneralization();
mlir::registerLinalgNamedOpConversion();
mlir::registerLinalgInlineScalarOperands();
mlir::registerLinalgLowerToLoops();
mlir::registerLinalgLowerToParallelLoops();
mlir::registerLinalgLowerToAffineLoops();
return mlir::asMainReturnCode(
mlir::MlirOptMain(argc, argv, "NPU Optimizer Testing Tool", registry, hwSpecificRegistration));
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
return EXIT_FAILURE;
}
}