[LLVMdev] Integer divide by zero

Duncan Sands baldrick at free.fr
Mon Apr 8 00:39:32 PDT 2013


Hi Cameron,

On 07/04/13 19:42, Cameron McInally wrote:
> On Sun, Apr 7, 2013 at 1:23 PM, Duncan Sands <baldrick at free.fr
> <mailto:baldrick at free.fr>> wrote:
> ...
>
>     If you want a trap you are going to have to (IMO) output IR
>     instructions rather than a constant expression.  For example you can output the
>     equivalent of
>        if (x == 0)
>           llvm.trap() // or maybe some special trap routine
>        y = whatever/x
>        ... use y ...
>     rather than the constant expression "whatever/x".  If the optimizers can prove
>     that x is never zero then this will be sunk back into a constant expression (if
>     "whatever" is a constant expression).
>
>
> Ah, that's super interesting. I'll have to give it some more thought. Thanks for
> this, Duncan.
>
> My knee-jerk reaction is that emulating hardware behaviour in software should be
> avoided. At least in this specific case.

I reckon it shouldn't be too hard to teach the code generators to turn this IR
sequence into "y = target-divide whatever/x" on targets for which dividing by 0
traps in a satisfactory way, so it turns into something efficient.

Ciao, Duncan.




More information about the llvm-dev mailing list