LVIPrinter pass was previously relying on the LVICache. We now directly call the
the LVI functions which solves the value if the LVI information is not already
available in the cache. This has 2 benefits over the printing of LVI cache:
- higher coverage (i.e. catches errors) in LVI code paths.
- relies on the core functions, and not dependent on the LVI cache (which may
be scrapped at some point).
It would still catch any cache invalidation errors, since we first go through
the cache.
*Thanks to Philip for this suggestion, instead of relying on LVI cache for printing*