[llvm-dev] Why are GEPs type based?
Stefanos Baziotis via llvm-dev
llvm-dev at lists.llvm.org
Mon Jul 13 13:30:53 PDT 2020
Hi,
Although I'm not an expert on the topic, there are at least two reasons:
1) It looks more like C/C++ than computing offsets. This goes hand in hand
with the fact that GEP abstracts
target-specific information. For example, a pointer is 4 bytes in a typical
32-bit system but 8 bytes in a 64-bit system.
If you have a struct like:
struct {
int *p;
int v;
};
To get `v`, with a GEP you just say "give me the second member". If you
were to code this with offsets, you would need to
know the target, something that generally front-ends are not good to have a
dependency on (Clang and other front-ends actually
have and that's another big discussion).
2) It's very important for alias analysis. Again, not an expert on that,
but e.g. see the first rule on when a pointer is based on
another (pointer) here: https://llvm.org/docs/LangRef.html#pointeraliasing
Best regards,
Stefanos
Στις Δευ, 13 Ιουλ 2020 στις 11:08 μ.μ., ο/η Nikita Popov via llvm-dev <
llvm-dev at lists.llvm.org> έγραψε:
> Hi,
>
> I've been wondering why LLVMs GEP instructions are based on types, rather
> than encoding the raw address calculation as a base pointer plus some
> scaled offsets (still in the form of a GEP, to retain provenance).
>
> The type information does not seem particularly useful (shouldn't be used
> as an optimization base, because struct layouts lie), but increases the
> non-canonical IR space (there are many ways to encode the same GEP) and
> increases compile-time (optimizations need to constantly decompose GEPs,
> e.g. to get constant offsets).
>
> What am I missing here?
>
> Nikita,
> Regards
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200713/5d1c13a9/attachment.html>
More information about the llvm-dev
mailing list