[llvm-dev] killing undef and spreading poison
Sanjoy Das via llvm-dev
llvm-dev at lists.llvm.org
Mon Jun 19 09:43:38 PDT 2017
On Mon, Jun 19, 2017 at 7:14 AM, Peter Lawrence
<peterl95124 at sbcglobal.net> wrote:
> My belief is that this is a register allocation problem
> that should not be addressed in the IR.
This is getting weird since you've started so many threads, but it
isn't *just* a register allocator problem (edit: just noticed that
Martin something similar) -- in your "live in undef value" scheme
there also are mid-level optimizations we will not be able to do.
> However you have changed the subject, and we still need an example
I'm not convinced that I changed the subject. You said
> we still need some examples showing that the definition
> “Branching on poison is immediate-UB” is the best choice,
> so far we only have arguments against it (the one for loop-switching).
There are two ways we can avoid branching on “Branching on poison is
immediate-UB” and still have GVN propagate equalities:
- Propagate equalities only if the thing we're propagating isn't
poison. As I've stated in this thread, that's almost impossible to
prove in interesting cases.
- Ditch poison and have an `undef` like instruction (which is
equivalent to a live-in undef register), which brings us the regalloc
and mid-level opt problem.
So both of the thing I said seem on-topic to me.
More information about the llvm-dev