This commit updates how the SparseTensorConversion pass handles NewOp. It breaks up the underlying openSparseTensor function into two parts (SparseTensorReader::create and SparseTensorReader::readSparseTensor) so that the pass can inject code for constructing lvlSizes between those two parts. Migrating the construction of lvlSizes out of the runtime and into the pass is a necessary first step toward fully supporting non-permutations. (The alternative would be for the pass to generate a FuncOp for performing the construction and then passing that to the runtime; which doesn't seem to have any benefits over the design of this commit.) And since the pass now generates the code to call these two functions, this change also removes the Action::kFromFile value from the enum used by _mlir_ciface_newSparseTensor.
agreed; being on the boundary of MLIR calling convention and nice C++ templating is really annoying sometimes ;-) it would be even nicer to be able to generate the lib "on demand" so that we only have the cases needed by the compiler (and also generate cases not covered yet)