[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[] = {
"dummy",
"-fast-isel",
"-fast-isel-verbose",
"-pre-RA-sched=fast",
};
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.
HTH,
Paul
More information about the llvm-dev
mailing list