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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits