[llvm] SystemZ: Stop casting fp typed atomic loads in the IR (PR #90768)
Ulrich Weigand via llvm-commits
llvm-commits at lists.llvm.org
Thu May 2 11:32:40 PDT 2024
================
@@ -6263,8 +6283,25 @@ SystemZTargetLowering::LowerOperationWrapper(SDNode *N,
MachineMemOperand *MMO = cast<AtomicSDNode>(N)->getMemOperand();
SDValue Res = DAG.getMemIntrinsicNode(SystemZISD::ATOMIC_LOAD_128,
DL, Tys, Ops, MVT::i128, MMO);
- Results.push_back(lowerGR128ToI128(DAG, Res));
- Results.push_back(Res.getValue(1));
+
+ EVT VT = N->getValueType(0);
+
+ if (VT == MVT::i128 || isTypeLegal(MVT::i128)) {
+ SDValue Lowered = lowerGR128ToI128(DAG, Res);
+ Results.push_back(DAG.getBitcast(VT, Lowered));
+ Results.push_back(Res.getValue(1));
+ } else {
+ // For the f128 case, after type legalization, we cannot produce a bitcast
+ // with an illegal type (i.e. i128), so introduce a stack store and reload
+ //
+ // FIXME: Really v2i64 should be legal, and should be used in place of
+ // unttyped. Then we could emit the bitcast which will potentially avoid
+ // the stack usage after combining.
----------------
uweigand wrote:
Comment should be updated now that we're no longer using the stack.
https://github.com/llvm/llvm-project/pull/90768
More information about the llvm-commits
mailing list