[LLVMdev] RFC: implicit null checks in llvm

Reid Kleckner rnk at google.com
Fri Apr 24 08:26:03 PDT 2015


On Thu, Apr 23, 2015 at 5:17 PM, Andrew Trick <atrick at apple.com> wrote:

> The scheduler itself doesn’t move anything around labels. But any pass can
> perform code motion or load/store optimization. Also, any pass can insert
> an instruction, like a copy, between the label and the load.
>
> I’m not really sure how EH_LABEL ends up translating into exception
> tables, but my guess is that it’s encoding a range that may include any
> arbitrary instructions as long as the call is within the range. So as long
> as calls aren’t reordered with labels and appears to have side effects it
> would work.
>
> So, you could add a different kind of stack map entry that encodes ranges
> instead of exact addresses, then survey all passes to ensure they don’t
> optimize loads across labels. I would have more confidence doing this with
> a pseudo instruction though.
>

I guess your concern is that you need an exact address to do patching.

If this feature is limited to simply allow handling exceptions raised from
loads and stores, then I'm not worried about copies, adds, or other code
being moved into the label range. We don't support catching traps from
those kinds of instructions. I'm only worried about memory accesses being
moved into the range. If we can address that, I think the EH_LABEL approach
works, and it generalizes to other trapping instructions like division or
FP exceptions.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150424/e122c912/attachment.html>


More information about the llvm-dev mailing list