[ValueTracking] Teach computeConstantRange that the maximum value of a half is 65504
authorDavid Green <david.green@arm.com>
Sat, 30 Oct 2021 13:27:38 +0000 (14:27 +0100)
committerDavid Green <david.green@arm.com>
Sat, 30 Oct 2021 13:27:38 +0000 (14:27 +0100)
commit2c4a9e830cbb3b91a57902f7ecd508c544701819
tree493ead6f8168e211caee8351892968a9022c942e
parent3be3c944a5bacfd208b56853941b0fa4dec3ddcc
[ValueTracking] Teach computeConstantRange that the maximum value of a half is 65504

The maximal value of a half is 0x7bff, which is 65504 when converted to
an integer. This patch teaches that to computeConstantRange to compute a
constant range with the correct maximum value.
https://alive2.llvm.org/ce/z/BV_Spb
https://alive2.llvm.org/ce/z/Nwuqvb

The maximum value for a float converted in the same way is 3.4e38, which
requires 129bits of data. I have not added that here as integer types so
larger are rare, compared to integers types larger than 17 bits require
for half floats.

The MVE tests change because instsimplify happens to be run as a part of
the backend, where it doesn't tend to for other backends.

Differential Revision: https://reviews.llvm.org/D112694
llvm/lib/Analysis/ValueTracking.cpp
llvm/test/CodeGen/Thumb2/mve-fpclamptosat_vec.ll
llvm/test/Transforms/InstSimplify/fptoi-range.ll