[CodeGen] -fno-delete-null-pointer-checks: change dereferenceable to…

Authored by MaskRay on Nov 30 2020, 12:44 PM.


[CodeGen] -fno-delete-null-pointer-checks: change dereferenceable to dereferenceable_or_null

After D17993, with -fno-delete-null-pointer-checks we add the dereferenceable attribute to the this pointer.

We have observed that one internal target which worked before fails even with -fno-delete-null-pointer-checks.
Switching to dereferenceable_or_null fixes the problem.

dereferenceable currently does not always respect NullPointerIsValid and may
imply nonnull and lead to aggressive optimization. The optimization may be
related to CallBase::isReturnNonNull, Argument::hasNonNullAttr, or
Value::getPointerDereferenceableBytes. See D66664 and D66618 for some discussions.

Reviewed By: bkramer, rsmith

Differential Revision: https://reviews.llvm.org/D92297