RFC: [ValueTracking] Let analyses assume a value cannot be partially poison
authorJuneyoung Lee <aqjune@gmail.com>
Mon, 20 Apr 2020 15:35:45 +0000 (00:35 +0900)
committerJuneyoung Lee <aqjune@gmail.com>
Wed, 22 Apr 2020 22:57:12 +0000 (07:57 +0900)
commit80faa8c3af856df93faf909f21cdcc397bed068f
tree0c93ab4161d3115a84d1149f55a028c89f663f8a
parent91ccbe6fdce1766ad62023feded1a1940d06ece7
RFC: [ValueTracking] Let analyses assume a value cannot be partially poison

Summary:
This is RFC for fixes in poison-related functions of ValueTracking.
These functions assume that a value can be poison bitwisely, but the semantics
of bitwise poison is not clear at the moment.
Allowing a value to have bitwise poison adds complexity to reasoning about
correctness of optimizations.

This patch makes the analysis functions simply assume that a value is
either fully poison or not, which has been used to understand the correctness
of a few previous optimizations.
The bitwise poison semantics seems to be only used by these functions as well.

In terms of implementation, using value-wise poison concept makes existing
functions do more precise analysis, which is what this patch contains.

Reviewers: spatel, lebedev.ri, jdoerfert, reames, nikic, nlopes, regehr

Reviewed By: nikic

Subscribers: fhahn, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D78503
llvm/include/llvm/Analysis/ValueTracking.h
llvm/lib/Analysis/ScalarEvolution.cpp
llvm/lib/Analysis/ValueTracking.cpp
llvm/lib/Transforms/Instrumentation/PoisonChecking.cpp
llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
llvm/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp
llvm/test/Analysis/ScalarEvolution/flags-from-poison.ll