[llvm-dev] A tagged architecture, the elephant in the undef / poison room

Krzysztof Parzyszek via llvm-dev llvm-dev at lists.llvm.org
Tue Jun 13 10:51:37 PDT 2017

On 6/13/2017 12:27 PM, Peter Lawrence via llvm-dev wrote:
> Here’s what seems to really be going on
> 	“undef”  ===  models an uninitialized register,  but
> 	“poison”  ===  turns the entire IR into a tagged architecture

The problem with undef was that while "cmp eq i32 %x, %x" was always 
true, if %x turned out to be undef, then we end up with "cmp eq i32 
undef, undef", which may be folded either way.

Poison is meant to avoid that issue by saying that once you establish a 
certain property of it, that property of it remains.  Maybe there is an 
interpretation of it that matches a tagged architecture, but I don't see 
how that's significant.  Do you have any particular concern regarding 
it? (Other than about the ability to represent a C program.)


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

More information about the llvm-dev mailing list