[llvm] [SDAG] Fix deferring constrained function calls (PR #153029)
Kevin P. Neal via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 23 06:37:33 PDT 2025
kpneal wrote:
I finally got a large enough block of time for this PR. Using this test code:
```
target triple = "x86_64-unknown-linux-gnu"
define float @test(float %a, float %b, float %c, float %d, float %e, float %f, float %g, float %h) strictfp {
entry:
%mul1 = call float @llvm.experimental.constrained.fmul.f32(float %a, float %b, metadata !"round.dynamic", metadata !"fpexcept.maytrap")
%mul2 = call float @llvm.experimental.constrained.fmul.f32(float %c, float %d, metadata !"round.dynamic", metadata !"fpexcept.maytrap")
call void @llvm.set.rounding(i32 3)
%add1 = call float @llvm.experimental.constrained.fadd.f32(float %mul1, float %mul2, metadata !"round.dynamic", metadata !"fpexcept.ignore")
%add2 = call float @llvm.experimental.constrained.fadd.f32(float %mul1, float %e, metadata !"round.dynamic", metadata !"fpexcept.ignore")
%add3 = call float @llvm.experimental.constrained.fadd.f32(float %mul1, float %f, metadata !"round.dynamic", metadata !"fpexcept.ignore")
call void @externfunc(i32 0)
%add4 = call float @llvm.experimental.constrained.fsub.f32(float %mul1, float %g, metadata !"round.dynamic", metadata !"fpexcept.strict")
%add5 = call float @llvm.experimental.constrained.fsub.f32(float %mul1, float %h, metadata !"round.dynamic", metadata !"fpexcept.strict")
%use1 = call float @llvm.experimental.constrained.fmul.f32(float %add1, float %add2, metadata !"round.dynamic", metadata !"fpexcept.maytrap")
%use2 = call float @llvm.experimental.constrained.fmul.f32(float %use1, float %add3, metadata !"round.dynamic", metadata !"fpexcept.maytrap")
%use3 = call float @llvm.experimental.constrained.fmul.f32(float %use2, float %add4, metadata !"round.dynamic", metadata !"fpexcept.maytrap")
%use4 = call float @llvm.experimental.constrained.fmul.f32(float %use3, float %add5, metadata !"round.dynamic", metadata !"fpexcept.maytrap")
ret float %use4
}
declare void @externfunc(i32)
```
This patch is strictly an improvement over what we have. I have no more concerns.
https://github.com/llvm/llvm-project/pull/153029
More information about the llvm-commits
mailing list