efriedma added inline comments.
================ Comment at: llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:524 + CallConv)) + return; EVT ValueVT = Val.getValueType(); ---------------- pratlucas wrote: > efriedma wrote: > > I'm not sure I understand why the standard getCopyFromParts/getCopyToParts > > codepath doesn't work. Is the issue that it uses FP_ROUND/FP_EXTEND to > > promote from f16 to f32? > Yes, the issue is the usage of FP_ROUND/FP_EXTEND indeed. Those cause the > argument to be converted from f16 into f32 - with a `vcvtb.f16.f32` for > instance - instead of simply being placed the value in the LSBs as required > by the AAPCS. That makes sense. It feels a little weird to have a TLI method to do the splitting, as opposed to adding an extra check to the shared codepath, but I guess this way is more flexible if someone else needs a similar change in the future. One other thing to consider is that we could make f16 a "legal" type for all ARM subtargets with floating-point registers, regardless of whether the target actually has native f16 arithmetic instructions. We do this on AArch64. That would reduce the number of different ways to handle f16 values, and I think this change would be unnecessary. ================ Comment at: llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:916 ExtendKind = ISD::ZERO_EXTEND; - getCopyToParts(DAG, dl, Val.getValue(Val.getResNo() + Value), &Parts[Part], ---------------- (Accidental change?) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D75169/new/ https://reviews.llvm.org/D75169 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits