The various change printers do not handle invalidated passes, even though
significant changes may be made to the IR by a pass that invalidates itself.
The reason was that the IR, being invalidated, was not available after the
pass.
Handle this by saving the module and a list of the functions in the module, on
the IR stack used by the print-changed functions, along with representations of
the functions. When a pass is invalidated, start with the saved module and create
the after representations of the now existing functions, matching and comparing them
with the saved before functions.