Duplication of the driver between C++ and Python

Yes, this part had been a pain point in figuring out which part of the compilation pipeline is being run.

Regarding, the lower, I think C++ version is not run (maybe not anywhere in the tvm compilation – correct me if I am wrong) at the minute because there is a check for the registered python ffi of lower(…).

Moreover, I found out that some relay passes (e.g. foldconstants) rely on the interpreter (which runs the JIT() of compile engine) to build and execute part of the artifacts in the process of relay optimization pipeline. What is interesting is that JIT() of compile engine uses the driver/build_module.py’s build though subsequently relay.build(…) will invoke the C++ version of build in driver_api.cc later on.

Do we have a reason for the existence of both ? Moreover, is there an assumption in the design these two build(IRModule, TE) → runtime.Module functionality to be kept implicitly identical ?

also cc : @csullivan @jroesch