forked from OSchip/llvm-project
parent
041604ba9f
commit
7795ea929a
|
@ -84,9 +84,22 @@ upgrading LLVM 1.9 files to LLVM 2.x syntax, but you can always use a previous
|
|||
LLVM release to do this. One nice impact of this is that the LLVM regression
|
||||
test suite no longer depends on llvm-upgrade, which makes it run faster.</p>
|
||||
|
||||
<p>LLVM 2.3 renames the LLVMBuilder and LLVMFoldingBuilder classes to
|
||||
IRBuilder.</p>
|
||||
<p>LLVM API Changes:</p>
|
||||
|
||||
<ul>
|
||||
<li>Several core LLVM IR classes have migrated to use 'FOOCLASS::Create(...)'
|
||||
instead of 'new FOOCLASS(...)' (e.g. where FOOCLASS=BasicBlock). We hope to
|
||||
standardize on FOOCLASS::Create for all IR classes in the future, but not
|
||||
all of them have been moved over yet.</li>
|
||||
<li>LLVM 2.3 renames the LLVMBuilder and LLVMFoldingBuilder classes to
|
||||
IRBuilder.</li>
|
||||
<li>MRegisterInfo was renamed to TargetRegisterInfo.</li>
|
||||
<li>The MappedFile class is gone, please use MemoryBuffer instead.</li>
|
||||
<li>The '-enable-eh' flag to LLC has been removed. Now code should encode
|
||||
whether it is safe to not generate unwind information for a function by
|
||||
tagging the Function object with the 'nounwind' attribute.</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!--=========================================================================-->
|
||||
|
@ -172,7 +185,8 @@ this project, please see its <a href="http://clang.llvm.org/">web site</a>.</p>
|
|||
|
||||
Common linkage?
|
||||
|
||||
Atomic operation support, Alpha, X86, X86-64, PowerPC. "__sync_synchronize"
|
||||
Atomic operation support, Alpha, X86, X86-64, PowerPC. "__sync_synchronize",
|
||||
"__sync_val_compare_and_swap", etc"
|
||||
|
||||
<ul>
|
||||
<li>The C and Ocaml bindings have received additional improvements. The
|
||||
|
@ -182,31 +196,6 @@ over the LLVM IR, target data, and parameter attribute lists.</li>
|
|||
|
||||
</div>
|
||||
|
||||
<!--=========================================================================-->
|
||||
<div class="doc_subsection">
|
||||
<a name="codegen">Code Generator Improvements</a>
|
||||
</div>
|
||||
|
||||
<div class="doc_text">
|
||||
|
||||
<p>We put a significant amount of work into the code generator infrastructure,
|
||||
which allows us to implement more aggressive algorithms and make it run
|
||||
faster:</p>
|
||||
|
||||
<ul>
|
||||
<li>MemOperand in the code generator: describe me!.</li>
|
||||
<li>The target-independent code generator infrastructure now uses LLVM's APInt
|
||||
class to handle integer values, which allows it to support integer types
|
||||
larger than 64 bits. Note that support for such types is also dependent on
|
||||
target-specific support. Use of APInt is also a step toward support for
|
||||
non-power-of-2 integer sizes.</li>
|
||||
<li>Several compile time speedups for code with large basic blocks.</li>
|
||||
<li>Several improvements which make llc's <tt>--view-sunit-dags</tt>
|
||||
visualization of scheduling dependency graphs easier to understand.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<!--=========================================================================-->
|
||||
<div class="doc_subsection">
|
||||
<a name="optimizer">Optimizer Improvements</a>
|
||||
|
@ -234,17 +223,69 @@ for (i = LB; i < NUB; ++i)
|
|||
LOOP_BODY
|
||||
</pre>
|
||||
</li>
|
||||
<li>LLVM includes a new <tt>memcpy</tt> optimization pass which optimizes out dead
|
||||
<tt>memcpy</tt> calls, unneeded copies of aggregates, and handles the return slot
|
||||
optimization. The LLVM optimizer now notices long sequences of consequtive
|
||||
stores and merges them into <tt>memcpy</tt>s where profitable.</li>
|
||||
|
||||
<li>LLVM includes a new <tt>memcpy</tt> optimization pass which optimizes out
|
||||
dead <tt>memcpy</tt> calls, unneeded copies of aggregates, and handles the
|
||||
return slot optimization. The LLVM optimizer now notices long sequences of
|
||||
consequtive stores and merges them into <tt>memcpy</tt>s where profitable.</li>
|
||||
|
||||
<li>Alignment detection for vector memory references and for <tt>memcpy</tt> and
|
||||
<tt>memset</tt> is now more aggressive.</li>
|
||||
|
||||
<li>The aggressive dead code elimination (ADCE) optimization has been rewritten to make
|
||||
it both faster and safer in the presence of code containing infinite loops.
|
||||
Some of its prior functionality has been factored out into the loop deletion
|
||||
pass, which <em>is</em> safe for infinite loops.</li>
|
||||
<li>The aggressive dead code elimination (ADCE) optimization has been rewritten
|
||||
to make it both faster and safer in the presence of code containing infinite
|
||||
loops. Some of its prior functionality has been factored out into the loop
|
||||
deletion pass, which <em>is</em> safe for infinite loops.</li>
|
||||
|
||||
<li>Several optimizations have been sped up, leading to faster code generation
|
||||
with the same code quality.</li>
|
||||
|
||||
<li>The 'SimplifyLibCalls' pass, which optimizes calls to libc and libm
|
||||
functions for C-based languages, has been rewritten to be a FunctionPass
|
||||
instead a ModulePass. This allows it to be run more often and to be
|
||||
included at -O1 in llvm-gcc. It was also extended to include more
|
||||
optimizations and several corner case bugs are fixed.</li>
|
||||
|
||||
<li>LLVM now includes a simple 'Jump Threading' pass, which attemps to simplify
|
||||
the conditional branches with information about predecessor blocks. This
|
||||
simplifies the control flow graph. This pass is pretty basic at this point,
|
||||
but catches some important cases and provides a foundation to build off
|
||||
of.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<!--=========================================================================-->
|
||||
<div class="doc_subsection">
|
||||
<a name="codegen">Code Generator Improvements</a>
|
||||
</div>
|
||||
|
||||
<div class="doc_text">
|
||||
|
||||
<p>We put a significant amount of work into the code generator infrastructure,
|
||||
which allows us to implement more aggressive algorithms and make it run
|
||||
faster:</p>
|
||||
|
||||
<ul>
|
||||
<li>MemOperand in the code generator: describe me!.</li>
|
||||
|
||||
<li>The target-independent code generator infrastructure now uses LLVM's APInt
|
||||
class to handle integer values, which allows it to support integer types
|
||||
larger than 64 bits. Note that support for such types is also dependent on
|
||||
target-specific support. Use of APInt is also a step toward support for
|
||||
non-power-of-2 integer sizes.</li>
|
||||
|
||||
<li>Several compile time speedups for code with large basic blocks.</li>
|
||||
|
||||
<li>Several improvements which make llc's <tt>--view-sunit-dags</tt>
|
||||
visualization of scheduling dependency graphs easier to understand.</li>
|
||||
|
||||
<li>The code generator allows targets to write patterns that generate subreg
|
||||
references directly in .td files now.</li>
|
||||
|
||||
<li><tt>memcpy</tt> lowering in the backend is more aggressive, particularly for
|
||||
<tt>memcpy</tt> calls introduced by the code generator when handling
|
||||
pass-by-value structure argument copies.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
@ -265,7 +306,11 @@ pass, which <em>is</em> safe for infinite loops.</li>
|
|||
now interoperates very well on X86-64 systems with other compilers.</li>
|
||||
|
||||
<li>The LLVM X86 backend now supports the support SSE 4.1 instruction set, and
|
||||
the llvm-gcc 4.2 front-end supports the SSE 4.1 compiler builtins.</li>
|
||||
the llvm-gcc 4.2 front-end supports the SSE 4.1 compiler builtins. Various
|
||||
generic vector operations (insert/extract/shuffle) are much more efficient
|
||||
when SSE 4.1 is enabled. The JIT automatically takes advantage of these
|
||||
instructions, but llvm-gcc must be explicitly told to use them, e.g. with
|
||||
<tt>-march=penryn</tt>.</li>
|
||||
|
||||
<li>The X86 backend now does a number of optimizations that aim to avoid
|
||||
converting numbers back and forth from SSE registers to the X87 floating
|
||||
|
@ -286,6 +331,8 @@ pass, which <em>is</em> safe for infinite loops.</li>
|
|||
|
||||
<li>128-bit integers are now supported on x86-64 targets.</li>
|
||||
|
||||
<li>The register allocator can now rematerialize PIC-base computations.</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
@ -320,7 +367,8 @@ pass, which <em>is</em> safe for infinite loops.</li>
|
|||
|
||||
<ul>
|
||||
<li>LLVM now builds with GCC 4.3.</li>
|
||||
<li>llvm2cpp tool has been folded into llc, use <tt>llc -march=cpp</tt></li>
|
||||
<li><tt>llvm2cpp</tt> tool has been folded into llc, use
|
||||
<tt>llc -march=cpp</tt></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue