[BindingsPython] Support AffineLoopOrderOpt and RemoveVariableBound APIs
This commit is contained in:
parent
15177b36fb
commit
76abd5b96e
|
@ -20,6 +20,8 @@ struct MlirAffineLoopBand {
|
|||
typedef struct MlirAffineLoopBand MlirAffineLoopBand;
|
||||
|
||||
MLIR_CAPI_EXPORTED bool mlirApplyAffineLoopPerfection(MlirAffineLoopBand band);
|
||||
MLIR_CAPI_EXPORTED bool mlirApplyAffineLoopOrderOpt(MlirAffineLoopBand band);
|
||||
MLIR_CAPI_EXPORTED bool mlirApplyRemoveVariableBound(MlirAffineLoopBand band);
|
||||
MLIR_CAPI_EXPORTED bool mlirApplyLegalizeToHlscpp(MlirOperation op,
|
||||
bool topFunc);
|
||||
MLIR_CAPI_EXPORTED bool mlirApplyArrayPartition(MlirOperation op);
|
||||
|
|
|
@ -82,6 +82,16 @@ PYBIND11_MODULE(_scalehls, m) {
|
|||
return mlirApplyAffineLoopPerfection(band.get());
|
||||
});
|
||||
|
||||
m.def("apply_affine_loop_order_opt", [](PyAffineLoopBand band) -> bool {
|
||||
py::gil_scoped_release();
|
||||
return mlirApplyAffineLoopOrderOpt(band.get());
|
||||
});
|
||||
|
||||
m.def("apply_remove_variable_bound", [](PyAffineLoopBand band) -> bool {
|
||||
py::gil_scoped_release();
|
||||
return mlirApplyRemoveVariableBound(band.get());
|
||||
});
|
||||
|
||||
m.def("apply_legalize_to_hlscpp",
|
||||
[](MlirOperation op, bool top_func) -> bool {
|
||||
py::gil_scoped_release();
|
||||
|
|
|
@ -14,16 +14,32 @@
|
|||
using namespace mlir;
|
||||
using namespace scalehls;
|
||||
|
||||
MLIR_CAPI_EXPORTED bool mlirApplyAffineLoopPerfection(MlirAffineLoopBand band) {
|
||||
AffineLoopBand unwrappedBand;
|
||||
static void unwrapBand(MlirAffineLoopBand band, AffineLoopBand &unwrappedBand) {
|
||||
for (auto op = band.loopBegin; op != band.loopEnd; ++op) {
|
||||
auto loop = dyn_cast<AffineForOp>(unwrap(*op));
|
||||
assert(loop && "operation in loop band must be AffineForOp");
|
||||
unwrappedBand.push_back(loop);
|
||||
}
|
||||
}
|
||||
|
||||
MLIR_CAPI_EXPORTED bool mlirApplyAffineLoopPerfection(MlirAffineLoopBand band) {
|
||||
AffineLoopBand unwrappedBand;
|
||||
unwrapBand(band, unwrappedBand);
|
||||
return applyAffineLoopPerfection(unwrappedBand);
|
||||
}
|
||||
|
||||
MLIR_CAPI_EXPORTED bool mlirApplyAffineLoopOrderOpt(MlirAffineLoopBand band) {
|
||||
AffineLoopBand unwrappedBand;
|
||||
unwrapBand(band, unwrappedBand);
|
||||
return applyAffineLoopOrderOpt(unwrappedBand);
|
||||
}
|
||||
|
||||
MLIR_CAPI_EXPORTED bool mlirApplyRemoveVariableBound(MlirAffineLoopBand band) {
|
||||
AffineLoopBand unwrappedBand;
|
||||
unwrapBand(band, unwrappedBand);
|
||||
return applyRemoveVariableBound(unwrappedBand);
|
||||
}
|
||||
|
||||
MLIR_CAPI_EXPORTED bool mlirApplyLegalizeToHlscpp(MlirOperation op,
|
||||
bool topFunc) {
|
||||
if (auto func = dyn_cast<FuncOp>(unwrap(op)))
|
||||
|
|
|
@ -48,6 +48,8 @@ def main():
|
|||
bands = scalehls.LoopBandList(op)
|
||||
for band in bands:
|
||||
scalehls.apply_affine_loop_perfection(band)
|
||||
scalehls.apply_affine_loop_order_opt(band)
|
||||
scalehls.apply_remove_variable_bound(band)
|
||||
scalehls.apply_legalize_to_hlscpp(op.operation, True)
|
||||
scalehls.apply_array_partition(op.operation)
|
||||
|
||||
|
|
Loading…
Reference in New Issue