[PATCH] D99135: [deref] Implement initial set of inference rules for deref-at-point
Philip Reames via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 23 09:21:58 PDT 2021
reames added inline comments.
================
Comment at: llvm/lib/IR/Value.cpp:741
+ // *) An alloca is deallocated when the function returns
+ if (isa<GlobalValue>(V) || isa<Constant>(V) || isa<AllocaInst>(V))
+ return false;
----------------
reames wrote:
> nlopes wrote:
> > an Alloca can be killed with the lifetime intrinsics. Storing to an alloca after lifetime_end is UB.
> Right, but how does that affect dereferenceability? The memory is still dereferenceable. The contents may be undefined, but the access won't fault.
>
> p.s. Lifetime intrinsics are very badly specified, and are inconsistent across the optimizer - including in the existing deref code. I really don't want them to be a blocker here.
JFYI, the wording in the LangRef on semantics of a dead object (after lifetime end) was recently changed in c821ef4. I objected to the wording at the time, though the patch appears not to have been adjusted. This is why.
lifetime intrinsics do not change dereferenceability. The relevant wording from c821ef4 needs removed from the LangRef. It is wrong. Both with current and proposed semantics.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D99135/new/
https://reviews.llvm.org/D99135
More information about the llvm-commits
mailing list