[llvm-dev] trunc nsw/nuw?
Hal Finkel via llvm-dev
llvm-dev at lists.llvm.org
Wed Jul 5 07:59:55 PDT 2017
On 07/04/2017 01:41 AM, Dr.-Ing. Christoph Cullmann via llvm-dev wrote:
>> 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
> 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
> => trunc nsw to 8 => ok
I'm not sure that a C/C++ frontend could add this flag. In C++, the
conversion for unsigned types is specified and for signed types, it's
implementation defined, but in neither case is it UB.
>> -----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?
>> From , 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
>> 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).
>> : http://llvm.org/docs/LangRef.html#trunc-to-instruction
>> Alexandre Isoard
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-dev