[LLVMdev] RFC: change BoundsChecking.cpp to use address-based tests
nunoplopes at sapo.pt
Tue Dec 4 14:30:52 PST 2012
> Could you provide a bit of background of the expected domains of Size and
> Offset? In particular, are they signed or unsigned integers? A
> non-negative size doesn't seem to make much sense in this context, but
> depending on how it's calculated I could see it arising. Is a zero Size
> something that might arise here? I'm assuming the Offset comes from an
> arbitrary indexing expression and is thus a signed integer.
Ok, so we have the following:
- Size is unsigned
- Offset is signed (in LLVM, like in C, offsets can be negative)
- Offset can be < 0, but that's an error, since the offset is computed from
the beginning of the object
- Size can be zero
> By working through the cases, I've identified combinations of two
> conditionals which should work if either a) Size is positive, or b) Size
> and Offset are both signed integers. Once I know which, if either, is
> appropriate, I'll write it up with a full explanation of why I think it
> works. Then we can discuss. If I'm right about the changed conditionals
> working, I'd then write up a patch for submission.
We already optimize the case when Size is >= 0 (signed comparison). In this
case we only do 2 comparisons.
The other case that is optimized is when Offset is a constant. We only do 2
comparisons in that case as well.
Please send in your suggestions :)
More information about the llvm-dev