[llvm] AMDGPU: Custom lower fptrunc vectors for f32 -> f16 (PR #141883)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Thu May 29 00:43:02 PDT 2025


================
@@ -2749,6 +2753,21 @@ bool AMDGPULegalizerInfo::legalizeMinNumMaxNum(LegalizerHelper &Helper,
   return Helper.lowerFMinNumMaxNum(MI) == LegalizerHelper::Legalized;
 }
 
+bool AMDGPULegalizerInfo::legalizeFPTrunc(LegalizerHelper &Helper,
+                                          MachineInstr &MI,
+                                          MachineRegisterInfo &MRI) const {
+  Register DstReg = MI.getOperand(0).getReg();
+  LLT DstTy = MRI.getType(DstReg);
+  assert(DstTy.isVector() && DstTy.getNumElements() > 2);
+  LLT EltTy = DstTy.getElementType();
+  assert(EltTy == S16 && "Only handle vectors of half");
+
+  // Split vector to packs.
+  LLT PkTy = LLT::fixed_vector(2, EltTy);
+  return Helper.fewerElementsVector(MI, /*TypeIdx=*/0, PkTy) ==
+         LegalizerHelper::Legalized;
+}
+
----------------
arsenm wrote:

You should just need `.clampMaxNumElements(0, S16, 2)`

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


More information about the llvm-commits mailing list