rjmccall added inline comments.

================
Comment at: clang/lib/CodeGen/Address.h:97
+  llvm::Value *
+  getPointer(KnownNonNull_t KnownNonNull = KnownNonNull_t::False) const {
     assert(isValid());
----------------
ahatanak wrote:
> rjmccall wrote:
> > Apologies if this rehashes a conversation we had earlier, but does it make 
> > more sense to track this internally in `Address`?  Some `Address` sources 
> > definitely known that they're non-null, and the places where we only know 
> > that *contextually* could definitely just pass it down to e.g. 
> > `EmitPointerWithAlignment`.  That would make it a less invasive change for 
> > all the clients of `getPointer()`.
> Yes, tracking it in `Address` and `LValue` is another way to fix the problem. 
> The implementation in my local branch currently adds an `IsKnownNonNull` flag 
> to the constructor of `Address` and method `setKnownNonNull` to both 
> `Address` and `LValue`. The method is called when the pointer is known not to 
> be null contextually.
Okay.  It might make sense to pass this into `EmitPointerWithAlignment` 
contextually instead of just relying on changing it afterwards, since it's 
possible that some of the work there can be optimized when the pointer is 
contextually not allowed to be null.  (For example, C++ derived-to-base 
conversions, although I think we might optimize those already by using a 
different `CastKind` when there's a contextual requirement to be non-null (e.g. 
when it's the `this` argument of a method call).  But I'm sure there are 
situations that doesn't kick in that would be optimized, like if you 
`static_cast` the pointer before calling a method on it.)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D142584/new/

https://reviews.llvm.org/D142584

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to