[llvm] [SimplifyLibCalls] Add f128 type for merging sqrt into the power of exp (PR #112373)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 15 08:04:23 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: None (lizhijin1024)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/112373.diff
2 Files Affected:
- (modified) llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp (+3)
- (modified) llvm/test/Transforms/InstCombine/sqrt.ll (+22)
``````````diff
diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
index db2acb9eed0938..aa7864ad4f6c0e 100644
--- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
@@ -2720,6 +2720,9 @@ Value *LibCallSimplifier::mergeSqrtToExp(CallInst *CI, IRBuilderBase &B) {
ExpLb = LibFunc_exp;
Exp2Lb = LibFunc_exp2;
Exp10Lb = LibFunc_exp10;
+ } else if (CI->getType()->getScalarType()->isFP128Ty()) {
+ ExpLb = LibFunc_expl;
+ Exp2Lb = LibFunc_exp2l;
} else
return nullptr;
} else
diff --git a/llvm/test/Transforms/InstCombine/sqrt.ll b/llvm/test/Transforms/InstCombine/sqrt.ll
index f72fe5a6a5817b..6168a61cf86cb0 100644
--- a/llvm/test/Transforms/InstCombine/sqrt.ll
+++ b/llvm/test/Transforms/InstCombine/sqrt.ll
@@ -201,6 +201,25 @@ define <2 x float> @sqrt_exp_vec(<2 x float> %x) {
ret <2 x float> %res
}
+define dso_local fp128 @sqrt_exp_long_double(fp128 %x, fp128 %y) {
+; CHECK-LABEL: @sqrt_exp_long_double(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[MERGED_SQRT:%.*]] = fmul fast fp128 [[X:%.*]], 0xL00000000000000003FFE000000000000
+; CHECK-NEXT: [[TMP0:%.*]] = call fast fp128 @llvm.exp.f128(fp128 [[MERGED_SQRT]])
+; CHECK-NEXT: [[MERGED_SQRT1:%.*]] = fmul fast fp128 [[Y:%.*]], 0xL00000000000000003FFE000000000000
+; CHECK-NEXT: [[TMP1:%.*]] = call fast fp128 @llvm.exp2.f128(fp128 [[MERGED_SQRT1]])
+; CHECK-NEXT: [[ADD:%.*]] = fadd fast fp128 [[TMP0]], [[TMP1]]
+; CHECK-NEXT: ret fp128 [[ADD]]
+;
+entry:
+ %0 = call fast fp128 @llvm.exp.f128(fp128 %x)
+ %1 = call fast fp128 @llvm.sqrt.f128(fp128 %0)
+ %2 = call fast fp128 @llvm.exp2.f128(fp128 %y)
+ %3 = call fast fp128 @llvm.sqrt.f128(fp128 %2)
+ %add = fadd fast fp128 %1, %3
+ ret fp128 %add
+}
+
declare i32 @foo(double)
declare double @sqrt(double) readnone
declare float @sqrtf(float)
@@ -212,3 +231,6 @@ declare double @exp2(double)
declare double @exp10(double)
declare <2 x float> @llvm.exp.v2f32(<2 x float>)
declare <2 x float> @llvm.sqrt.v2f32(<2 x float>)
+declare fp128 @llvm.exp.f128(fp128)
+declare fp128 @llvm.sqrt.f128(fp128)
+declare fp128 @llvm.exp2.f128(fp128)
``````````
</details>
https://github.com/llvm/llvm-project/pull/112373
More information about the llvm-commits
mailing list