llvm-6502/lib/Transforms/InstCombine
Bill Wendling e1b66f1145 Restrict this transformation to equality conditions.
This transformation is not correct for not-equal conditions:

(trunc x) != C1 & (and x, CA) != C2 -> (and x, CA|CMAX) != C1|C2

Let
  C1 == 0
  C2 == 0
  CA == 0xFF0000
  CMAX == 0xFF
and truncating to i8.

The original truth table:

    x   | A: trunc x != 0 | B: x & 0xFF0000 != 0 | A & B != 0
--------------------------------------------------------------
0x00000 |        0        |          0           |     0
0x00001 |        1        |          0           |     0
0x10000 |        0        |          1           |     0
0x10001 |        1        |          1           |     1

The truth table of the replacement:

    x   | x & 0xFF00FF != 0
----------------------------
0x00000 |        0
0x00001 |        1
0x10000 |        1
0x10001 |        1

So they are different.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151691 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-29 01:46:50 +00:00
..
CMakeLists.txt build/CMake: Finish removal of add_llvm_library_dependencies. 2011-11-29 19:25:30 +00:00
InstCombine.h Fix a few more places where TargetData/TargetLibraryInfo is not being passed. 2011-12-02 01:26:24 +00:00
InstCombineAddSub.cpp InstCombine: Make OptimizePointerDifference more aggressive. 2012-02-20 14:34:57 +00:00
InstCombineAndOrXor.cpp Restrict this transformation to equality conditions. 2012-02-29 01:46:50 +00:00
InstCombineCalls.cpp [unwind removal] We no longer have 'unwind' instructions being generated, so 2012-02-06 21:16:41 +00:00
InstCombineCasts.cpp Remove some dead code and tidy things up now that vectors use ConstantDataVector 2012-02-06 21:56:39 +00:00
InstCombineCompares.cpp Fix unsigned off-by-one in comment. 2012-02-21 13:40:06 +00:00
InstCombineLoadStoreAlloca.cpp Use the getFirstInsertionPt() method instead of getFirstNonPHI + an 'isa<>' 2011-08-16 20:45:24 +00:00
InstCombineMulDivRem.cpp Remove some dead code and tidy things up now that vectors use ConstantDataVector 2012-02-06 21:56:39 +00:00
InstCombinePHI.cpp Update instcombine for atomic load/store. 2011-08-15 22:09:40 +00:00
InstCombineSelect.cpp More dead code removal (using -Wunreachable-code) 2012-01-20 21:51:11 +00:00
InstCombineShifts.cpp Convert assert(0) to llvm_unreachable 2012-02-07 05:05:23 +00:00
InstCombineSimplifyDemanded.cpp continue making the world safe for ConstantDataVector. At this point, 2012-01-27 03:08:05 +00:00
InstCombineVectorOps.cpp continue making the world safe for ConstantDataVector. At this point, 2012-01-27 03:08:05 +00:00
InstCombineWorklist.h InstCombine: We know the number of items initially added to the worklist map, reserve space early to avoid rehashing. 2011-03-05 16:43:46 +00:00
InstructionCombining.cpp Remove some dead code and tidy things up now that vectors use ConstantDataVector 2012-02-06 21:56:39 +00:00
LLVMBuild.txt LLVMBuild: Remove trailing newline, which irked me. 2011-12-12 19:48:00 +00:00
Makefile