On 26.01.2011, at 04:39, John McCall wrote:> On Jan 24, 2011, at 10:36 AM, Hendrix_ at gmx.net wrote: >> I was using "clang -O3 -S -emit-llvm" got some very optimized output. >> >> Then I did "clang -S -emit-llvm" (without optimization) and wanted to optimized the code in a >> separate pass. The llvm program "opt" did not do anything. >> >> How can I invoke the optimizer on some un-optimized program, possibly showing the output of each optimizer stage? >> I would like to get a deeper understanding of the optimization pass. > > In addition to Sam's advice, I want to point out that clang's IR generator doesn't necessarily emit the same code when compiling for optimization and not. Most obviously, we never emit available_externally function definitions at -O0 because we assume that would just waste compile time. > > John.OK, I am looking for "LTO"/global optimization. So the function definition will remain "somewhere else" (externally), and the optimizer will find in some other module to possibly inline it later on. I am planning to concat all the *.ll (eg "link" the files) and pass them to the "global" optimizer, as "size" is a very important optimization criterium to me. After that, the back-end will be invoked. Is that a good approach? Best, Patrick
On Jan 27, 2011, at 12:02 PM, Hendrix_ at gmx.net wrote:> OK, I am looking for "LTO"/global optimization. So the function definition will remain "somewhere else" (externally), and the optimizer will find in some other module to possibly inline it later on. > > I am planning to concat all the *.ll (eg "link" the files) and pass them to the "global" optimizer, as "size" is a very important optimization criterium to me. After that, the back-end will be invoked. > Is that a good approach?How about just add -O4 on clang (or llvm-gcc) command line to get LTO optimizations ? See http://llvm.org/docs/LinkTimeOptimization.html http://llvm.org/docs/GoldPlugin.html On Mac OS X, it is a checkbox in Xcode. - Devang
On 27.01.2011, at 21:12, Devang Patel wrote:> > On Jan 27, 2011, at 12:02 PM, Hendrix_ at gmx.net wrote: > >> OK, I am looking for "LTO"/global optimization. So the function definition will remain "somewhere else" (externally), and the optimizer will find in some other module to possibly inline it later on. >> >> I am planning to concat all the *.ll (eg "link" the files) and pass them to the "global" optimizer, as "size" is a very important optimization criterium to me. After that, the back-end will be invoked. >> Is that a good approach? > > How about just add -O4 on clang (or llvm-gcc) command line to get LTO optimizations ? > See http://llvm.org/docs/LinkTimeOptimization.html > http://llvm.org/docs/GoldPlugin.html > On Mac OS X, it is a checkbox in Xcode. > - > DevangMy backend doesnt supply lto :( I am trying to emulate lto like this: clang *.c -S -emit-llvm cat *.ll > very_big.ll opt -O3 -extra-things... llc very_big.ll.optimized ('Ease of use' is not so important :) Best, Patrick
On 27.01.2011, at 21:12, Devang Patel wrote:> > On Jan 27, 2011, at 12:02 PM, Hendrix_ at gmx.net wrote: > >> OK, I am looking for "LTO"/global optimization. So the function definition will remain "somewhere else" (externally), and the optimizer will find in some other module to possibly inline it later on. >> >> I am planning to concat all the *.ll (eg "link" the files) and pass them to the "global" optimizer, as "size" is a very important optimization criterium to me. After that, the back-end will be invoked. >> Is that a good approach? > > How about just add -O4 on clang (or llvm-gcc) command line to get LTO optimizations ? > See http://llvm.org/docs/LinkTimeOptimization.html > http://llvm.org/docs/GoldPlugin.html > On Mac OS X, it is a checkbox in Xcode. > - > DevangNice to see it being support on OSX now - updating XCode right now...
On 27.01.2011, at 21:12, Devang Patel wrote:> > On Jan 27, 2011, at 12:02 PM, Hendrix_ at gmx.net wrote: > >> OK, I am looking for "LTO"/global optimization. So the function definition will remain "somewhere else" (externally), and the optimizer will find in some other module to possibly inline it later on. >> >> I am planning to concat all the *.ll (eg "link" the files) and pass them to the "global" optimizer, as "size" is a very important optimization criterium to me. After that, the back-end will be invoked. >> Is that a good approach? > > How about just add -O4 on clang (or llvm-gcc) command line to get LTO optimizations ? > See http://llvm.org/docs/LinkTimeOptimization.html > http://llvm.org/docs/GoldPlugin.html > On Mac OS X, it is a checkbox in Xcode. > - > DevangSry for spam... I already have XCode 3.2.5... what is the lto option called, or is it only available in XCode 4 preview?