[llvm] [AMDGPU] Eliminate unnecessary packing in wider f16 vectors for sdwa/opsel-able instruction (PR #137137)

Vikash Gupta via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 9 02:44:52 PST 2025


================
@@ -1369,6 +1457,434 @@ bool SIPeepholeSDWALegacy::runOnMachineFunction(MachineFunction &MF) {
   return SIPeepholeSDWA().run(MF);
 }
 
+static bool isSrcDestFP16Bits(MachineInstr *MI, const SIInstrInfo *TII) {
+  static const DenseSet<unsigned> FP16BitOpcodes = {
+      AMDGPU::V_CVT_F16_U16_e32,       AMDGPU::V_CVT_F16_U16_e64,
+      AMDGPU::V_CVT_F16_I16_e32,       AMDGPU::V_CVT_F16_I16_e64,
+      AMDGPU::V_RCP_F16_e64,           AMDGPU::V_RCP_F16_e32,
+      AMDGPU::V_RSQ_F16_e64,           AMDGPU::V_RSQ_F16_e32,
+      AMDGPU::V_SQRT_F16_e64,          AMDGPU::V_SQRT_F16_e32,
+      AMDGPU::V_LOG_F16_e64,           AMDGPU::V_LOG_F16_e32,
+      AMDGPU::V_EXP_F16_e64,           AMDGPU::V_EXP_F16_e32,
+      AMDGPU::V_SIN_F16_e64,           AMDGPU::V_SIN_F16_e32,
+      AMDGPU::V_COS_F16_e64,           AMDGPU::V_COS_F16_e32,
+      AMDGPU::V_FLOOR_F16_e64,         AMDGPU::V_FLOOR_F16_e32,
+      AMDGPU::V_CEIL_F16_e64,          AMDGPU::V_CEIL_F16_e32,
+      AMDGPU::V_TRUNC_F16_e64,         AMDGPU::V_TRUNC_F16_e32,
+      AMDGPU::V_RNDNE_F16_e64,         AMDGPU::V_RNDNE_F16_e32,
+      AMDGPU::V_FRACT_F16_e64,         AMDGPU::V_FRACT_F16_e32,
+      AMDGPU::V_FREXP_MANT_F16_e64,    AMDGPU::V_FREXP_MANT_F16_e32,
+      AMDGPU::V_FREXP_EXP_I16_F16_e64, AMDGPU::V_FREXP_EXP_I16_F16_e32,
+      AMDGPU::V_LDEXP_F16_e64,         AMDGPU::V_LDEXP_F16_e32,
+      AMDGPU::V_ADD_F16_e64,           AMDGPU::V_ADD_F16_e32,
+      AMDGPU::V_SUB_F16_e64,           AMDGPU::V_SUB_F16_e32,
+      AMDGPU::V_SUBREV_F16_e64,        AMDGPU::V_SUBREV_F16_e32,
+      AMDGPU::V_MUL_F16_e64,           AMDGPU::V_MUL_F16_e32,
+      AMDGPU::V_MAX_F16_e64,           AMDGPU::V_MAX_F16_e32,
+      AMDGPU::V_MIN_F16_e64,           AMDGPU::V_MIN_F16_e32,
+      AMDGPU::V_MAD_F16_e64,           AMDGPU::V_FMA_F16_e64,
+      AMDGPU::V_DIV_FIXUP_F16_e64};
+
+  unsigned Opcode = MI->getOpcode();
+  if (TII->isSDWA(Opcode))
+    Opcode = AMDGPU::getBasicFromSDWAOp(Opcode);
+
+  return FP16BitOpcodes.contains(Opcode);
----------------
vg0204 wrote:

Attempted to do it, is it the apt to do this way!


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


More information about the llvm-commits mailing list