Provide an option to specify optimization level when creating an
ExecutionEngine via the MLIR JIT Python binding. Not only is the
specified optimization level used for code generation, but all LLVM
optimization passes at the optimization level are also run prior to
machine code generation (akin to the mlir-cpu-runner tool).
Default opt level continues to remain at level two (-O2).
Contributions in part from Prashant Kumar <prashantk@polymagelabs.com> as well.
I think as a general rule, we're not trying to carry forward unsigned into new APIs. For a general quantity (not on the order of pointer/system memory sized), prefer int. Here and elsewhere in this patch.