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
On Jul 6, 2008, at 4:30 AM, Richard Pennington wrote:> 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? >I just fixed this. Try it now. -bw
Bill Wendling wrote:> On Jul 6, 2008, at 4:30 AM, Richard Pennington wrote: > >> 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? >> > I just fixed this. Try it now. > > -bwFixed. Thanks Bill! -Rich