[llvm] ddc7d4b - Hexagon: Don't duplicate the PC def when converting a return to L4_return (#225059)

via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 21 06:50:47 PDT 2026


Author: Matt Arsenault
Date: 2026-09-21T15:50:39+02:00
New Revision: ddc7d4b3b43be5ef26671c19035761fb84a40388

URL: https://github.com/llvm/llvm-project/commit/ddc7d4b3b43be5ef26671c19035761fb84a40388
DIFF: https://github.com/llvm/llvm-project/commit/ddc7d4b3b43be5ef26671c19035761fb84a40388.diff

LOG: Hexagon: Don't duplicate the PC def when converting a return to L4_return (#225059)

Added: 
    

Modified: 
    llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp
    llvm/test/CodeGen/Hexagon/copy-to-combine-const64.mir
    llvm/test/CodeGen/MIR/Hexagon/bundled-call-site-info.mir

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp b/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp
index efb70cf54d378..13a6fd6a9f68b 100644
--- a/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp
@@ -1005,11 +1005,12 @@ void HexagonFrameLowering::insertEpilogueInBlock(MachineBasicBlock &MBB) const {
       return;
     }
     unsigned NewOpc = Hexagon::L4_return;
-    MachineInstr *NewI = BuildMI(MBB, RetI, dl, HII.get(NewOpc))
-      .addDef(Hexagon::D15)
-      .addReg(Hexagon::R30);
-    // Transfer the function live-out registers.
-    NewI->copyImplicitOps(MF, *RetI);
+    MachineInstrBuilder NewI = BuildMI(MBB, RetI, dl, HII.get(NewOpc))
+                                   .addDef(Hexagon::D15)
+                                   .addReg(Hexagon::R30);
+    // Avoid duplicating the pc implicit-def.
+    for (const MachineOperand &MO : drop_begin(RetI->implicit_operands()))
+      NewI.add(MO);
     MBB.erase(RetI);
   } else {
     // L2_deallocframe instruction after it.

diff  --git a/llvm/test/CodeGen/Hexagon/copy-to-combine-const64.mir b/llvm/test/CodeGen/Hexagon/copy-to-combine-const64.mir
index ec2a55bb5ff9d..14c219bec35b9 100644
--- a/llvm/test/CodeGen/Hexagon/copy-to-combine-const64.mir
+++ b/llvm/test/CodeGen/Hexagon/copy-to-combine-const64.mir
@@ -25,5 +25,5 @@ body: |
     $r1 = A2_tfrsi 32768
     $r2 = A2_tfrsi 1
     J2_call @f1, hexagoncsr, implicit-def dead $pc, implicit-def dead $r31, implicit $r29, implicit killed $r0, implicit killed $r1, implicit killed $r2, implicit-def $r29
-    $d15 = L4_return $r30, implicit-def $pc, implicit-def $r29, implicit $framekey, implicit-def dead $pc
+    $d15 = L4_return $r30, implicit-def $pc, implicit-def $r29, implicit $framekey
 ...

diff  --git a/llvm/test/CodeGen/MIR/Hexagon/bundled-call-site-info.mir b/llvm/test/CodeGen/MIR/Hexagon/bundled-call-site-info.mir
index cdcfdae270341..3c018713913a9 100644
--- a/llvm/test/CodeGen/MIR/Hexagon/bundled-call-site-info.mir
+++ b/llvm/test/CodeGen/MIR/Hexagon/bundled-call-site-info.mir
@@ -43,7 +43,7 @@ body:             |
     }
     BUNDLE implicit-def dead $r0, implicit-def $d15, implicit-def $r30, implicit-def $r31, implicit-def $pc, implicit-def $r29, implicit killed $r30, implicit killed $framekey {
       $r0 = A2_tfrsi 0
-      $d15 = L4_return killed $r30, implicit-def $pc, implicit-def $r29, implicit killed $framekey, implicit-def dead $pc, implicit internal killed $r0
+      $d15 = L4_return killed $r30, implicit-def $pc, implicit-def $r29, implicit killed $framekey, implicit internal killed $r0
     }
 
 ...


        


More information about the llvm-commits mailing list