Given a couple of lines of C++ code
int x = 42; int y = x, we end up with the following LLVM IR instructions:
%x = alloca i32, align 4
%y = alloca i32, align 4
store i32 42, i32* %x, align 4
%0 = load i32, i32* %x, align 4
store i32 %0, i32* %y, align 4
Is it possible to instrument the IR to perform a value trace?
What I’d like to do is stream a log of memory copies (reads then writes), such that in this example, the final instruction will produce a log event along the lines of:
"COPY: Value at copied to "?
Essentially what I’d like to do is annotate particular values, so that when these same values are encountered again later in the program, I can retrieve the annotation. I will also need the annotation to survive copies, moves, etc. This could be considered a lightweight, parallel symbolic trace performed at runtime on a very small subset of program values.
I am hoping to implement this tooling at the LLVM IR level, so that it can be useful beyond C++, but if it’s easier to instrument the CLang AST instead then I guess I can start there. Looking forward to your responses