From 8e091b1220e09c0c1000ed676c1c92a09e871129 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 24 Apr 2023 11:45:27 -0700 Subject: [PATCH] [RISCV] Prefer vmsle.vi vX, vY, -1 over vslt.vx vX, vY, x0. If a target hasn't optimized scalar to vector transfers for x0, using an immediate may be more efficient. --- .../Target/RISCV/RISCVInstrInfoVSDPatterns.td | 2 +- .../Target/RISCV/RISCVInstrInfoVVLPatterns.td | 2 +- .../CodeGen/RISCV/rvv/fixed-vectors-int-setcc.ll | 2 +- llvm/test/CodeGen/RISCV/rvv/setcc-integer.ll | 8 ++++---- llvm/test/CodeGen/RISCV/rvv/sshl_sat_vec.ll | 16 ++++++++-------- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td index 70ccdbf6e814..3fd98e3d0bbf 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td @@ -801,7 +801,7 @@ defm : VPatIntegerSetCCSDNode_VI<"PseudoVMSGT", SETGT>; defm : VPatIntegerSetCCSDNode_VI<"PseudoVMSGTU", SETUGT>; defm : VPatIntegerSetCCSDNode_VIPlus1<"PseudoVMSLE", SETLT, - SplatPat_simm5_plus1_nonzero>; + SplatPat_simm5_plus1>; defm : VPatIntegerSetCCSDNode_VIPlus1<"PseudoVMSLEU", SETULT, SplatPat_simm5_plus1_nonzero>; defm : VPatIntegerSetCCSDNode_VIPlus1<"PseudoVMSGT", SETGE, diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td index 83e90ea75bc3..d71ef64ad0f1 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td @@ -1679,7 +1679,7 @@ foreach vti = AllIntegerVectors in { defm : VPatIntegerSetCCVL_VI_Swappable; defm : VPatIntegerSetCCVL_VIPlus1_Swappable; + SplatPat_simm5_plus1>; defm : VPatIntegerSetCCVL_VIPlus1_Swappable; defm : VPatIntegerSetCCVL_VIPlus1_Swappable, ptr %x diff --git a/llvm/test/CodeGen/RISCV/rvv/setcc-integer.ll b/llvm/test/CodeGen/RISCV/rvv/setcc-integer.ll index 61de81e8d312..a2ac684604b9 100644 --- a/llvm/test/CodeGen/RISCV/rvv/setcc-integer.ll +++ b/llvm/test/CodeGen/RISCV/rvv/setcc-integer.ll @@ -719,7 +719,7 @@ define @icmp_slt_vi_nxv8i8_2( %va) { ; CHECK-LABEL: icmp_slt_vi_nxv8i8_2: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: ret %head = insertelement poison, i8 0, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -1439,7 +1439,7 @@ define @icmp_slt_vi_nxv8i16_2( %va) { ; CHECK-LABEL: icmp_slt_vi_nxv8i16_2: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: ret %head = insertelement poison, i16 0, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -2159,7 +2159,7 @@ define @icmp_slt_vi_nxv8i32_2( %va) { ; CHECK-LABEL: icmp_slt_vi_nxv8i32_2: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: ret %head = insertelement poison, i32 0, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -3113,7 +3113,7 @@ define @icmp_slt_vi_nxv8i64_2( %va) { ; CHECK-LABEL: icmp_slt_vi_nxv8i64_2: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: ret %head = insertelement poison, i64 0, i32 0 %splat = shufflevector %head, poison, zeroinitializer diff --git a/llvm/test/CodeGen/RISCV/rvv/sshl_sat_vec.ll b/llvm/test/CodeGen/RISCV/rvv/sshl_sat_vec.ll index a734bfa84f55..443fe93a618c 100644 --- a/llvm/test/CodeGen/RISCV/rvv/sshl_sat_vec.ll +++ b/llvm/test/CodeGen/RISCV/rvv/sshl_sat_vec.ll @@ -10,7 +10,7 @@ define <2 x i64> @vec_v2i64(<2 x i64> %x, <2 x i64> %y) nounwind { ; CHECK-LABEL: vec_v2i64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: li a0, -1 ; CHECK-NEXT: srli a1, a0, 1 ; CHECK-NEXT: vsll.vv v10, v8, v9 @@ -30,7 +30,7 @@ define <4 x i32> @vec_v4i32(<4 x i32> %x, <4 x i32> %y) nounwind { ; CHECK-LABEL: vec_v4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: lui a0, 524288 ; CHECK-NEXT: addiw a0, a0, -1 ; CHECK-NEXT: vsll.vv v10, v8, v9 @@ -51,7 +51,7 @@ define <8 x i16> @vec_v8i16(<8 x i16> %x, <8 x i16> %y) nounwind { ; CHECK-LABEL: vec_v8i16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: lui a0, 8 ; CHECK-NEXT: addiw a1, a0, -1 ; CHECK-NEXT: vsll.vv v10, v8, v9 @@ -70,7 +70,7 @@ define <16 x i8> @vec_v16i8(<16 x i8> %x, <16 x i8> %y) nounwind { ; CHECK-LABEL: vec_v16i8: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: li a0, 127 ; CHECK-NEXT: vsll.vv v10, v8, v9 ; CHECK-NEXT: vsra.vv v9, v10, v9 @@ -94,7 +94,7 @@ define @vec_nxv2i64( %x, ; CHECK-LABEL: vec_nxv2i64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: li a0, -1 ; CHECK-NEXT: srli a1, a0, 1 ; CHECK-NEXT: vsll.vv v12, v8, v10 @@ -114,7 +114,7 @@ define @vec_nxv4i32( %x, ; CHECK-LABEL: vec_nxv4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: lui a0, 524288 ; CHECK-NEXT: addiw a0, a0, -1 ; CHECK-NEXT: vsll.vv v12, v8, v10 @@ -135,7 +135,7 @@ define @vec_nxv8i16( %x, ; CHECK-LABEL: vec_nxv8i16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: lui a0, 8 ; CHECK-NEXT: addiw a1, a0, -1 ; CHECK-NEXT: vsll.vv v12, v8, v10 @@ -154,7 +154,7 @@ define @vec_nxv16i8( %x, ; CHECK-LABEL: vec_nxv16i8: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma -; CHECK-NEXT: vmslt.vx v0, v8, zero +; CHECK-NEXT: vmsle.vi v0, v8, -1 ; CHECK-NEXT: li a0, 127 ; CHECK-NEXT: vsll.vv v12, v8, v10 ; CHECK-NEXT: vsra.vv v14, v12, v10 -- 2.34.1