Index: llvm/lib/Analysis/InstructionSimplify.cpp =================================================================== --- llvm/lib/Analysis/InstructionSimplify.cpp +++ llvm/lib/Analysis/InstructionSimplify.cpp @@ -6153,6 +6153,12 @@ match(Op0, m_Intrinsic(m_Value(X)))) return X; break; + case Intrinsic::exp10: + // exp10(log10(x)) -> x + if (Q.CxtI->hasAllowReassoc() && + match(Op0, m_Intrinsic(m_Value(X)))) + return X; + break; case Intrinsic::log: // log(exp(x)) -> x if (Q.CxtI->hasAllowReassoc() && Index: llvm/test/Transforms/InstSimplify/log-exp-intrinsic.ll =================================================================== --- llvm/test/Transforms/InstSimplify/log-exp-intrinsic.ll +++ llvm/test/Transforms/InstSimplify/log-exp-intrinsic.ll @@ -246,9 +246,7 @@ define double @exp10_reassoc_log10_strict(double %a) { ; CHECK-LABEL: @exp10_reassoc_log10_strict( -; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.log10.f64(double [[A:%.*]]) -; CHECK-NEXT: [[TMP2:%.*]] = call reassoc double @llvm.exp10.f64(double [[TMP1]]) -; CHECK-NEXT: ret double [[TMP2]] +; CHECK-NEXT: ret double [[A:%.*]] ; %1 = call double @llvm.log10.f64(double %a) %2 = call reassoc double @llvm.exp10.f64(double %1) @@ -283,11 +281,7 @@ define double @exp10_log10_exp10_log10_reassoc(double %a) { ; CHECK-LABEL: @exp10_log10_exp10_log10_reassoc( -; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.log10.f64(double [[A:%.*]]) -; CHECK-NEXT: [[TMP2:%.*]] = call reassoc double @llvm.exp10.f64(double [[TMP1]]) -; CHECK-NEXT: [[TMP3:%.*]] = call double @llvm.log10.f64(double [[TMP2]]) -; CHECK-NEXT: [[TMP4:%.*]] = call reassoc double @llvm.exp10.f64(double [[TMP3]]) -; CHECK-NEXT: ret double [[TMP4]] +; CHECK-NEXT: ret double [[A:%.*]] ; %1 = call double @llvm.log10.f64(double %a) %2 = call reassoc double @llvm.exp10.f64(double %1)