forked from OSchip/llvm-project
9c91614959
The common phi value transform replaces constants with values that have the same value as the constant on a given edge. However, LVI generally only provides information that is correct up to poison, so this can end up replacing a well-defined value with poison. D69442 addressed an instance of this problem by clearing poison flags on the generating instruction, which was sufficient at the time. rGa917fb89dc28 made LVI's edge value analysis slightly more powerful, and clearing poison flags is no longer sufficient. This patch changes the transform to instead explicitly guard against a poison value instead. This should be satisfied for most cases due to a prior branch on poison. Fixes https://bugs.llvm.org/show_bug.cgi?id=50399. Differential Revision: https://reviews.llvm.org/D102966 |
||
---|---|---|
.. | ||
2010-09-02-Trunc.ll | ||
2010-09-26-MergeConstantRange.ll | ||
abs.ll | ||
add.ll | ||
alloca.ll | ||
and.ll | ||
ashr.ll | ||
basic.ll | ||
conflict.ll | ||
crash.ll | ||
deopt.ll | ||
guards.ll | ||
icmp.ll | ||
merge-range-and-undef.ll | ||
min-max.ll | ||
minmaxabs.ll | ||
mul.ll | ||
non-null.ll | ||
overflow_predicate.ll | ||
overflows.ll | ||
phi-common-val.ll | ||
pointer.ll | ||
pr35807.ll | ||
profmd.ll | ||
range.ll | ||
sdiv.ll | ||
select.ll | ||
sext.ll | ||
shl.ll | ||
srem.ll | ||
sub.ll | ||
udiv.ll | ||
urem.ll |