[llvm] [AMDGPU][GlobalISel] Add BF16 widening to V2BF16 for packed instructions (PR #214370)

Lukas Sommer via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 6 01:44:30 PDT 2026


================
@@ -2286,6 +2290,40 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST_,
   verify(*ST.getInstrInfo());
 }
 
+bool AMDGPULegalizerInfo::legalizeScalarBF16ToPackedBF16Op(
+    MachineInstr &MI, MachineRegisterInfo &MRI, MachineIRBuilder &B) const {
+  Register Dst = MI.getOperand(0).getReg();
+  LLT DstTy = MRI.getType(Dst);
+
+  // Only handle scalar bf16
+  if (DstTy != LLT::bfloat16())
+    return false;
+
+  unsigned Opc = MI.getOpcode();
+  LLT V2BF16 = LLT::fixed_vector(2, LLT::bfloat16());
+  Register UndefBF16 = B.buildUndef(LLT::bfloat16()).getReg(0);
+
+  // Widen all source operands to v2bf16
+  SmallVector<Register, 3> WideSrcs;
+  for (unsigned I = 1, E = MI.getNumOperands(); I < E; ++I) {
----------------
sommerlukas wrote:

Nit: Could use a range-for loop here with `drop_begin`. 

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


More information about the llvm-commits mailing list