[PATCH] D22793: IR: Introduce inbounds attribute on getelementptr indices.

Eli Friedman via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 26 18:01:16 PDT 2016


eli.friedman added inline comments.

================
Comment at: docs/LangRef.rst:7548
@@ +7547,3 @@
+comparison is undefined if either operand was derived from an ``inrange``
+GEP, with the exception of comparisons where both operands were derived from
+a GEP which was evaluated with identical operands up to and including the
----------------
Hmm... this sort of restricts the possible uses of the marking.  For example, given:

    struct X {
        int x, y[2];
    };
    int f(struct X *x, int i) { return x->y[i]; }
    int *f2(struct X *x) { return x->y; }

We can mark the GEP in `x->y[i]` inrange, but we can't mark the GEP in `x->y` inrange because it could be used in a pointer comparison.  I guess that's okay (the stated form is convenient for performing SROA).  That said, inevitably someone is going to push for a version which doesn't make comparisons undefined so it can be used more aggressively in C code.

You should probably state explicitly that the result of converting an inrange pointer to an integer is undef; you can't actually do anything useful with the result anyway.


https://reviews.llvm.org/D22793





More information about the llvm-commits mailing list