[PATCH] D93820: [InstSimplify] Don't fold gep p, -p to null

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Dec 26 03:36:21 PST 2020


nikic created this revision.
nikic added reviewers: nlopes, aqjune, jdoerfert.
Herald added a subscriber: hiraditya.
nikic requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

This is a partial fix for https://bugs.llvm.org/show_bug.cgi?id=44403. Folding `gep p, q-p` to `q` is only legal if `p` and `q` have the same provenance. This fold should probably be guarded by something like `getUnderlyingObject(p) == getUnderlyingObject(q)`.

This patch is a partial fix that removes the special handling for `gep p, 0-p`, which will fold to a null pointer, which would certainly not pass an underlying object check (unless p is also null, in which case this would fold trivially anyway). Folding to a null pointer is particularly problematic due to the special handling it receives in many places, making end-to-end miscompiles more likely.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D93820

Files:
  llvm/lib/Analysis/InstructionSimplify.cpp
  llvm/test/Transforms/InstSimplify/gep.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D93820.313741.patch
Type: text/x-patch
Size: 4910 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201226/f46b8036/attachment.bin>


More information about the llvm-commits mailing list