-
In addition to a large array of bug fixes and minor performance tweaks, this
+
In addition to a large array of minor performance tweaks and bug fixes, this
release includes a few major enhancements and additions to the optimizers:
-- SRoA improvements for vector unions, memset, arbitrary weird bitfield accesses etc. It now produces "strange" sized integers.
-- Inliner reuse stack space when inlining arrays?
-- Enabled GVN Load PRE.
-- New Static Single Information (SSI) construction pass (not used by anything yet, experimental).
-- LSR promotes int induction variables to 64-bit on 64-bit targets, major perf boost for numerical code.
-- LSR now analyzes pointer expressions (e.g. getelementptrs), not just integers.
+- The Scalar Replacement of Aggregates
+ pass has many improvements that allow it to better promote vector unions,
+ variables which are memset, and much more strange code that can happen do
+ to bitfield accesses to register operations. An interesting change is that
+ it now produces "unusual" integer sizes (like i1704) in some cases and lets
+ other optimizers clean things up.
+- The Loop Strength Reduction pass now
+ promotes small integer induction variables to 64-bit on 64-bit targets,
+ which provides a major performance boost many for numerical code. It also
+ promotes shorts to int on 32-bit hosts, etc. LSR now also analyzes pointer
+ expressions (e.g. getelementptrs), as well as integers.
+- The GVN pass now eliminates partial
+ redundancies of loads in simple cases.
+- The Inliner now reuses stack space when
+ inlining similiar arrays from multiple callees into one caller.
+- LLVM includes a new experimental Static Single Information (SSI)
+ construction pass.
@@ -559,34 +570,43 @@ it run faster:
-- -asm-verbose now prints location info (with -g) and loop nest info.
+- The llc -asm-verbose option (exposed from llvm-gcc and clang as
+ -fverbose-asm) now adds a lot of useful information in comments to
+ the generated .s file. This information includes location information (if
+ built with -g) and loop nest information.
+- The code generator now supports a new MachineVerifier pass which is useful
+ for finding bugs in targets and ccodegen passes.
+- The Machine LICM is now enabled by default. It hoists instructions out of
+ loops (such as constant pool loads, loads from readonly stubs, vector
+ constant synthesization code, etc) and is currently configured to only do so
+ when the hoisted operation can be rematerialized.
+- The Machine Sinking pass is now enabled by default. This pass moves
+ side-effect free operations down the CFG so that they are executed on fewer
+ paths through a function.
- Tblgen now supports multiclass inheritance and a number of new string and
list operations like !(subst), !(foreach), !car, !cdr, !null, !if, !cast.
These make the .td files more expressive and allow more aggressive factoring
of duplication across instruction patterns.
-- New MachineVerifier pass.
-- Machine LICM, hoists things like constant pool loads, loads from readonly stubs, vector constant synthesization code, etc.
-- Machine Sinking
-- target-specific intrinsics (r63765)
+- Target-specific intrinsics can now be added without having to hack VMCore to
+ add them. This makes it easier to maintain out-of-tree targets.
- Regalloc improvements for commuting, various spiller peephole optimizations, cross-class coalescing.
- llc -enable-value-prop, propagation of value info (sign/zero ext info) from one MBB to another
- Regalloc hints for allocation stuff: Evan r73381/r73671. Finished/enabled?
- Stack slot coloring for register spills (denser stack frames)
- SelectionDAGS: New BuildVectorSDNode (r65296), and ISD::VECTOR_SHUFFLE (r69952 / PR2957)
-- Experimental support for shrink wrapping support in PEI.
-- Experimental support for writing ELF .o files directly from the compiler,
- it works well for many simple C testcases, but doesn't support exception
- handling, debug info, inline assembly, etc.
+- The Prolog/Epilog Insertion Pass now has experimental support for performing
+ the "shrink wrapping" optimization, which moves spills and reloads around in
+ the CFG to avoid doing saves on paths that don't need them.
+- LLVM includes new experimental support for writing ELF .o files directly
+ from the compiler. It works well for many simple C testcases, but doesn't
+ support exception handling, debug info, inline assembly, etc.
- Targets can now specify register allocation hints through
- MachineRegisterInfo:: setRegAllocationHint. A regalloc hint consists 1) hint
- type, 2) physical register number. A hint type of zero specifies a register
- allocation preference. Other hint type values are target specific which are
- resolved by TargetRegisterInfo::ResolveRegAllocHint. An example of which is
- the ARM target can uses register hint to request that the register allocator
- provide an even / odd register pair to two virtual registers. It is
- important to note the register allocation hints are just hints. There is no
- guarantee the register allocators will be able to satisfy the hints.
-
+ MachineRegisterInfo:: setRegAllocationHint. A regalloc hint consists of hint
+ type and physical register number. A hint type of zero specifies a register
+ allocation preference. Other hint type values are target specific which are
+ resolved by TargetRegisterInfo::ResolveRegAllocHint. An example of which is
+ the ARM target can uses register hint to request that the register allocator
+ provide an even / odd register pair to two virtual registers.