[llvm] [Hexagon] Add XQFloat extraneous conversion removal pass (PR #207236)

Fateme Hosseini via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 2 14:50:27 PDT 2026


================
@@ -253,10 +261,478 @@ struct HexagonXQFloatGenerator : public MachineFunctionPass {
       OriginalMI; // Hold the instructions to be deleted
 };
 
+// Print machine function
+static void debug_print([[maybe_unused]] MachineFunction &MF) {
+  dbgs() << "\n=== Printing function ===\n";
+#ifndef NDEBUG
+  for (MachineBasicBlock &MBB : MF)
+    MBB.dump();
+#endif // NDEBUG
+}
+
 // This class removes redundant vector convert instructions from qf to hf/sf.
 // Additionally, it relaces use of sf/hf registers with qf types.
 // The resulting code is complete without dangling instructions.
 // FIXME: Liveness is not preserved.
+class VectorConvertRemove {
+
+public:
+  VectorConvertRemove(MachineFunction &_MF, MachineRegisterInfo *_MRI,
+                      const HexagonSubtarget *_HST)
+      : MF(_MF), MRI(_MRI), HST(_HST) {
+    HII = HST->getInstrInfo();
+  }
+
+  void run();
+
+private:
+  MachineFunction &MF;
+  MachineRegisterInfo *MRI;
+  const HexagonSubtarget *HST;
+  const HexagonInstrInfo *HII;
+
+  enum Operation { Add16, Add32, Sub16, Sub32, Mul16, Mul32 };
+  // Helper functions
+  void handle_addsub_sf_sf(MachineInstr &, Register &, Register &, Register &,
+                           bool);
+  void handle_addsub_qf_sf(MachineInstr &, Register &, Register &, Register &,
+                           bool);
+  void handle_addsubmul_hf_hf(MachineInstr &, Register &, Register &,
+                              Register &, Operation);
+  void handle_addsubmul_qf_hf(MachineInstr &, Register &, Register &,
+                              Register &, Operation);
+  void handle_qf32_mul_sf_sf(MachineInstr &, Register &, Register &,
+                             Register &);
+  void handle_qf16_mul_hf_hf(MachineInstr &, Register &, Register &,
----------------
fhossein-quic wrote:

@quic-santdas: Should I keep `handle_qf16_mul_hf_hf` here? It does not have any definition.

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


More information about the llvm-commits mailing list