[BindingsPython] Support AffineLoopOrderOpt and RemoveVariableBound APIs

This commit is contained in:
Hanchen Ye 2021-11-03 00:47:13 -05:00
parent 15177b36fb
commit 76abd5b96e
4 changed files with 32 additions and 2 deletions

View File

@ -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);

View File

@ -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();

View File

@ -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)))

View File

@ -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)