[LLVMdev] how to set -pre-ra-sched from code?

Paul Melis llvm at assumetheposition.nl
Tue Apr 20 13:02:30 PDT 2010

Hi Andrew,

On 04/19/10 14:27, Andrew Friedley wrote:
> Sorry for responding to my own message but I would really appreciate 
> some help with this.
> Looking through the documentation again this morning I noticed that 
> setSchedulingPreference is a protected method of LLVMTargetLowering, so 
> it looks like it's not something I can call directly anyway. 
> Furthermore it's only called from one place with a hard-coded value for 
> any particular platform.
> Andrew Friedley wrote:
>> Sanjiv Gupta wrote:
>>> On Wed, 2010-04-14 at 11:33 -0400, Andrew Friedley wrote:
>>>> I've found that I need to set the -pre-RA-sched parameter when using 
>>>> tools like llc to get the kind of instruction scheduling I want.
>>>> However I'm normally generating and running code on the fly using the 
>>>> JIT, and can't figure out how to set the -pre-RA-sched option anywhere 
>>>> other than on the command line for the provided tools.  So what code 
>>>> would I write (or where is the API?) to change the pre-regalloc 
>>>> instruction scheduler algorithm?
>>> Does this thing below in TargetLowering help?
>>> /// setSchedulingPreference - Specify the target scheduling preference.
>>>   void setSchedulingPreference(SchedPreference Pref) 
>> Thanks!  That doesn't look like what -pre-RA-sched eventually maps to, 
>> but it looks like the switch I want to change.  Pardon my ignorance, but 
>> I have no idea how I'm supposed to get to a point where I can call this 
>> when all I have is a module and an execution engine.
>> Better yet, how would I go about figuring this out from the 
>> documentation?  I'm having no luck at all finding these things.

You can programmatically pass command-line options using something like:

#include "llvm/Support/CommandLine.h"

int main()


    char *opts[] = {

    cl::ParseCommandLineOptions(4, opts, "Blah");


Could be that you need to include more headers, as I cut this piece from
my own more extensive code.


More information about the llvm-dev mailing list