[llvm] 310f839 - DAG: Lower is.fpclass fcInf to fcmp of fabs
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 7 14:00:15 PDT 2023
Author: Matt Arsenault
Date: 2023-07-07T17:00:10-04:00
New Revision: 310f83961269a574d753932dc5f0c8fd44027781
URL: https://github.com/llvm/llvm-project/commit/310f83961269a574d753932dc5f0c8fd44027781
DIFF: https://github.com/llvm/llvm-project/commit/310f83961269a574d753932dc5f0c8fd44027781.diff
LOG: DAG: Lower is.fpclass fcInf to fcmp of fabs
InstCombine should have taken care of this, but I think
this is more useful in the future when the expansion
tries to handle multiple cases at a time with fcmp.
x87 looks worse to me but the only thing I know about it is that
I aggressively do not care about it.
https://reviews.llvm.org/D143198
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
llvm/test/CodeGen/PowerPC/is_fpclass.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
index e1296e69447944..41680061ff1f0e 100644
--- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -8125,6 +8125,18 @@ SDValue TargetLowering::expandIS_FPCLASS(EVT ResultVT, SDValue Op,
return DAG.getSetCC(DL, ResultVT, Op, Op,
IsInverted ? ISD::SETO : ISD::SETUO);
}
+
+ if (Test == fcInf &&
+ isCondCodeLegalOrCustom(IsInverted ? ISD::SETUNE : ISD::SETOEQ,
+ OperandVT.getScalarType().getSimpleVT()) &&
+ isOperationLegalOrCustom(ISD::FABS, OperandVT.getScalarType())) {
+ // isinf(x) --> fabs(x) == inf
+ SDValue Abs = DAG.getNode(ISD::FABS, DL, OperandVT, Op);
+ SDValue Inf =
+ DAG.getConstantFP(APFloat::getInf(Semantics), DL, OperandVT);
+ return DAG.getSetCC(DL, ResultVT, Abs, Inf,
+ IsInverted ? ISD::SETUNE : ISD::SETOEQ);
+ }
}
// In the general case use integer operations.
diff --git a/llvm/test/CodeGen/PowerPC/is_fpclass.ll b/llvm/test/CodeGen/PowerPC/is_fpclass.ll
index a4368a1dca26e3..baf69dd787b250 100644
--- a/llvm/test/CodeGen/PowerPC/is_fpclass.ll
+++ b/llvm/test/CodeGen/PowerPC/is_fpclass.ll
@@ -117,13 +117,12 @@ define i1 @isinf_float(float %x) nounwind {
define i1 @isinf_ppc_fp128(ppc_fp128 %x) nounwind {
; CHECK-LABEL: isinf_ppc_fp128:
; CHECK: # %bb.0:
-; CHECK-NEXT: mffprd 3, 1
-; CHECK-NEXT: li 4, 2047
-; CHECK-NEXT: clrldi 3, 3, 1
-; CHECK-NEXT: rldic 4, 4, 52, 1
-; CHECK-NEXT: cmpd 3, 4
-; CHECK-NEXT: li 3, 0
+; CHECK-NEXT: addis 3, 2, .LCPI9_0 at toc@ha
+; CHECK-NEXT: xsabsdp 0, 1
; CHECK-NEXT: li 4, 1
+; CHECK-NEXT: lfs 1, .LCPI9_0 at toc@l(3)
+; CHECK-NEXT: li 3, 0
+; CHECK-NEXT: fcmpu 0, 0, 1
; CHECK-NEXT: iseleq 3, 4, 3
; CHECK-NEXT: blr
%1 = call i1 @llvm.is.fpclass.ppcf128(ppc_fp128 %x, i32 516) ; 0x204 = "inf"
More information about the llvm-commits
mailing list