[llvm] r342542 - [InstCombine] Don't transform sin/cos -> tanl if for half types
Benjamin Kramer via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 19 05:01:38 PDT 2018
Author: d0k
Date: Wed Sep 19 05:01:38 2018
New Revision: 342542
URL: http://llvm.org/viewvc/llvm-project?rev=342542&view=rev
Log:
[InstCombine] Don't transform sin/cos -> tanl if for half types
This is still unsafe for long double, we will transform things into tanl
even if tanl is for another type. But that's for someone else to fix.
Modified:
llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp
llvm/trunk/test/Transforms/InstCombine/fdiv-cos-sin.ll
Modified: llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp?rev=342542&r1=342541&r2=342542&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp Wed Sep 19 05:01:38 2018
@@ -746,6 +746,8 @@ bool llvm::hasUnaryFloatFn(const TargetL
LibFunc DoubleFn, LibFunc FloatFn,
LibFunc LongDoubleFn) {
switch (Ty->getTypeID()) {
+ case Type::HalfTyID:
+ return false;
case Type::FloatTyID:
return TLI->has(FloatFn);
case Type::DoubleTyID:
Modified: llvm/trunk/test/Transforms/InstCombine/fdiv-cos-sin.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/fdiv-cos-sin.ll?rev=342542&r1=342541&r2=342542&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/fdiv-cos-sin.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/fdiv-cos-sin.ll Wed Sep 19 05:01:38 2018
@@ -78,6 +78,19 @@ define double @fdiv_cos_sin_reassoc(doub
ret double %div
}
+define half @fdiv_cosf16_sinf16_reassoc(half %a) {
+; CHECK-LABEL: @fdiv_cosf16_sinf16_reassoc(
+; CHECK-NEXT: [[TMP1:%.*]] = call reassoc half @llvm.cos.f16(half [[A:%.*]])
+; CHECK-NEXT: [[TMP2:%.*]] = call reassoc half @llvm.sin.f16(half [[A]])
+; CHECK-NEXT: [[DIV:%.*]] = fdiv reassoc half [[TMP1]], [[TMP2]]
+; CHECK-NEXT: ret half [[DIV]]
+;
+ %1 = call reassoc half @llvm.cos.f16(half %a)
+ %2 = call reassoc half @llvm.sin.f16(half %a)
+ %div = fdiv reassoc half %1, %2
+ ret half %div
+}
+
define float @fdiv_cosf_sinf_reassoc(float %a) {
; CHECK-LABEL: @fdiv_cosf_sinf_reassoc(
; CHECK-NEXT: [[TANF:%.*]] = call reassoc float @tanf(float [[A:%.*]]) #1
@@ -102,12 +115,14 @@ define fp128 @fdiv_cosfp128_sinfp128_rea
ret fp128 %div
}
-declare double @llvm.cos.f64(double) #1
+declare half @llvm.cos.f16(half) #1
declare float @llvm.cos.f32(float) #1
+declare double @llvm.cos.f64(double) #1
declare fp128 @llvm.cos.fp128(fp128) #1
-declare double @llvm.sin.f64(double) #1
+declare half @llvm.sin.f16(half) #1
declare float @llvm.sin.f32(float) #1
+declare double @llvm.sin.f64(double) #1
declare fp128 @llvm.sin.fp128(fp128) #1
declare void @use(double)
More information about the llvm-commits
mailing list