-
In addition to a huge array of bug fixes and minor performance tweaks, the
-LLVM 2.4 optimizers support a few major enhancements:
+
In addition to a huge array of bug fixes and minor performance tweaks, this
+release includes a few major enhancements and additions to the optimizers:
-- GVN now does local PRE?
+- The Global Value Numbering (GVN) pass now does local Partial Redundancy
+Elimination (PRE) to eliminate some partially redundant expressions in cases
+where doing so won't grow code size.
-- Matthijs' Dead argument elimination rewrite
-
-- Old-ADCE used control dependence and deleted output-free infinite loops.
-Added a new Loop deletion pass (for deleting output free provably-finite loops)
-and rewrote ADCE to be simpler faster, and not need control dependence.
-
-- SparsePropagation framework for lattice-based dataflow solvers.
-
-- Tail duplication was removed from the standard optimizer sequence.
-
-- Various helper functions (ComputeMaskedBits, ComputeNumSignBits, etc) were
-pulled out of instcombine and put into a new ValueTracking.h file, where they
-can be reused by other passes.
+- LLVM 2.4 includes a new loop deletion pass (which removes output-free
+provably-finite loops) and a rewritten Aggressive Dead Code Elimination (ADCE)
+pass that no longer uses control dependence information. These changes speed up
+the optimizer and also prevents it from deleting output-free infinite
+loops.
- The new AddReadAttrs pass works out which functions are read-only or
read-none (these correspond to 'pure' and 'const' in C) and marks them
with the appropriate attribute.
+
+- LLVM 2.4 now includes a new SparsePropagation framework, which makes it
+trivial to build lattice-based dataflow solvers that operate over LLVM IR. Using
+this interface means that you just define objects to represent your lattice
+values and the transfer functions that operate on them. It handles the
+mechanics of worklist processing, liveness tracking, handling PHI nodes,
+etc.
+
+- Various helper functions (ComputeMaskedBits, ComputeNumSignBits, etc) were
+pulled out of the Instruction Combining pass and put into a new
+ValueTracking.h header, where they can be reused by other passes.
+
+- The tail duplication pass has been removed from the standard optimizer
+sequence used by llvm-gcc. This pass still exists, but the benefits it once
+provided are now achieved by other passes.
+
@@ -314,21 +325,41 @@ which allows us to implement more aggressive algorithms and make it run
faster: