diff options
author | Bill Wendling <isanbard@gmail.com> | 2011-09-18 12:51:05 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2011-09-18 12:51:05 +0000 |
commit | 88816ec96349466c8012ab1f70f8e01a7af556ce (patch) | |
tree | 9f9dbb18889cae14015716cad8f2d57b443c4ace /docs/LinkTimeOptimization.html | |
parent | ea55c83e7f6e3a9b1081902ca50a4e12224894c0 (diff) | |
download | external_llvm-88816ec96349466c8012ab1f70f8e01a7af556ce.zip external_llvm-88816ec96349466c8012ab1f70f8e01a7af556ce.tar.gz external_llvm-88816ec96349466c8012ab1f70f8e01a7af556ce.tar.bz2 |
Fix up the formating and change llvm-gcc to clang.
Note that this example doesn't work anymore!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139999 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/LinkTimeOptimization.html')
-rw-r--r-- | docs/LinkTimeOptimization.html | 57 |
1 files changed, 32 insertions, 25 deletions
diff --git a/docs/LinkTimeOptimization.html b/docs/LinkTimeOptimization.html index b3bc481..52ab119 100644 --- a/docs/LinkTimeOptimization.html +++ b/docs/LinkTimeOptimization.html @@ -79,7 +79,7 @@ conservative escape analysis. <p>The following example illustrates the advantages of LTO's integrated approach and clean interface. This example requires a system linker which supports LTO through the interface described in this document. Here, - llvm-gcc transparently invokes system linker. </p> + clang transparently invokes system linker. </p> <ul> <li> Input source file <tt>a.c</tt> is compiled into LLVM bitcode form. <li> Input source file <tt>main.c</tt> is compiled into native object code. @@ -89,27 +89,29 @@ conservative escape analysis. extern int foo1(void); extern void foo2(void); extern void foo4(void); + --- a.c --- #include "a.h" static signed int i = 0; void foo2(void) { - i = -1; + i = -1; } static int foo3() { -foo4(); -return 10; + foo4(); + return 10; } int foo1(void) { -int data = 0; + int data = 0; -if (i < 0) { data = foo3(); } + if (i < 0) + data = foo3(); -data = data + 42; -return data; + data = data + 42; + return data; } --- main.c --- @@ -117,30 +119,35 @@ return data; #include "a.h" void foo4(void) { - printf ("Hi\n"); + printf("Hi\n"); } int main() { - return foo1(); + return foo1(); } --- command lines --- -$ llvm-gcc --emit-llvm -c a.c -o a.o # <-- a.o is LLVM bitcode file -$ llvm-gcc -c main.c -o main.o # <-- main.o is native object file -$ llvm-gcc a.o main.o -o main # <-- standard link command without any modifications +$ clang -emit-llvm -c a.c -o a.o # <-- a.o is LLVM bitcode file +$ clang -c main.c -o main.o # <-- main.o is native object file +$ clang a.o main.o -o main # <-- standard link command without any modifications </pre> - <p>In this example, the linker recognizes that <tt>foo2()</tt> is an - externally visible symbol defined in LLVM bitcode file. The linker completes - its usual symbol resolution - pass and finds that <tt>foo2()</tt> is not used anywhere. This information - is used by the LLVM optimizer and it removes <tt>foo2()</tt>. As soon as - <tt>foo2()</tt> is removed, the optimizer recognizes that condition - <tt>i < 0</tt> is always false, which means <tt>foo3()</tt> is never - used. Hence, the optimizer removes <tt>foo3()</tt>, also. And this in turn, - enables linker to remove <tt>foo4()</tt>. This example illustrates the - advantage of tight integration with the linker. Here, the optimizer can not - remove <tt>foo3()</tt> without the linker's input. - </p> + +<ul> + <li>In this example, the linker recognizes that <tt>foo2()</tt> is an + externally visible symbol defined in LLVM bitcode file. The linker + completes its usual symbol resolution pass and finds that <tt>foo2()</tt> + is not used anywhere. This information is used by the LLVM optimizer and + it removes <tt>foo2()</tt>.</li> + <li>As soon as <tt>foo2()</tt> is removed, the optimizer recognizes that condition + <tt>i < 0</tt> is always false, which means <tt>foo3()</tt> is never + used. Hence, the optimizer also removes <tt>foo3()</tt>.</li> + <li>And this in turn, enables linker to remove <tt>foo4()</tt>.</li> +</ul> + +<p>This example illustrates the advantage of tight integration with the + linker. Here, the optimizer can not remove <tt>foo3()</tt> without the + linker's input.</p> + </div> <!-- ======================================================================= --> |