[llvm] 7cf8ecb - Mips: Mark MUL's existing HI0/LO0 defs dead in FastISel (#227230)

via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 29 03:00:45 PDT 2026


Author: Matt Arsenault
Date: 2026-09-29T10:00:38Z
New Revision: 7cf8ecb2ef8acc2bca15f2223a3635f5863a81a7

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

LOG: Mips: Mark MUL's existing HI0/LO0 defs dead in FastISel (#227230)

Added: 
    llvm/test/CodeGen/Mips/Fast-ISel/mul-dead-hilo.ll

Modified: 
    llvm/lib/Target/Mips/MipsFastISel.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/Mips/MipsFastISel.cpp b/llvm/lib/Target/Mips/MipsFastISel.cpp
index 8e79160c131f3..7d1f024002eaf 100644
--- a/llvm/lib/Target/Mips/MipsFastISel.cpp
+++ b/llvm/lib/Target/Mips/MipsFastISel.cpp
@@ -2147,10 +2147,10 @@ unsigned MipsFastISel::fastEmitInst_rr(unsigned MachineInstOpcode,
     Op0 = constrainOperandRegClass(II, Op0, II.getNumDefs());
     Op1 = constrainOperandRegClass(II, Op1, II.getNumDefs() + 1);
     BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, MIMD, II, ResultReg)
-      .addReg(Op0)
-      .addReg(Op1)
-      .addReg(Mips::HI0, RegState::ImplicitDefine | RegState::Dead)
-      .addReg(Mips::LO0, RegState::ImplicitDefine | RegState::Dead);
+        .addReg(Op0)
+        .addReg(Op1)
+        .setOperandDead(3)  // implicit-def $hi0
+        .setOperandDead(4); // implicit-def $lo0
     return ResultReg;
   }
 

diff  --git a/llvm/test/CodeGen/Mips/Fast-ISel/mul-dead-hilo.ll b/llvm/test/CodeGen/Mips/Fast-ISel/mul-dead-hilo.ll
new file mode 100644
index 0000000000000..2f7e661f3d58f
--- /dev/null
+++ b/llvm/test/CodeGen/Mips/Fast-ISel/mul-dead-hilo.ll
@@ -0,0 +1,19 @@
+; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -mtriple=mipsel -mcpu=mips32 -O0 -relocation-model=pic -stop-after=finalize-isel -o - < %s | FileCheck %s
+
+define i32 @mul(i32 %a, i32 %b) {
+  ; CHECK-LABEL: name: mul
+  ; CHECK: bb.0.entry:
+  ; CHECK-NEXT:   liveins: $a0, $a1
+  ; CHECK-NEXT: {{  $}}
+  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr32 = COPY $a1
+  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32 = COPY $a0
+  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gpr32 = COPY killed [[COPY1]]
+  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:gpr32 = COPY killed [[COPY]]
+  ; CHECK-NEXT:   [[MUL:%[0-9]+]]:gpr32 = MUL [[COPY2]], [[COPY3]], implicit-def dead $hi0, implicit-def dead $lo0
+  ; CHECK-NEXT:   $v0 = COPY [[MUL]]
+  ; CHECK-NEXT:   RetRA implicit $v0
+entry:
+  %0 = mul i32 %a, %b
+  ret i32 %0
+}


        


More information about the llvm-commits mailing list