<div dir="ltr"><br><br><div class="gmail_quote">On Thu, Mar 5, 2015 at 12:35 AM Owen Anderson <<a href="mailto:resistor@mac.com">resistor@mac.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">So, I’m not sure I like the direction these changes are going.  For low-latency compilation use cases, every additional pass scheduled incurs non-trivial extra compilation time costs.  My uses, which fit that scenario, are specifically tuned *not* to schedule passes that are not needed for specific subtargets, even when they would be no-ops, and it would a significant regression compile-time regression for us to lose that capability.<br>
<br></blockquote><div><br></div><div>I think the best bet for you would be to have a custom manager for each subtarget then ala the way you could create a target machine that is arm or thumb out of the same directory. That would work for your needs I imagine while keeping this separated.</div><div><br></div><div>Another option is that since your need is a fairly... narrow compilation strategy that you could, instead of using the TargetMachine::getSubtarget you could define your own that happens to always return the same subtarget and use that in constructing your passes. Just because the generalized TargetMachine is going away doesn't mean that you can't implement your own if all you really have is a single subtarget at a time.</div><div><br></div><div>I basically mention this in order of personal preference, I think both will work for you just fine, though I've not actually prototyped them up.</div><div><br></div><div>-eric</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
—Owen<br>
<br>
> On Mar 4, 2015, at 4:28 PM, Eric Christopher <<a href="mailto:echristo@gmail.com" target="_blank">echristo@gmail.com</a>> wrote:<br>
><br>
> Author: echristo<br>
> Date: Wed Mar  4 18:28:55 2015<br>
> New Revision: 231324<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=231324&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=231324&view=rev</a><br>
> Log:<br>
> Remove the conditional addition of the execution dependency fixing<br>
> pass from the ARM backend as the pass itself will detect any use<br>
> of the appropriate register class.<br>
><br>
> Modified:<br>
>    llvm/trunk/lib/Target/ARM/<u></u>ARMTargetMachine.cpp<br>
><br>
> Modified: llvm/trunk/lib/Target/ARM/<u></u>ARMTargetMachine.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp?rev=231324&r1=231323&r2=231324&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/Target/<u></u>ARM/ARMTargetMachine.cpp?rev=<u></u>231324&r1=231323&r2=231324&<u></u>view=diff</a><br>
> ==============================<u></u>==============================<u></u>==================<br>
> --- llvm/trunk/lib/Target/ARM/<u></u>ARMTargetMachine.cpp (original)<br>
> +++ llvm/trunk/lib/Target/ARM/<u></u>ARMTargetMachine.cpp Wed Mar  4 18:28:55 2015<br>
> @@ -358,9 +358,7 @@ void ARMPassConfig::addPreRegAlloc(<u></u>) {<br>
> void ARMPassConfig::addPreSched2() {<br>
>   if (getOptLevel() != CodeGenOpt::None) {<br>
>     addPass(<u></u>createARMLoadStoreOptimization<u></u>Pass());<br>
> -<br>
> -    if (getARMSubtarget().hasNEON())<br>
> -      addPass(<u></u>createExecutionDependencyFixPa<u></u>ss(&ARM::DPRRegClass));<br>
> +    addPass(<u></u>createExecutionDependencyFixPa<u></u>ss(&ARM::DPRRegClass));<br>
>   }<br>
><br>
>   // Expand some pseudo instructions into multiple instructions to allow<br>
><br>
><br>
> ______________________________<u></u>_________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvm-commits</a><br>
<br>
</blockquote></div></div>