mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-19 02:56:49 +00:00
libclc: Fix rounding during type conversion
The rounding during type conversion uses multiple conversions, selecting between them to try to discover if rounding occurred. This appears to not have been tested, since it would generate code of the form: float convert_float_rtp(char x) { float r = convert_float(x); char y = convert_char(y); [...] } which will access uninitialised data. The idea appears to have been to have done a char -> float -> char roundtrip in order to discover the rounding, so do this. Discovered by inspection. Signed-off-by: Daniel Stone <daniels@collabora.com> Reviewed By: jvesely Differential Revision: https://reviews.llvm.org/D81999
This commit is contained in:
parent
9b0f292e82
commit
59510c4212
@ -355,7 +355,7 @@ def generate_float_conversion(src, dst, size, mode, sat):
|
||||
print(" return convert_{DST}{N}(x);".format(DST=dst, N=size))
|
||||
else:
|
||||
print(" {DST}{N} r = convert_{DST}{N}(x);".format(DST=dst, N=size))
|
||||
print(" {SRC}{N} y = convert_{SRC}{N}(y);".format(SRC=src, N=size))
|
||||
print(" {SRC}{N} y = convert_{SRC}{N}(r);".format(SRC=src, N=size))
|
||||
if mode == '_rtz':
|
||||
if src in int_types:
|
||||
print(" {USRC}{N} abs_x = abs(x);".format(USRC=unsigned_type[src], N=size))
|
||||
|
Loading…
x
Reference in New Issue
Block a user