[LLVMdev] Integer divide by zero

Duncan Sands baldrick at free.fr
Sun Apr 7 10:23:37 PDT 2013


Hi Cameron,

On 07/04/13 18:20, Cameron McInally wrote:
> Hey Duncan,
>
> On Sun, Apr 7, 2013 at 11:22 AM, Duncan Sands <baldrick at free.fr
> <mailto:baldrick at free.fr>> wrote:
> ...
>
>     can't front-ends implement this themselves using the "select" constant
>     expression?  For example, rather than dividing by "x" you can divide by
>     "x == 0 ? 1 : x".
>
>
> I'm not sure that I follow. I would like to see the division by zero execute and
> trap at runtime.
>
> For example, x = 2/0. It looks like your suggestion would generate the
> expression 2/1, which wouldn't trap as expected.
>
> Am I misinterpreting your suggestion?

I didn't realize you wanted a trap, I just thought you wanted to avoid undefined
behaviour.  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).

Ciao, Duncan.

>
> Thanks,
> Cameron
>
> P.S. Is it your intention to hide the simple constant expression from the
> constant folder? I.e. (x == 0) ? 0 : x.




More information about the llvm-dev mailing list