Just thought I'd mention this to keep other people from stubbing their toes on it... Using llvm-gcc/llvm-g++ and -emit-llvm, you need to make sure to pass -S as well, like so: ./llvm-g++ -S -emit-llvm hello.cpp not: /llvm-g++ -emit-llvm hello.cpp I'm sure that's old news to most of the people on the list, but I thought it couldn't hurt to mention it in case other people happen upon it. A question might be, can the -emit-llvm emit the llvm first before it goes into the linking phase? That way the users can at least get something on the screen of what they're looking for, or maybe a warning saying "to emit llvm, you need to pass the -S flag"? Jonathan _________________________________________________________________ It’s easy to add contacts from Facebook and other social sites through Windows Live™ Messenger. Learn how. https://www.invite2messenger.net/im/?source=TXT_EML_WLH_LearnHow
On Jun 9, 2008, at 11:32 AM, Jonathan Turner wrote:> Just thought I'd mention this to keep other people from stubbing > their toes on it... > > Using llvm-gcc/llvm-g++ and -emit-llvm, you need to make sure to > pass -S as well, like so: > > ./llvm-g++ -S -emit-llvm hello.cpp > > not: /llvm-g++ -emit-llvm hello.cpp > > I'm sure that's old news to most of the people on the list, but I > thought it couldn't hurt to mention it in case other people happen > upon it. > > A question might be, can the -emit-llvm emit the llvm first before > it goes into the linking phase? That way the users can at least get > something on the screen of what they're looking for, or maybe a > warning saying "to emit llvm, you need to pass the -S flag"?The flag usage follows standard Unix practice: without -S or -c, the end result is an executable; with one of those flags, compilation stops earlier. -c -emit-llvm will produce llvm IR in its binary format (suitable for feeding into llc). It seems clear the current interface can be confusing; you are not the first. Perhaps -emit-llvm should be renamed to indicate it does not necessarily result in emitting llvm IR? -output-format-llvm? Seems pretty ugly, maybe someone can do better.
On Monday 09 June 2008 14:52, Dale Johannesen wrote:> It seems clear the current interface can be confusing; you are not the > first. Perhaps -emit-llvm should be renamed to indicate it does not > necessarily result in emitting llvm IR? > -output-format-llvm? Seems pretty ugly, maybe someone can do better.-mcpu=llvm? Yes, it may require some mucking around with config files, but it would at least be consistent. -Dave
I'm interested in cleaning up the documentation for this, but it is in 4 different formats. From the makefile it looks like the .pod is the master. Do I need to do anything special after changing this to get it propagated elsewhere? On Jun 9, 2008, at 12:52 PMPDT, Dale Johannesen wrote:> On Jun 9, 2008, at 11:32 AM, Jonathan Turner wrote: >> Just thought I'd mention this to keep other people from stubbing >> their toes on it... >> >> Using llvm-gcc/llvm-g++ and -emit-llvm, you need to make sure to >> pass -S as well, like so: >> >> ./llvm-g++ -S -emit-llvm hello.cpp >> >> not: /llvm-g++ -emit-llvm hello.cpp >> >> I'm sure that's old news to most of the people on the list, but I >> thought it couldn't hurt to mention it in case other people happen >> upon it. >> >> A question might be, can the -emit-llvm emit the llvm first before >> it goes into the linking phase? That way the users can at least >> get something on the screen of what they're looking for, or maybe a >> warning saying "to emit llvm, you need to pass the -S flag"? > > The flag usage follows standard Unix practice: without -S or -c, > the end result is an executable; with one of those flags, > compilation stops earlier. -c -emit-llvm will produce llvm IR in > its binary format (suitable for feeding into llc). > > It seems clear the current interface can be confusing; you are not > the first. Perhaps -emit-llvm should be renamed to indicate it does > not necessarily result in emitting llvm IR? > -output-format-llvm? Seems pretty ugly, maybe someone can do better.
On Jun 9, 2008, at 11:32 AM, Jonathan Turner wrote:> > Just thought I'd mention this to keep other people from stubbing > their toes on it... > > Using llvm-gcc/llvm-g++ and -emit-llvm, you need to make sure to > pass -S as well, like so: > > ./llvm-g++ -S -emit-llvm hello.cpp > > not: /llvm-g++ -emit-llvm hello.cpp > > I'm sure that's old news to most of the people on the list, but I > thought it couldn't hurt to mention it in case other people happen > upon it. > > A question might be, can the -emit-llvm emit the llvm first before > it goes into the linking phase? That way the users can at least get > something on the screen of what they're looking for, or maybe a > warning saying "to emit llvm, you need to pass the -S flag"?This logic is follows gcc tool chain. If you want to read llvm IR then you follow the steps to get assembly text file from the compiler, but add one additional flag. $ gcc -c foo.cpp <---- gcc generates binary object file. $ gcc -S foo.cpp <---- gcc generates human readable assembly file. $ llvm-gcc --emit-llvm -c foo.cpp <---- llvm-gcc generates binary llvm IR file. $ llvm-gcc --emit-llvm -S foo.cpp <---- llvm-gcc generates human readable LLVM IR file. $ gcc foo.cpp -o foo <--- gcc generated binary object file is linked by the linker to generate final binary. $ llvm-gcc --emit-llvm foo.cpp -o foo <--- llvm-gcc generated binary LLVM IR file is linked by the linker to generate final binary. This requires the linker that accepts LLVM IR. - Devang