forked from OSchip/llvm-project
[RISCV] Remove assertsexti32 from inputs to riscv_sllw/srlw nodes in B extension isel patterns.
riscv_sllw/srlw only reads the lower 32 bits of the first operand. And the lower 5 bits of the second operands. Whether the upper 32 bits of the input are sign bits or not doesn't matter. Also use ineg and not to shorten the patterns. Differential Revision: https://reviews.llvm.org/D90668
This commit is contained in:
parent
8c2025cc61
commit
0122a4ea66
|
@ -934,28 +934,22 @@ def : Pat<(xor (riscv_srlw (xor GPR:$rs1, -1), GPR:$rs2), -1),
|
|||
} // Predicates = [HasStdExtZbb, IsRV64]
|
||||
|
||||
let Predicates = [HasStdExtZbbOrZbp, IsRV64] in {
|
||||
def : Pat<(or (riscv_sllw (assertsexti32 GPR:$rs1), (assertsexti32 GPR:$rs2)),
|
||||
(riscv_srlw (assertsexti32 GPR:$rs1),
|
||||
(sub (i64 0), (assertsexti32 GPR:$rs2)))),
|
||||
def : Pat<(or (riscv_sllw GPR:$rs1, GPR:$rs2),
|
||||
(riscv_srlw GPR:$rs1, (ineg GPR:$rs2))),
|
||||
(ROLW GPR:$rs1, GPR:$rs2)>;
|
||||
def : Pat<(or (riscv_sllw (assertsexti32 GPR:$rs1),
|
||||
(sub (i64 0), (assertsexti32 GPR:$rs2))),
|
||||
(riscv_srlw (assertsexti32 GPR:$rs1), (assertsexti32 GPR:$rs2))),
|
||||
def : Pat<(or (riscv_sllw GPR:$rs1, (ineg GPR:$rs2)),
|
||||
(riscv_srlw GPR:$rs1, GPR:$rs2)),
|
||||
(RORW GPR:$rs1, GPR:$rs2)>;
|
||||
} // Predicates = [HasStdExtZbbOrZbp, IsRV64]
|
||||
|
||||
let Predicates = [HasStdExtZbs, IsRV64] in {
|
||||
def : Pat<(and (xor (riscv_sllw 1, (assertsexti32 GPR:$rs2)), -1),
|
||||
(assertsexti32 GPR:$rs1)),
|
||||
def : Pat<(and (not (riscv_sllw 1, GPR:$rs2)), (assertsexti32 GPR:$rs1)),
|
||||
(SBCLRW GPR:$rs1, GPR:$rs2)>;
|
||||
def : Pat<(or (riscv_sllw 1, (assertsexti32 GPR:$rs2)),
|
||||
(assertsexti32 GPR:$rs1)),
|
||||
def : Pat<(or (riscv_sllw 1, GPR:$rs2), (assertsexti32 GPR:$rs1)),
|
||||
(SBSETW GPR:$rs1, GPR:$rs2)>;
|
||||
def : Pat<(xor (riscv_sllw 1, (assertsexti32 GPR:$rs2)),
|
||||
(assertsexti32 GPR:$rs1)),
|
||||
def : Pat<(xor (riscv_sllw 1, GPR:$rs2), (assertsexti32 GPR:$rs1)),
|
||||
(SBINVW GPR:$rs1, GPR:$rs2)>;
|
||||
def : Pat<(and (riscv_srlw (assertsexti32 GPR:$rs1), (assertsexti32 GPR:$rs2)),
|
||||
1),
|
||||
def : Pat<(and (riscv_srlw GPR:$rs1, GPR:$rs2), 1),
|
||||
(SBEXTW GPR:$rs1, GPR:$rs2)>;
|
||||
} // Predicates = [HasStdExtZbs, IsRV64]
|
||||
|
||||
|
|
Loading…
Reference in New Issue