Issue 165644
Summary [Host-dependent][ARM vs x86] ConstantFoldBinaryFP affects DCE consistency
Labels new issue
Assignees
Reporter guoxin049
    When compiling for some target, the behavior of ConstantFoldBinaryFP may differ depending on the host machine (x86 vs ARM). This is because constant folding is done on the host, and floating-point environment differences can trigger except on one host but not the other. This affects dead code elimination (DCE): code that could be removed on one host remains on another.

**Example code:**
```
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
    double a_pow, b_pow, c_x;
    a_pow = 1.7976931348623157e+308;
    c_x = -0.9999876894265599;
    b_pow = pow(a_pow, c_x);

    return 0;
}
```
**Built on x86 host machine, the ASM is as follows:**
```
main:
        mov     r0, #0
        bx lr
```
**Built on arm host machine, the ASM is as follows:**
```
main:
 push    {r11, lr}
        vldr    d0, .LCPI0_0
        vldr    d1, .LCPI0_1
        bl      pow
        mov     r0, #0
        pop     {r11, pc}
.LCPI0_0:
        .long   4294967295
        .long 2146435071
.LCPI0_1:
        .long   785361781
        .long 3220176870
```

When compiling for the same target, llvm_fenv_testexcept produces inconsistent results depending on the host machine. This leads to host-dependent behavior in constant folding and dead code elimination.

Has the considered addressing this host-dependence? Alternatively, are there recommended strategies or best practices to ensure consistent floating-point folding across different host platforms?

https://github.com/llvm/llvm-project/blob/ca84e9e8260983d17f02a76de8b1ee51cd3ed896/llvm/lib/Analysis/ConstantFolding.cpp#L2153-L2160

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to