[llvm] da077a5 - InstSimplify: Handle log10(exp10(x))

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 2 06:14:59 PDT 2023


Author: Matt Arsenault
Date: 2023-09-02T08:57:54-04:00
New Revision: da077a52c46a8d95f3e1bf060cfc199f76556f2d

URL: https://github.com/llvm/llvm-project/commit/da077a52c46a8d95f3e1bf060cfc199f76556f2d
DIFF: https://github.com/llvm/llvm-project/commit/da077a52c46a8d95f3e1bf060cfc199f76556f2d.diff

LOG: InstSimplify: Handle log10(exp10(x))

Copied from the exp/exp2 cases

https://reviews.llvm.org/D157894

Added: 
    

Modified: 
    llvm/lib/Analysis/InstructionSimplify.cpp
    llvm/test/Transforms/InstSimplify/log-exp-intrinsic.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index 040c2e55d87ced..15a802c85c373d 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -6170,8 +6170,11 @@ static Value *simplifyUnaryIntrinsic(Function *F, Value *Op0,
     break;
   case Intrinsic::log10:
     // log10(pow(10.0, x)) -> x
+    // log10(exp10(x)) -> x
     if (Q.CxtI->hasAllowReassoc() &&
-        match(Op0, m_Intrinsic<Intrinsic::pow>(m_SpecificFP(10.0), m_Value(X))))
+        (match(Op0, m_Intrinsic<Intrinsic::exp10>(m_Value(X))) ||
+         match(Op0,
+               m_Intrinsic<Intrinsic::pow>(m_SpecificFP(10.0), m_Value(X)))))
       return X;
     break;
   case Intrinsic::experimental_vector_reverse:

diff  --git a/llvm/test/Transforms/InstSimplify/log-exp-intrinsic.ll b/llvm/test/Transforms/InstSimplify/log-exp-intrinsic.ll
index 93e372f9da4ded..9793f2299443c6 100644
--- a/llvm/test/Transforms/InstSimplify/log-exp-intrinsic.ll
+++ b/llvm/test/Transforms/InstSimplify/log-exp-intrinsic.ll
@@ -194,9 +194,7 @@ define double @exp2_log2_exp2_log2_reassoc(double %a) {
 
 define double @log10_reassoc_exp10_strict(double %a) {
 ; CHECK-LABEL: @log10_reassoc_exp10_strict(
-; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.exp10.f64(double [[A:%.*]])
-; CHECK-NEXT:    [[TMP2:%.*]] = call reassoc double @llvm.log10.f64(double [[TMP1]])
-; CHECK-NEXT:    ret double [[TMP2]]
+; CHECK-NEXT:    ret double [[A:%.*]]
 ;
   %1 = call double @llvm.exp10.f64(double %a)
   %2 = call reassoc double @llvm.log10.f64(double %1)
@@ -231,11 +229,7 @@ define double @log10_exp10_log10_exp10(double %a) {
 
 define double @log10_exp10_log10_exp10_reassoc(double %a) {
 ; CHECK-LABEL: @log10_exp10_log10_exp10_reassoc(
-; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.exp10.f64(double [[A:%.*]])
-; CHECK-NEXT:    [[TMP2:%.*]] = call reassoc double @llvm.log10.f64(double [[TMP1]])
-; CHECK-NEXT:    [[TMP3:%.*]] = call double @llvm.exp10.f64(double [[TMP2]])
-; CHECK-NEXT:    [[TMP4:%.*]] = call reassoc double @llvm.log10.f64(double [[TMP3]])
-; CHECK-NEXT:    ret double [[TMP4]]
+; CHECK-NEXT:    ret double [[A:%.*]]
 ;
   %1 = call double @llvm.exp10.f64(double %a)
   %2 = call reassoc double @llvm.log10.f64(double %1)


        


More information about the llvm-commits mailing list