llvm-6502/lib/Transforms/InstCombine
Bill Wendling 7d9f2b93a3 This test case:
long test(long x) { return (x & 123124) | 3; }

Currently compiles to:

_test:
        orl     $3, %edi
        movq    %rdi, %rax
        andq    $123127, %rax
        ret

This is because instruction and DAG combiners canonicalize

  (or (and x, C), D) -> (and (or, D), (C | D))

However, this is only profitable if (C & D) != 0. It gets in the way of the
3-addressification because the input bits are known to be zero.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97616 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-03 00:35:56 +00:00
..
CMakeLists.txt
InstCombine.h Rename ValueRequiresCast to ShouldOptimizeCast, to better reflect 2010-02-11 06:26:33 +00:00
InstCombineAddSub.cpp Floating-point add, sub, and mul are now spelled fadd, fsub, and fmul, 2010-03-02 01:11:08 +00:00
InstCombineAndOrXor.cpp This test case: 2010-03-03 00:35:56 +00:00
InstCombineCalls.cpp Instcombine constant folding can normalize gep with negative index to index with large offset. When instcombine objsize checking transformation sees these geps where the offset seemingly point out of bound, it should just return "i don't know" rather than asserting. 2010-02-22 23:34:00 +00:00
InstCombineCasts.cpp There are two ways of checking for a given type, for example isa<PointerType>(T) 2010-02-16 11:11:14 +00:00
InstCombineCompares.cpp Fix indentation. 2010-02-24 06:46:09 +00:00
InstCombineLoadStoreAlloca.cpp There are two ways of checking for a given type, for example isa<PointerType>(T) 2010-02-16 11:11:14 +00:00
InstCombineMulDivRem.cpp Floating-point add, sub, and mul are now spelled fadd, fsub, and fmul, 2010-03-02 01:11:08 +00:00
InstCombinePHI.cpp There are two ways of checking for a given type, for example isa<PointerType>(T) 2010-02-16 11:11:14 +00:00
InstCombineSelect.cpp Don't do (X != Y) ? X : Y -> X for floating-point values; it doesn't 2010-02-23 17:17:57 +00:00
InstCombineShifts.cpp
InstCombineSimplifyDemanded.cpp There are two ways of checking for a given type, for example isa<PointerType>(T) 2010-02-16 11:11:14 +00:00
InstCombineVectorOps.cpp There are two ways of checking for a given type, for example isa<PointerType>(T) 2010-02-16 11:11:14 +00:00
InstCombineWorklist.h
InstructionCombining.cpp There are two ways of checking for a given type, for example isa<PointerType>(T) 2010-02-16 11:11:14 +00:00
Makefile