llvm-6502/lib
Shuxin Yang a1444219b2 1. Hoist minus sign as high as possible in an attempt to reveal
some optimization opportunities (in the enclosing supper-expressions).

   rule 1. (-0.0 - X ) * Y => -0.0 - (X * Y)
     if expression "-0.0 - X" has only one reference.

   rule 2. (0.0 - X ) * Y => -0.0 - (X * Y)
     if expression "0.0 - X" has only one reference, and
        the instruction is marked "noSignedZero".

2. Eliminate negation (The compiler was already able to handle these
    opt if the 0.0s are replaced with -0.0.)

   rule 3: (0.0 - X) * (0.0 - Y) => X * Y
   rule 4: (0.0 - X) * C => X * -C
   if the expr is flagged "noSignedZero".

3. 
  Rule 5: (X*Y) * X => (X*X) * Y
   if X!=Y and the expression is flagged with "UnsafeAlgebra".

   The purpose of this transformation is two-fold:
    a) to form a power expression (of X).
    b) potentially shorten the critical path: After transformation, the
       latency of the instruction Y is amortized by the expression of X*X,
       and therefore Y is in a "less critical" position compared to what it
      was before the transformation. 

4. Remove the InstCombine code about simplifiying "X * select".
   
   The reasons are following:
    a) The "select" is somewhat architecture-dependent, therefore the
       higher level optimizers are not able to precisely predict if
       the simplification really yields any performance improvement
       or not.

    b) The "select" operator is bit complicate, and tends to obscure
       optimization opportunities. It is btter to keep it as low as
       possible in expr tree, and let CodeGen to tackle the optimization.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172551 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-15 21:09:32 +00:00
..
Analysis SCEVExpander fix. RAUW needs to update the InsertedExpressions cache. 2013-01-14 21:00:37 +00:00
Archive Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
AsmParser There was a switch fall-through in the parser for textual LLVM that caused 2013-01-07 13:32:38 +00:00
Bitcode Revert s/Raw/getBitMask/g name change. This is possibly causing LTO test hangings. 2013-01-09 23:36:50 +00:00
CodeGen This patch addresses an incorrect transformation in the DAG combiner. 2013-01-14 22:04:38 +00:00
DebugInfo [Object, DebugInfo] Make DWARFContext BE-aware. 2013-01-09 02:45:05 +00:00
ExecutionEngine [Object][ELF] Simplify ELFObjectFile by using ELFType. 2013-01-15 07:44:25 +00:00
IR [IR] Add verification for module flags with the "require" behavior. 2013-01-15 20:52:06 +00:00
Linker [Linker] Drop asserts that are embedded in cast<> and now checked by the verifier. 2013-01-15 20:52:09 +00:00
MC Now GenericAsmParser and AsmParser are no longer friends, GenericAsmParser can 2013-01-14 23:43:18 +00:00
Object [Object][ELF] Simplify ELFObjectFile by using ELFType. 2013-01-15 07:44:25 +00:00
Option Resort the #include lines in include/... and lib/... with the 2013-01-02 10:22:59 +00:00
Support Revert r171829 "Split changeset_ty using iterators instead of loops" as it breaks the VS2008 build 2013-01-14 14:13:06 +00:00
TableGen TableGen: Keep track of superclass reference ranges. 2013-01-10 18:50:11 +00:00
Target This patch fixes a Mips specific bug where 2013-01-15 01:08:02 +00:00
Transforms 1. Hoist minus sign as high as possible in an attempt to reveal 2013-01-15 21:09:32 +00:00
CMakeLists.txt Rename VMCore directory to IR. 2013-01-02 09:10:48 +00:00
LLVMBuild.txt Rename VMCore directory to IR. 2013-01-02 09:10:48 +00:00
Makefile Rename VMCore directory to IR. 2013-01-02 09:10:48 +00:00