[llvm-dev] [compiler-rt] Undefined negation in float emulation functions
Matthew Fernandez via llvm-dev
llvm-dev at lists.llvm.org
Tue Oct 20 03:38:06 PDT 2015
Hi,
I recently came across the following in __floatsidf in compiler-rt:
__floatsidf(int a) {
...
if (a < 0) {
...
a = -a;
In the case where a == INT_MIN, is this negation not undefined behaviour? AIUI this function is used for software
emulation on targets that have no hardware floating point support. Perhaps there is an in-built assumption that this
code is never called with INT_MIN, though I don't immediately see anything to indicate this. Indeed there is a later
comment in this function that indicates INT_MIN is an anticipated input, but the negation has already occurred by this
point.
I am not a floating point expert, so perhaps I am missing some subtlety here. If so, apologies for the noise. The above
refers to r218935 and similar code is present in __floatsisf.
Thanks,
Matthew
More information about the llvm-dev
mailing list