efriedma-quic wrote:

Saying "one side is inbounds of the other side" is basically useless, as far as 
I can tell, for almost any transform.

The other possibility you mentioned is that we say one side is a constant, the 
other is not, and the non-constant side must be a pointer?  That seems fragile. 
 The semantics of the add depend on the "syntactic" form of the operands, which 
could be rewritten.  Not really great.

Maybe we could consider adding "ISD::PTRADD"?  Lowers to ISD::ADD by default, 
but targets that want to do weird things with pointer arithmetic could do them.

One other concern, which applies to basically any formulation of this: Since 
SelectionDAG doesn't have a distinct pointer type, you can't tell whether the 
pointer operand was produced by an inttoptr.  So in some cases, you have an 
operation marked "inbounds", but it's ambiguous which object it's actually 
inbounds to.  This isn't really a problem at the moment because we do IR-level 
transforms that remove inttoptr anyway, but if we ever do resolve the IR-level 
issues, we should have some idea for how we propagate the fix to SelectionDAG.

https://github.com/llvm/llvm-project/pull/131862
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to