[llvm-dev] scheduler options documentation?

Matthias Braun via llvm-dev llvm-dev at lists.llvm.org
Mon Sep 12 11:38:06 PDT 2016


LLVM targets have other options available to influence the scheduling: From enabling the machine scheduler at all (see TargetSubtargetInfo), to providing a SchedPolicy implementation, providing a scheduling model up to using the MachineScheduler framework to develop your own variant. MachineScheduler.h has a bunch of documentation at the beginning.

- Matthias

> On Sep 12, 2016, at 11:33 AM, Phil Tomson <phil.a.tomson at gmail.com> wrote:
> 
> 
> 
> On Mon, Sep 12, 2016 at 11:26 AM, Matthias Braun <mbraun at apple.com <mailto:mbraun at apple.com>> wrote:
> I think those should be considered internal options for (llvm codegen) developers, a normal compiler user should not need to use any of them.
> 
> We're targetting a new processor. I'm trying to get IPC numbers up a bit by trying to figure out how to improve scheduling for our particular architecture. If it turns out that some of these options give us improvements I can have them be 'on' by default for our target.
> 
>  
> Of course you can look around the llvm sourcecode (esp. in lib/CodeGen/MachineScheduler.cpp) and see what cl::opt options are available and how they affect the scheduler operation.
> 
> In case of the MachineScheduler all settings are the same regardless of the optimisation level, however the MachineScheduler is disabled as a whole in TargetPassConfig.cpp when optimized regalloc is not enabled (which I believe happens for everything except -O0).
> 
> - Matthias
> 
>> On Sep 12, 2016, at 10:41 AM, Phil Tomson via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>> 
>> As a follow on question: which of these options are already enabled when compiling with -O3?
>> 
>> Phil
>> 
>> On Mon, Sep 12, 2016 at 10:37 AM, Phil Tomson <phil.a.tomson at gmail.com <mailto:phil.a.tomson at gmail.com>> wrote:
>> I see that there are several options to influence instruction scheduling, but there doesn't seem to be a lot of information about what they do, for example:
>> 
>> -misched-topdown -misched-bottomup
>> 
>> The description in MachineScheduler.cpp says:
>> 
>> "Force top-down list scheduling" and "Force bottom-up list scheduling"
>> 
>> Which isn't too helpful - where might I want to use these? Under what conditions might they improve an instruction schedule?
>> 
>> Similar questions for the instruction scheduler strategies: 
>> 
>> -misched=(default, converge,
>> ilpmax, ilpmin, or shuffle)
>> 
>> And for the analysis heuristics: 
>> 
>> -misched-cluster,
>> -misched-cyclicpath, -misched-regpressure, and -misched-
>> fusion
>> 
>> Are these things mutually exclusive or can they be combined? What combination will give the most rigorous analysis and improve scheduling (at the cost of longer runtime of llc)
>> 
>> Phil
>> 
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160912/e2de9364/attachment.html>


More information about the llvm-dev mailing list