llvm/lib/Transforms/InstCombine
David Majnemer b21b529990 [InstCombine] Don't miscompile select to poison
If we have (select a, b, c), it is sometimes valid to simplify this to a
single select operand.  However, doing so is only valid if the
computation doesn't inject poison into the computation.

It might be helpful to consider the following example:
  (select (icmp ne %i, INT_MAX), (add nsw %i, 1), INT_MIN)

The select is equivalent to (add %i, 1) but not (add nsw %i, 1).

Self hosting on x86_64 revealed that this occurs very, very rarely so
bailing out is hopefully pretty reasonable.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239215 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-06 02:30:43 +00:00
..
CMakeLists.txt
InstCombineAddSub.cpp [ValueTracking] refactor: extract method haveNoCommonBitsSet 2015-05-14 23:53:19 +00:00
InstCombineAndOrXor.cpp [ConstantRange] Split makeICmpRegion in two. 2015-03-18 00:41:24 +00:00
InstCombineCalls.cpp [InstSimplify] Handle some overflow intrinsics in InstSimplify 2015-05-22 03:56:46 +00:00
InstCombineCasts.cpp Reapply r237539 with a fix for the Chromium build. 2015-05-20 18:41:25 +00:00
InstCombineCompares.cpp [InstCombine][NFC] Add a `break;` statement. 2015-06-05 18:04:46 +00:00
InstCombineInternal.h Rip min/max pattern matching out of InstCombine and into 2015-05-11 14:42:20 +00:00
InstCombineLoadStoreAlloca.cpp [InstCombine] Fold IntToPtr and PtrToInt into preceding loads. 2015-05-28 18:39:17 +00:00
InstCombineMulDivRem.cpp [InstCombine] (mul nsw 1, INT_MIN) != (shl nsw 1, 31) 2015-04-18 04:41:30 +00:00
InstCombinePHI.cpp Convert PHI getIncomingValue() to foreach over incoming_values(). NFC. 2015-05-12 20:05:31 +00:00
InstCombineSelect.cpp [InstCombine] Don't miscompile select to poison 2015-06-06 02:30:43 +00:00
InstCombineShifts.cpp Convert PHI getIncomingValue() to foreach over incoming_values(). NFC. 2015-05-12 20:05:31 +00:00
InstCombineSimplifyDemanded.cpp Reapply r237539 with a fix for the Chromium build. 2015-05-20 18:41:25 +00:00
InstCombineVectorOps.cpp [InstCombine] Use DataLayout to determine vector element width 2015-04-03 20:18:40 +00:00
InstructionCombining.cpp Replace push_back(Constructor(foo)) with emplace_back(foo) for non-trivial types 2015-05-29 19:43:39 +00:00
LLVMBuild.txt
Makefile