[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