Profiling in LLVM

Hi all,

I plan to improve the existing profiling support in LLVM for my master thesis. The goal is threefold:
a) Implement more efficient instrumentation along the lines of [Ball94].
b) Implement and experiment with heuristic estimators as proposed in [Wu94].
c) Make profile information available in the backend machinery. We have a preliminary patch that achieves this by maintaining profiles during instruction selection and CFG modifications. This might be useful for several backend passes such as register allocation or if-conversion.

We also plan to slightly modify the internal data structures in order to allow for more efficient lookups. If the implementation proofs to be useful and there is general interest in the community, I would like to contribute the patches back to the official repository. If you have any comments, experiences, or advice on that matter, I would be happy to hear them upfront.

Best Regards,

Andreas Neustifter
Vienna University of Technology

[Ball94] Thomas Ball, James R. Larus:
"Optimally profiling and tracing programs"
ACM TOPLAS, Volume 16, Issue 4, 1994

[Wu94] Youfeng Wu, James R. Larus:
Procedings of the 27th ACM International Symposium on Microarchitecture, 1994