[llvm] [LLVM] Slay undead copysign code (PR #111269)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 14 21:59:37 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);
----------------
workingjubilee wrote:
Basically, the answer of "how does `ppc_fp128` work for this" is "mmmostly by not really caring too hard, honestly".
Which doesn't mean I am against using the SETUEQ version. If I understand how the `getSelectCC` API works it does _sound_ more correct?
https://github.com/llvm/llvm-project/pull/111269
More information about the llvm-commits
mailing list