[InstCombine] Clear out nsw/nuw if we modify computation in the chain
authorDavid Majnemer <david.majnemer@gmail.com>
Wed, 22 Apr 2015 20:59:28 +0000 (20:59 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Wed, 22 Apr 2015 20:59:28 +0000 (20:59 +0000)
commitfe58d13a17a2824fe891274e1396e5fc1ca5ab38
treeb70e49630309f2cbf60608f0ff7c0517b5efcda0
parenta32764453444da90e92ba0041f40b4d94fadf2d4
[InstCombine] Clear out nsw/nuw if we modify computation in the chain

An nsw/nuw operation relies on the values feeding into it to not
overflow if 'poison' is not to be produced.  This means that
optimizations which make modifications to the bottom of a chain (like
SimplifyDemandedBits) must strip out nsw/nuw if they cannot ensure that
they will be preserved.

This fixes PR23309.

llvm-svn: 235544
llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
llvm/test/Transforms/InstCombine/cast.ll