[llvm] [AArch64][GlobalISel] Improve lowering of vector fp16 fptrunc (PR #163398)

David Green via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 30 02:40:39 PDT 2025


================
@@ -8486,8 +8488,31 @@ LegalizerHelper::lowerFPTRUNC_F64_TO_F16(MachineInstr &MI) {
   assert(MRI.getType(Dst).getScalarType() == LLT::scalar(16) &&
          MRI.getType(Src).getScalarType() == LLT::scalar(64));
 
-  if (MRI.getType(Src).isVector()) // TODO: Handle vectors directly.
-    return UnableToLegalize;
+  if (MRI.getType(Src).isVector()) {
+    Register Dst = MI.getOperand(0).getReg();
+    Register Src = MI.getOperand(1).getReg();
+    LLT DstTy = MRI.getType(Dst);
+    LLT SrcTy = MRI.getType(Src);
+
+    LLT MidTy = LLT::fixed_vector(SrcTy.getNumElements(), LLT::scalar(32));
+
+    MachineInstrBuilder Mid;
+    MachineInstrBuilder Fin;
+    MIRBuilder.setInstrAndDebugLoc(MI);
+    switch (MI.getOpcode()) {
+    default:
+      return UnableToLegalize;
----------------
davemgreen wrote:

When is this not G_FPTRUNC?

https://github.com/llvm/llvm-project/pull/163398


More information about the llvm-commits mailing list