Skip to content

Commit f6289f1

Browse files
authored
[LoongArch] Enable AllNBitUsers checking for {DIV,MOD}.W{U} with div32 enabled (#118776)
1 parent 05b907f commit f6289f1

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

llvm/lib/Target/LoongArch/LoongArchOptWInstrs.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,6 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
139139
case LoongArch::MULH_WU:
140140
case LoongArch::MULW_D_W:
141141
case LoongArch::MULW_D_WU:
142-
// TODO: {DIV,MOD}.{W,WU} consumes the upper 32 bits before LA664+.
143-
// case LoongArch::DIV_W:
144-
// case LoongArch::DIV_WU:
145-
// case LoongArch::MOD_W:
146-
// case LoongArch::MOD_WU:
147142
case LoongArch::SLL_W:
148143
case LoongArch::SLLI_W:
149144
case LoongArch::SRL_W:
@@ -170,6 +165,15 @@ static bool hasAllNBitUsers(const MachineInstr &OrigMI,
170165
if (Bits >= 32)
171166
break;
172167
return false;
168+
// {DIV,MOD}.W{U} consumes the upper 32 bits if the div32
169+
// feature is not enabled.
170+
case LoongArch::DIV_W:
171+
case LoongArch::DIV_WU:
172+
case LoongArch::MOD_W:
173+
case LoongArch::MOD_WU:
174+
if (Bits >= 32 && ST.hasDiv32())
175+
break;
176+
return false;
173177
case LoongArch::MOVGR2CF:
174178
if (Bits >= 1)
175179
break;

llvm/test/CodeGen/LoongArch/ir-instruction/sdiv-udiv-srem-urem-div32.ll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,9 @@ define signext i32 @sextw_rmv(i32 signext %a, i32 signext %b, i32 signext %c) {
8484
;
8585
; LA64-DIV32-LABEL: sextw_rmv:
8686
; LA64-DIV32: # %bb.0: # %entry
87-
; LA64-DIV32-NEXT: mul.d $a0, $a1, $a0
88-
; LA64-DIV32-NEXT: addi.w $a1, $a0, 0
89-
; LA64-DIV32-NEXT: div.w $a0, $a2, $a0
90-
; LA64-DIV32-NEXT: sltu $a0, $a0, $a1
87+
; LA64-DIV32-NEXT: mul.w $a0, $a1, $a0
88+
; LA64-DIV32-NEXT: div.w $a1, $a2, $a0
89+
; LA64-DIV32-NEXT: sltu $a0, $a1, $a0
9190
; LA64-DIV32-NEXT: ret
9291
entry:
9392
%mul = mul nsw i32 %b, %a

0 commit comments

Comments
 (0)