[llvm-dev] RFC: Allow readnone and readonly functions to throw exceptions

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 5 13:28:49 PST 2017

On 01/05/2017 03:10 PM, Reid Kleckner wrote:
> On Thu, Jan 5, 2017 at 10:39 AM, Hal Finkel <hfinkel at anl.gov 
> <mailto:hfinkel at anl.gov>> wrote:
>     I don't understand why that's desirable, and I think it would
>     severely limit our ability to infer these attributes for functions
>     that unwind. You'd need to prove things -- likely unknowable
>     things -- about the exception handlers in place around every call
>     site of a function in order to mark it readonly, readnone, etc.
>     We'd have the same problem with the attribute parameters. I'm
>     fairly certain we do need and want to separate these concerns.
>     This way we can apply callsite specific reasoning to the potential
>     effects of exception handlers separate from what the function
>     itself might do.
> I'm really just trying to push exception handlers outside the LLVM 
> model. They shouldn't be able to look at LLVM values, so that we *can* 
> reason locally to infer readnone/readonly.

Maybe we're not on the same page. When I say exception handler, I mean 
any code the unwinding in-turn calls - i.e. anything in a catch block.

> In practice, when could we infer readnone without inferring nounwind? 
> The only thing in LLVM that can throw is a call or intrinsic call to 
> EH machinery, and that instruction will need to be attributed with 
> knowledge of the exception handler. If the exception handler really 
> doesn't write memory that LLVM can read, then we can mark it readonly, 
> and our normal local inference will work.

What do you mean? Any call, except for those tagged with nounwind, can 
throw. They don't need to be 'invoked'. I don't like this aspect of 
LLVM's IR, but that's another story.


Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170105/6de1464a/attachment.html>

More information about the llvm-dev mailing list