[llvm-dev] RFC: Killing undef and spreading poison (original) (raw)

Nuno Lopes via llvm-dev llvm-dev at lists.llvm.org
Tue Oct 18 14:33:27 PDT 2016


We need a literal like undef to e.g. initialize padding, use in SROA for phi node entries from branches where a variable is not initialized, constant folding, etc. We are just proposing to get rid of undef altogether and call it poison instead. It makes the compiler a bit more aggressive re undefined behavior, though.

If freeze(%x) is duplicated it can return a different value. Not having a poison literal doesn't change that.

Nuno

-----Original Message----- From: Krzysztof Parzyszek via llvm-dev Sent: Tuesday, October 18, 2016 10:09 PM Subject: Re: [llvm-dev] RFC: Killing undef and spreading poison

I guess, it may help if we don't have a literal for poison (as we do for undef).

Then freeze(%x) would always be equal to freeze(%x) and there would be no question about freeze(poison).

-Krzysztof

On 10/18/2016 3:22 PM, Krzysztof Parzyszek via llvm-dev wrote: > On 10/18/2016 3:12 PM, Sanjoy Das wrote: >> But in the new proposal, in: >>>> %x = freeze(poison) >> %y = xor %x, %x >>>> that is no longer allowed (%y has to be 0) -- all uses of %x will see >> some garbage, but fixed bit pattern. >> What about this: > %x = phi poison, poison (I'm simplifying the syntax here) > Can this be simplified to "%x = poison", i.e. can we rauw(%x, poison)? >> Or > %x = load %uninitializedvar > %y = load %uninitializedvar > // are %x and %y equal (i.e. is "cmp eq %x, %y" == true)? > // is freeze(%x) equal to freeze(%y)? >> I'm wary about such rules. I have a feeling that this is going to create > its own set of problems. >> -Krzysztof >>

Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation


LLVM Developers mailing list llvm-dev at lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



More information about the llvm-dev mailing list