[ValueTracking] Implement impliesPoison
authorJuneyoung Lee <aqjune@gmail.com>
Mon, 28 Dec 2020 21:50:26 +0000 (06:50 +0900)
committerJuneyoung Lee <aqjune@gmail.com>
Mon, 28 Dec 2020 21:50:38 +0000 (06:50 +0900)
commit0f2c180163a2cc3d6239a32d379ec3d773e56a2f
treec963c94d720babd9227e25f8e0336ddb0e58f52a
parent4a16c507cb68e425226e81598d91963aacdd57ed
[ValueTracking] Implement impliesPoison

This PR adds impliesPoison(ValAssumedPoison, V) that returns true if V is
poison under the assumption that ValAssumedPoison is poison.

For example, impliesPoison('icmp X, 10', 'icmp X, Y') return true because
'icmp X, Y' is poison if 'icmp X, 10' is poison.

impliesPoison can be used for sound optimization of select, as discussed in
D77868.

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D78152
llvm/include/llvm/Analysis/ValueTracking.h
llvm/lib/Analysis/ValueTracking.cpp
llvm/unittests/Analysis/ValueTrackingTest.cpp