Reland No.3: Add new hidden option -print-changed which only reports changes to IR
authorJamie Schmeiser <schmeise@ca.ibm.com>
Thu, 1 Oct 2020 17:39:02 +0000 (17:39 +0000)
committerAnh Tuyen Tran <anhtuyen@ca.ibm.com>
Thu, 1 Oct 2020 17:39:13 +0000 (17:39 +0000)
commit71124a9dbdcc76cd5efec8c148001a3f808bd769
tree6057f33ec8d55ec68f7022cba75f72de350b9c98
parente29c9d77f128e7ef9b2b5f8f09fb06b01a9dad3a
Reland No.3: Add new hidden option -print-changed which only reports changes to IR

A new hidden option -print-changed is added along with code to support
printing the IR as it passes through the opt pipeline in the new pass
manager. Only those passes that change the IR are reported, with others
only having the banner reported, indicating that they did not change the
IR, were filtered out or ignored. Filtering of output via the
-filter-print-funcs is supported and a new supporting hidden option
-filter-passes is added. The latter takes a comma separated list of pass
names and filters the output to only show those passes in the list that
change the IR. The output can also be modified via the -print-module-scope
function.

The code introduces an abstract template base class that generalizes the
comparison of IRs that takes an IR representation as template parameter.
Derived classes provide overrides that provide an event based API
for generalized reporting of IRs as they are changed in the opt pipeline
through the new pass manager.

The first of several instantiations is provided that prints the IR
in a form similar to that produced by -print-after-all with the above
mentioned filtering capabilities. This version, and the others to
follow will be introduced at the upcoming developer's conference.

Reviewed By: aeubanks (Arthur Eubanks), yrouban (Yevgeny Rouban), ychen (Yuanfang Chen), MaskRay (Fangrui Song)

Differential Revision: https://reviews.llvm.org/D86360
llvm/include/llvm/Passes/StandardInstrumentations.h
llvm/lib/IR/LegacyPassManager.cpp
llvm/lib/Passes/StandardInstrumentations.cpp
llvm/test/Other/change-printer.ll [new file with mode: 0644]