[llvm] [InstCombine] Transform (fcmp + fadd + sel) into (fcmp + sel + fadd) (PR #106492)
Nuno Lopes via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 27 14:21:11 PST 2024
nunoplopes wrote:
This patch is incorrect w.r.t. to flags. See Alive2's report:
```llvm
define float @test_fcmp_ogt_fadd_select_constant(float %in) {
%cmp1 = fcmp ogt float %in, 0.000000
%add = fadd float %in, 1.000000
%sel = select nnan nsz i1 %cmp1, float %add, float 1.000000
ret float %sel
}
=>
define float @test_fcmp_ogt_fadd_select_constant(float %in) {
%sel = fmax nnan nsz float %in, 0.000000
%add = fadd nnan nsz float %sel, 1.000000
ret float %add
}
Transformation doesn't verify! (unsound)
ERROR: Target is more poisonous than source
Example:
float %in = #x7f800002 (SNaN)
Source:
i1 %cmp1 = #x0 (0)
float %add = #x7f800002 (SNaN)
float %sel = #x3f800000 (1)
Target:
float %sel = poison
float %add = poison
Source value: #x3f800000 (1)
Target value: poison
```
https://github.com/llvm/llvm-project/pull/106492
More information about the llvm-commits
mailing list