I'm new to llvm, but plan to implement a profile-guided link-time function inliner as part of my research. So far I've been reading through a lot of the docs and some of the source, and have a few questions that are hopefully fairly high-level and easily answered by someone who's actually gotten their hands dirty. Pointing me to a file or document is a great answer for me at this point. 1. Since I don't want to look at callsites bottom-up through the callgraph, (rather, think something like hottest-first), I believe I should be using a ModulePass. Can I get confirmation that this is indeed correct? 2. I have not seen anything to distinguish between compile-time and link-time passes. Does such a distinction exist in llvm? Is it possible to specify that a pass should only be run at link-time? If not, can I fake it (eg, command line) for the purposes of my research? 3. Is there a way for a pass to query which actual analysis was used from an analysis group? e.g., don't bother doing much if the alias analysis was BasicAA. 4. I've gotten the impression that the pass manager looks at the prereqs for each pass and then automatically determines a schedule for running the passes; i.e., there is no explicit ordering of passes spelled out in a source file somewhere. That's pretty cool, but does that mean that ordering constrains of the form "X is more effective after Y" need to be expressed by prereqs, even if there isn't a real dependence between them? How do you specify that a transformation should be done multiple times? (eg, do Y immediately before X, then do Y again later. Y could be something like constant propagation. X does not invalidate Y, and nothing after X might need Y, but it might still be beneficial to do Y again...) Thanks for pointing me in the right directions! --Paul