[llvm] [LLVM] Slay undead copysign code (PR #111269)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Sun Oct 13 22:25:57 PDT 2024
================
@@ -1649,12 +1649,19 @@ void DAGTypeLegalizer::ExpandFloatRes_FCEIL(SDNode *N,
void DAGTypeLegalizer::ExpandFloatRes_FCOPYSIGN(SDNode *N,
SDValue &Lo, SDValue &Hi) {
- ExpandFloatRes_Binary(N, GetFPLibCall(N->getValueType(0),
- RTLIB::COPYSIGN_F32,
- RTLIB::COPYSIGN_F64,
- RTLIB::COPYSIGN_F80,
- RTLIB::COPYSIGN_F128,
- RTLIB::COPYSIGN_PPCF128), Lo, Hi);
+
+ assert(N->getValueType(0) == MVT::ppcf128 &&
+ "Logic only correct for ppcf128!");
+ SDLoc DL = SDLoc(N);
+ SDValue Tmp = SDValue();
+ GetExpandedFloat(N->getOperand(0), Lo, Tmp);
+
+ Hi = DAG.getNode(ISD::FCOPYSIGN, DL, Tmp.getValueType(), Tmp,
+ N->getOperand(1));
+ // a double-double is Hi + Lo, so if Hi flips sign, so must Lo
+ Lo = DAG.getSelectCC(DL, Tmp, Hi, Lo,
+ DAG.getNode(ISD::FNEG, DL, Lo.getValueType(), Lo),
+ ISD::SETEQ);
----------------
arsenm wrote:
Using SETEQ for FP types is weird, since it's the case that may be oeq or ueq. Can this break the handling of nan sign bits?
Can this just be emitted as another copysign?
https://github.com/llvm/llvm-project/pull/111269
More information about the llvm-commits
mailing list