| Issue |
113989
|
| Summary |
Wrong folding to `fabs` (`NaN` not handled)
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
bongjunj
|
https://github.com/llvm/llvm-project/blob/1ceccbb0dd9d8539fec2213566fe6cc2a05b7993/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp#L2814-L2885
Alive2 report: https://alive2.llvm.org/ce/z/y2UAwe
```llvm
----------------------------------------
define double @select_fcmp_ole_zero.2(double %x) {
#0:
%lezero = fcmp ole double %x, 0.000000
%negx = fsub double 0.000000, %x
%fabs = select i1 %lezero, double %negx, double %x
ret double %fabs
}
=>
define double @select_fcmp_ole_zero.2(double %x) {
#0:
%fabs = fabs double %x
ret double %fabs
}
Transformation doesn't verify!
ERROR: Value mismatch
Example:
double %x = #xfff0000000000008 (SNaN)
Source:
i1 %lezero = #x0 (0)
double %negx = #x7ff0000000000008 (SNaN)
double %fabs = #xfff0000000000008 (SNaN)
Target:
double %fabs = #x7ff0000000000008 (SNaN)
Source value: #xfff0000000000008 (SNaN)
Target value: #x7ff0000000000008 (SNaN)
----------------------------------------
define double @select_fcmp_nnan_ole_zero.2(double %x) {
#0:
%lezero = fcmp ole double %x, 0.000000
%negx = fsub nnan double 0.000000, %x
%fabs = select i1 %lezero, double %negx, double %x
ret double %fabs
}
=>
define double @select_fcmp_nnan_ole_zero.2(double %x) {
#0:
%fabs = fabs double %x
ret double %fabs
}
Transformation doesn't verify!
ERROR: Value mismatch
Example:
double %x = #xfff0000000004000 (SNaN)
Source:
i1 %lezero = #x0 (0)
double %negx = poison
double %fabs = #xfff0000000004000 (SNaN)
Target:
double %fabs = #x7ff0000000004000 (SNaN)
Source value: #xfff0000000004000 (SNaN)
Target value: #x7ff0000000004000 (SNaN)
----------------------------------------
define half @select_fcmp_nnan_ugt_negzero.2(half %x) {
#0:
%#1 = fcmp ugt half %x, 0x8000
%negx = fsub nnan half 0x0000, %x
%#2 = fadd half %negx, 0x0000
%fabs = select i1 %#1, half %x, half %#2
ret half %fabs
}
=>
define half @select_fcmp_nnan_ugt_negzero.2(half %x) {
#0:
%fabs = fabs half %x
ret half %fabs
}
Transformation doesn't verify!
ERROR: Value mismatch
Example:
half %x = #xfc04 (SNaN)
Source:
i1 %#1 = #x1 (1)
half %negx = poison
half %#2 = poison
half %fabs = #xfc04 (SNaN)
Target:
half %fabs = #x7c04 (SNaN)
Source value: #xfc04 (SNaN)
Target value: #x7c04 (SNaN)
Summary:
0 correct transformations
3 incorrect transformations
0 failed-to-prove transformations
0 Alive2 errors
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs