[llvm] 17a9170 - InstCombine: Fix wrong insert point for sqrt -> copysign simplify (#180838)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 11 00:15:15 PST 2026
Author: Matt Arsenault
Date: 2026-02-11T09:15:11+01:00
New Revision: 17a9170a7eaa302d1bc71bb482a0001acd65c7b6
URL: https://github.com/llvm/llvm-project/commit/17a9170a7eaa302d1bc71bb482a0001acd65c7b6
DIFF: https://github.com/llvm/llvm-project/commit/17a9170a7eaa302d1bc71bb482a0001acd65c7b6.diff
LOG: InstCombine: Fix wrong insert point for sqrt -> copysign simplify (#180838)
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
llvm/test/Transforms/InstCombine/simplify-demanded-fpclass-sqrt.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
index ec59aa7314963..32b16d6fc0688 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
@@ -3157,6 +3157,8 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
if (Known.KnownFPClasses == fcZero) {
if (FMF.noSignedZeros())
return ConstantFP::getZero(VTy);
+ IRBuilderBase::InsertPointGuard Guard(Builder);
+ Builder.SetInsertPoint(CI);
Value *Copysign = Builder.CreateCopySign(ConstantFP::getZero(VTy),
CI->getArgOperand(0), FMF);
diff --git a/llvm/test/Transforms/InstCombine/simplify-demanded-fpclass-sqrt.ll b/llvm/test/Transforms/InstCombine/simplify-demanded-fpclass-sqrt.ll
index dc24630c43231..6bde4c1e19e76 100644
--- a/llvm/test/Transforms/InstCombine/simplify-demanded-fpclass-sqrt.ll
+++ b/llvm/test/Transforms/InstCombine/simplify-demanded-fpclass-sqrt.ll
@@ -36,6 +36,18 @@ define nofpclass(inf nan norm sub) float @ret_only_zero_sqrt(float %x) {
ret float %result
}
+define nofpclass(inf nan norm sub) float @ret_only_zero_sqrt_insert_point(float %x) {
+; CHECK-LABEL: define nofpclass(nan inf sub norm) float @ret_only_zero_sqrt_insert_point(
+; CHECK-SAME: float [[X:%.*]]) {
+; CHECK-NEXT: [[RESULT:%.*]] = call float @llvm.copysign.f32(float 0.000000e+00, float [[X]])
+; CHECK-NEXT: [[BARRIER:%.*]] = call float @llvm.arithmetic.fence.f32(float [[RESULT]])
+; CHECK-NEXT: ret float [[BARRIER]]
+;
+ %result = call float @llvm.sqrt.f32(float %x)
+ %barrier = call float @llvm.arithmetic.fence.f32(float %result)
+ ret float %barrier
+}
+
define nofpclass(inf nan norm sub) float @ret_only_zero_sqrt_preserve_flags(float %x) {
; CHECK-LABEL: define nofpclass(nan inf sub norm) float @ret_only_zero_sqrt_preserve_flags(
; CHECK-SAME: float [[X:%.*]]) {
More information about the llvm-commits
mailing list