[llvm-dev] trunc nsw/nuw?

Dr.-Ing. Christoph Cullmann via llvm-dev llvm-dev at lists.llvm.org
Mon Jul 3 23:41:51 PDT 2017


Hi,

> Hi Alexandre,
> 
> LLVM currently doesn't have trunc nsw/nuw, no.
> Which frontend would emit such instructions? Any application in mind?
> Just asking because if no frontend could emit those, then the motivation to
> add nsw/nuw support to trunc would be very low I guess.
I think the clang frontend could use that to allow better static analysis of integer overflows
on the LLVM IR.

It might be interesting for static analysis tools that want to know if you truncate something
that is too large for the target range but you need the sign to determine, e.g. the C/C++ frontend
could use that flag for trunc of signed/unsigned integers, then you could e.g. check if

(uint8_t)x

changes the values if x has stuff out of the 0..255 range.

e.g. x as int with -100 => trunc nuw to 8 => bad

(int8_t)x

  => trunc nsw to 8 => ok

Greetings
Christoph

> 
> Thanks,
> Nuno
> 
> -----Original Message-----
> From: Alexandre Isoard via llvm-dev
> Sent: Monday, July 3, 2017 8:38 PM
> To: llvm-dev
> Subject: [llvm-dev] trunc nsw/nuw?
> 
> 
> Hello,
> 
> From [1], trunc does not seems to have a nsw/nuw attribute.
> Is it possible to have that? Or do we have that and it is not up-to-date?
> 
> The definition would be:
> 
> If the nuw keyword is present, the result value of the trunc is a poison
> value if the truncated high order bits are non-zero. If the nsw keyword is
> present, the result value of the trunc is a poison value if the truncated
> high order bits are not all equal to the non-truncated bit of the highest
> order.
> 
> This allow to cancel out:
> - sext with trunc nsw
> - zext with trunc nuw
> 
> And probably to commute with add/sub/mul/lshr/ashr/shl/urem/udiv/udiv (with
> the correct flags).
> 
> [1]: http://llvm.org/docs/LangRef.html#trunc-to-instruction
> 
> 
> --
> 
> Alexandre Isoard
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-- 
----------------------------- Dr.-Ing. Christoph Cullmann ---------
AbsInt Angewandte Informatik GmbH      Email: cullmann at AbsInt.com
Science Park 1                         Tel:   +49-681-38360-22
66123 Saarbrücken                      Fax:   +49-681-38360-20
GERMANY                                WWW:   http://www.AbsInt.com
--------------------------------------------------------------------
Geschäftsführung: Dr.-Ing. Christian Ferdinand
Eingetragen im Handelsregister des Amtsgerichts Saarbrücken, HRB 11234


More information about the llvm-dev mailing list