diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td index b0e82e45e9ece..a1e795819b1a8 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td @@ -817,8 +817,8 @@ def : Pat<(xor GPR:$rs1, (not GPR:$rs2)), (XNOR GPR:$rs1, GPR:$rs2)>; } // Predicates = [HasStdExtZbbOrZbpOrZbkb] let Predicates = [HasStdExtZbbOrZbpOrZbkb] in { -def : PatGprGpr; -def : PatGprGpr; +def : PatGprGpr, ROL>; +def : PatGprGpr, ROR>; def : PatGprImm; // There's no encoding for roli in the the 'B' extension as it can be @@ -828,8 +828,8 @@ def : Pat<(rotl GPR:$rs1, uimmlog2xlen:$shamt), } // Predicates = [HasStdExtZbbOrZbpOrZbkb] let Predicates = [HasStdExtZbbOrZbpOrZbkb, IsRV64] in { -def : PatGprGpr; -def : PatGprGpr; +def : PatGprGpr, ROLW>; +def : PatGprGpr, RORW>; def : PatGprImm; def : Pat<(riscv_rolw GPR:$rs1, uimm5:$rs2), (RORIW GPR:$rs1, (ImmSubFrom32 uimm5:$rs2))>; diff --git a/llvm/test/CodeGen/RISCV/rotl-rotr.ll b/llvm/test/CodeGen/RISCV/rotl-rotr.ll index a7f7c38409a5f..2026a756542ad 100644 --- a/llvm/test/CodeGen/RISCV/rotl-rotr.ll +++ b/llvm/test/CodeGen/RISCV/rotl-rotr.ll @@ -578,7 +578,6 @@ define signext i32 @rotl_32_mask_multiple(i32 signext %a, i32 signext %b, i32 si ; ; RV32ZBB-LABEL: rotl_32_mask_multiple: ; RV32ZBB: # %bb.0: -; RV32ZBB-NEXT: andi a2, a2, 31 ; RV32ZBB-NEXT: rol a0, a0, a2 ; RV32ZBB-NEXT: rol a1, a1, a2 ; RV32ZBB-NEXT: add a0, a0, a1 @@ -586,7 +585,6 @@ define signext i32 @rotl_32_mask_multiple(i32 signext %a, i32 signext %b, i32 si ; ; RV64ZBB-LABEL: rotl_32_mask_multiple: ; RV64ZBB: # %bb.0: -; RV64ZBB-NEXT: andi a2, a2, 31 ; RV64ZBB-NEXT: rolw a0, a0, a2 ; RV64ZBB-NEXT: rolw a1, a1, a2 ; RV64ZBB-NEXT: addw a0, a0, a1 @@ -704,7 +702,6 @@ define i64 @rotl_64_mask_multiple(i64 %a, i64 %b, i64 %amt) nounwind { ; ; RV64ZBB-LABEL: rotl_64_mask_multiple: ; RV64ZBB: # %bb.0: -; RV64ZBB-NEXT: andi a2, a2, 63 ; RV64ZBB-NEXT: rol a0, a0, a2 ; RV64ZBB-NEXT: rol a1, a1, a2 ; RV64ZBB-NEXT: add a0, a0, a1 @@ -744,7 +741,6 @@ define signext i32 @rotr_32_mask_multiple(i32 signext %a, i32 signext %b, i32 si ; ; RV32ZBB-LABEL: rotr_32_mask_multiple: ; RV32ZBB: # %bb.0: -; RV32ZBB-NEXT: andi a2, a2, 31 ; RV32ZBB-NEXT: ror a0, a0, a2 ; RV32ZBB-NEXT: ror a1, a1, a2 ; RV32ZBB-NEXT: add a0, a0, a1 @@ -752,7 +748,6 @@ define signext i32 @rotr_32_mask_multiple(i32 signext %a, i32 signext %b, i32 si ; ; RV64ZBB-LABEL: rotr_32_mask_multiple: ; RV64ZBB: # %bb.0: -; RV64ZBB-NEXT: andi a2, a2, 31 ; RV64ZBB-NEXT: rorw a0, a0, a2 ; RV64ZBB-NEXT: rorw a1, a1, a2 ; RV64ZBB-NEXT: addw a0, a0, a1 @@ -868,7 +863,6 @@ define i64 @rotr_64_mask_multiple(i64 %a, i64 %b, i64 %amt) nounwind { ; ; RV64ZBB-LABEL: rotr_64_mask_multiple: ; RV64ZBB: # %bb.0: -; RV64ZBB-NEXT: andi a2, a2, 63 ; RV64ZBB-NEXT: ror a0, a0, a2 ; RV64ZBB-NEXT: ror a1, a1, a2 ; RV64ZBB-NEXT: add a0, a0, a1