[LLVMdev] Odd problem with command line options

Richard Pennington rich at pennware.com
Sun Jul 6 04:30:37 PDT 2008


Jay Foad wrote:
>> I'm linking a program (my ellsif driver) that basically brings in most
>> of the LLVM stuff: bitcode reading, optimizations, linking, and target
>> code generation.
>>
>> All of a sudden, I'm getting the following when I run:
>> [~/elsa/ellsif] dev% ./ellsif -v test/ofmt.i test/sieve.i -time-actions
>> -O5
>> <premain>: CommandLine Error: Argument 'machine-licm' defined more than
> once!
>> ellsif: CommandLine Error: Argument 'machine-licm' defined more than once!
> 
> I recently had a similar problem when I wrote a new pass and built it into
> opt. This error message is confusing because the code that prints it, in
> GetOptionInfo() in lib/Support/CommandLine.cpp:
> 
>         cerr << ProgramName << ": CommandLine Error: Argument '"
>              << OptionNames[0] << "' defined more than once!\n";
> 
> should be printing OptionNames[i], not OptionNames[0].
> 
> (Once I had fixed this, it was easy to see what I had done wrong in the pass
> I wrote.)
> 
> Jay.
OK, I finally found my problem. (Which means I took the time to track it 
down.) At first glance I thought the above patch would work. It didn't.

What it turned out to be is:

./lib/CodeGen/LLVMTargetMachine.cpp:41
EnableLICM("machine-licm",
            cl::init(false), cl::Hidden,
            cl::desc("Perform loop-invariant code motion on machine code"));

and
./lib/CodeGen/MachineLICM.cpp:156:
static RegisterPass<MachineLICM>
X("machine-licm", "Machine Loop Invariant Code Motion");

Both are defining a command line option with the same name. I'm I the 
only person who links both at the same time? :-(

My suggestion: change the name of one or the other. I changed the first 
one to "enable-machine-licm" since it was hidden.

Does this sound OK?

-Rich




More information about the llvm-dev mailing list