<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, Jun 8, 2015 at 1:18 PM David Chisnall <<a href="mailto:David.Chisnall@cl.cam.ac.uk">David.Chisnall@cl.cam.ac.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 8 Jun 2015, at 21:08, Eric Christopher <<a href="mailto:echristo@gmail.com" target="_blank">echristo@gmail.com</a>> wrote:<br>
><br>
> I'd rather not have it be an llvm option at all. Just construct a different set of passes...<br>
><br>
> This would also solve the problem of needing multiple sets of options to be passed to the builder. It'd be a bit of a change (i.e. having clang do the pass setup), but I think it'd be worth it to have clang be able to explicitly say which passes it wants.<br>
<br>
There’s some value in making it possible for clang and opt to run the same set of passes.  It’s also nice to be able to provide libraries that can inject passes at specific points in the optimisation sequence (this was one of the design goals of PassManagerBuilder) without needing to modify every front end that might use them.<br></blockquote><div><br></div><div>There's some point to what you say... except out of tree users are already not doing this (from what I've heard) and we're developing a lot of users even in tree that are going to need to come up with basically their own pass pipelines. See the cuda work, etc here.</div><div><br></div><div>So we're basically talking about opt and clang, which makes it fairly easy to keep up to date. We already have the injection machinery anyhow and that's only used to for some very small things (printing). Mostly what we need is the ability to use entirely different optimization pipelines for different uses and that's sadly lacking this way unless we have a "this is the lto pipeline, the general C pipeline, the C++ pipeline, the cuda pipeline, the gpu pipeline, the <insert other use> pipeline...".</div><div><br></div><div>-eric</div></div></div>