[Instrumentor] Add Instrumentor pass (#138958)
This commit adds the basic infrastructure for the Instrumentor pass, which
allows instrumenting code in a simple and customizable way. This commit
adds support for instrumenting load and store instructions. The
Instrumentor can be configured with a JSON file that describes what
should be instrumented, or can be used programmatically from another
pass.
The default JSON config file can be found in:
`llvm/test/Instrumentation/Instrumentor/default_config.json`. More
information about Instrumentor in the
[RFC](https://discourse.llvm.org/t/rfc-introducing-instrumentor-easily-customizable-code-instrumentation/86020).
This is only a squash commit of several contributions to the
Instrumentor. The authors and contributors of this pass are:
- Johannes Doerfert @jdoerfert
- Kevin Sala @kevinsala
- Ivan Radanov Ivanov @ivanradanov
- Ethan Luis McDonough @EthanLuisMcDonough
---------
Co-authored-by: Johannes Doerfert <johannes@jdoerfert.de>
Co-authored-by: Ivan Radanov Ivanov <ivanov.i.aa@m.titech.ac.jp>
Co-authored-by: Ethan Luis McDonough <ethanluismcdonough@gmail.com>