[llvm-branch-commits] [llvm] release/20.x: [Mips] Use getSignedConstant() in or combine (PR #126083)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Feb 6 07:36:54 PST 2025
https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/126083
Backport 88b1d16c4a040cc3d919be13f0baf44f30a5aa13
Requested by: @nikic
>From a373f4005f1e2f3d7db680b672c42bf78e8b48fc Mon Sep 17 00:00:00 2001
From: Nikita Popov <npopov at redhat.com>
Date: Thu, 6 Feb 2025 16:27:10 +0100
Subject: [PATCH] [Mips] Use getSignedConstant() in or combine
Fixes https://github.com/llvm/llvm-project/issues/125954.
(cherry picked from commit 88b1d16c4a040cc3d919be13f0baf44f30a5aa13)
---
llvm/lib/Target/Mips/MipsISelLowering.cpp | 2 +-
llvm/test/CodeGen/Mips/dins.ll | 53 +++++++++++++++++++++++
2 files changed, 54 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Target/Mips/MipsISelLowering.cpp b/llvm/lib/Target/Mips/MipsISelLowering.cpp
index 7c4257c222c0baa..85e05bc1b129a72 100644
--- a/llvm/lib/Target/Mips/MipsISelLowering.cpp
+++ b/llvm/lib/Target/Mips/MipsISelLowering.cpp
@@ -1004,7 +1004,7 @@ static SDValue performORCombine(SDNode *N, SelectionDAG &DAG,
return DAG.getNode(
MipsISD::Ins, DL, N->getValueType(0),
isConstCase
- ? DAG.getConstant(CN1->getSExtValue() >> SMPos0, DL, ValTy)
+ ? DAG.getSignedConstant(CN1->getSExtValue() >> SMPos0, DL, ValTy)
: SrlX,
DAG.getConstant(SMPos0, DL, MVT::i32),
DAG.getConstant(ValTy.getSizeInBits() / 8 < 8 ? SMSize0 & 31
diff --git a/llvm/test/CodeGen/Mips/dins.ll b/llvm/test/CodeGen/Mips/dins.ll
index cdb8f419eb2be12..2e9816e7d364253 100644
--- a/llvm/test/CodeGen/Mips/dins.ll
+++ b/llvm/test/CodeGen/Mips/dins.ll
@@ -304,3 +304,56 @@ entry:
store volatile i32 %or, ptr %x.addr, align 4
ret i32 %and
}
+
+define i32 @pr125954(i32 %arg, i1 %c) {
+; MIPS64R2-LABEL: pr125954:
+; MIPS64R2: # %bb.0:
+; MIPS64R2-NEXT: sll $1, $4, 0
+; MIPS64R2-NEXT: addiu $2, $zero, -1
+; MIPS64R2-NEXT: move $3, $1
+; MIPS64R2-NEXT: ins $3, $2, 8, 24
+; MIPS64R2-NEXT: andi $2, $1, 255
+; MIPS64R2-NEXT: sll $1, $5, 0
+; MIPS64R2-NEXT: andi $1, $1, 1
+; MIPS64R2-NEXT: jr $ra
+; MIPS64R2-NEXT: movn $2, $3, $1
+;
+; MIPS32R2-LABEL: pr125954:
+; MIPS32R2: # %bb.0:
+; MIPS32R2-NEXT: andi $2, $4, 255
+; MIPS32R2-NEXT: addiu $1, $zero, -256
+; MIPS32R2-NEXT: or $1, $2, $1
+; MIPS32R2-NEXT: andi $3, $5, 1
+; MIPS32R2-NEXT: jr $ra
+; MIPS32R2-NEXT: movn $2, $1, $3
+;
+; MIPS16-LABEL: pr125954:
+; MIPS16: # %bb.0:
+; MIPS16-NEXT: li $6, 1
+; MIPS16-NEXT: and $6, $5
+; MIPS16-NEXT: li $2, 255
+; MIPS16-NEXT: and $2, $4
+; MIPS16-NEXT: move $3, $zero
+; MIPS16-NEXT: beqz $6, $BB2_2 # 16 bit inst
+; MIPS16-NEXT: # %bb.1:
+; MIPS16-NEXT: addiu $3, -256
+; MIPS16-NEXT: or $2, $3
+; MIPS16-NEXT: $BB2_2:
+; MIPS16-NEXT: jrc $ra
+;
+; MIPS64R2N32-LABEL: pr125954:
+; MIPS64R2N32: # %bb.0:
+; MIPS64R2N32-NEXT: sll $1, $4, 0
+; MIPS64R2N32-NEXT: addiu $2, $zero, -1
+; MIPS64R2N32-NEXT: move $3, $1
+; MIPS64R2N32-NEXT: ins $3, $2, 8, 24
+; MIPS64R2N32-NEXT: andi $2, $1, 255
+; MIPS64R2N32-NEXT: sll $1, $5, 0
+; MIPS64R2N32-NEXT: andi $1, $1, 1
+; MIPS64R2N32-NEXT: jr $ra
+; MIPS64R2N32-NEXT: movn $2, $3, $1
+ %and = and i32 %arg, 255
+ %or = or i32 %and, -256
+ %sel = select i1 %c, i32 %or, i32 %and
+ ret i32 %sel
+}
More information about the llvm-branch-commits
mailing list