diff options
author | Jun Ma <JunMa@linux.alibaba.com> | 2021-04-20 11:37:06 +0800 |
---|---|---|
committer | Jun Ma <JunMa@linux.alibaba.com> | 2021-04-20 16:28:43 +0800 |
commit | 1ef5699d1a86bf1864eb4633f752c073630c1641 (patch) | |
tree | 81623a3dd0603fb2c6d0e8f7c9971b67d2d86ab3 | |
parent | [AMDGPU] GCNDPPCombine: don't shrink V_ADD_CO_U32 if carry out is used (diff) | |
download | llvm-project-1ef5699d1a86bf1864eb4633f752c073630c1641.tar.gz llvm-project-1ef5699d1a86bf1864eb4633f752c073630c1641.tar.bz2 llvm-project-1ef5699d1a86bf1864eb4633f752c073630c1641.zip |
[DAGCombiner] Support fold zero scalar vector.
This patch changes ISD::isBuildVectorAllZeros to
ISD::isConstantSplatVectorAllZeros which handles zero sclar vector.
TestPlan: check-llvm
Differential Revision: https://reviews.llvm.org/D100813
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 32 | ||||
-rw-r--r-- | llvm/test/CodeGen/AArch64/sve-int-arith.ll | 32 | ||||
-rw-r--r-- | llvm/test/CodeGen/AArch64/sve-int-log.ll | 25 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv32.ll | 10 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv64.ll | 10 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv32.ll | 10 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv64.ll | 10 |
7 files changed, 73 insertions, 56 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 0f53d8dddc02..18acb16dbe96 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -2260,9 +2260,9 @@ SDValue DAGCombiner::visitADDLike(SDNode *N) { return FoldedVOp; // fold (add x, 0) -> x, vector edition - if (ISD::isBuildVectorAllZeros(N1.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) return N0; - if (ISD::isBuildVectorAllZeros(N0.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N0.getNode())) return N1; } @@ -2543,9 +2543,9 @@ SDValue DAGCombiner::visitADDSAT(SDNode *N) { // TODO SimplifyVBinOp // fold (add_sat x, 0) -> x, vector edition - if (ISD::isBuildVectorAllZeros(N1.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) return N0; - if (ISD::isBuildVectorAllZeros(N0.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N0.getNode())) return N1; } @@ -3249,7 +3249,7 @@ SDValue DAGCombiner::visitSUB(SDNode *N) { return FoldedVOp; // fold (sub x, 0) -> x, vector edition - if (ISD::isBuildVectorAllZeros(N1.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) return N0; } @@ -3582,7 +3582,7 @@ SDValue DAGCombiner::visitSUBSAT(SDNode *N) { // TODO SimplifyVBinOp // fold (sub_sat x, 0) -> x, vector edition - if (ISD::isBuildVectorAllZeros(N1.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) return N0; } @@ -4438,8 +4438,8 @@ SDValue DAGCombiner::visitMULHS(SDNode *N) { if (VT.isVector()) { // fold (mulhs x, 0) -> 0 // do not return N0/N1, because undef node may exist. - if (ISD::isBuildVectorAllZeros(N0.getNode()) || - ISD::isBuildVectorAllZeros(N1.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N0.getNode()) || + ISD::isConstantSplatVectorAllZeros(N1.getNode())) return DAG.getConstant(0, DL, VT); } @@ -4486,8 +4486,8 @@ SDValue DAGCombiner::visitMULHU(SDNode *N) { if (VT.isVector()) { // fold (mulhu x, 0) -> 0 // do not return N0/N1, because undef node may exist. - if (ISD::isBuildVectorAllZeros(N0.getNode()) || - ISD::isBuildVectorAllZeros(N1.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N0.getNode()) || + ISD::isConstantSplatVectorAllZeros(N1.getNode())) return DAG.getConstant(0, DL, VT); } @@ -5585,11 +5585,11 @@ SDValue DAGCombiner::visitAND(SDNode *N) { return FoldedVOp; // fold (and x, 0) -> 0, vector edition - if (ISD::isBuildVectorAllZeros(N0.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N0.getNode())) // do not return N0, because undef node may exist in N0 return DAG.getConstant(APInt::getNullValue(N0.getScalarValueSizeInBits()), SDLoc(N), N0.getValueType()); - if (ISD::isBuildVectorAllZeros(N1.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) // do not return N1, because undef node may exist in N1 return DAG.getConstant(APInt::getNullValue(N1.getScalarValueSizeInBits()), SDLoc(N), N1.getValueType()); @@ -6351,9 +6351,9 @@ SDValue DAGCombiner::visitOR(SDNode *N) { return FoldedVOp; // fold (or x, 0) -> x, vector edition - if (ISD::isBuildVectorAllZeros(N0.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N0.getNode())) return N1; - if (ISD::isBuildVectorAllZeros(N1.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) return N0; // fold (or x, -1) -> -1, vector edition @@ -7712,9 +7712,9 @@ SDValue DAGCombiner::visitXOR(SDNode *N) { return FoldedVOp; // fold (xor x, 0) -> x, vector edition - if (ISD::isBuildVectorAllZeros(N0.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N0.getNode())) return N1; - if (ISD::isBuildVectorAllZeros(N1.getNode())) + if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) return N0; } diff --git a/llvm/test/CodeGen/AArch64/sve-int-arith.ll b/llvm/test/CodeGen/AArch64/sve-int-arith.ll index a0f89d86b739..2b0ce091a090 100644 --- a/llvm/test/CodeGen/AArch64/sve-int-arith.ll +++ b/llvm/test/CodeGen/AArch64/sve-int-arith.ll @@ -37,6 +37,14 @@ define <vscale x 16 x i8> @add_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) ret <vscale x 16 x i8> %res } +define <vscale x 16 x i8> @add_i8_zero(<vscale x 16 x i8> %a) { +; CHECK-LABEL: add_i8_zero: +; CHECK: // %bb.0: +; CHECK-NEXT: ret + %res = add <vscale x 16 x i8> %a, zeroinitializer + ret <vscale x 16 x i8> %res +} + define <vscale x 2 x i64> @sub_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) { ; CHECK-LABEL: sub_i64: ; CHECK: // %bb.0: @@ -73,6 +81,14 @@ define <vscale x 16 x i8> @sub_i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) ret <vscale x 16 x i8> %res } +define <vscale x 16 x i8> @sub_i8_zero(<vscale x 16 x i8> %a) { +; CHECK-LABEL: sub_i8_zero: +; CHECK: // %bb.0: +; CHECK-NEXT: ret + %res = sub <vscale x 16 x i8> %a, zeroinitializer + ret <vscale x 16 x i8> %res +} + define <vscale x 16 x i8> @abs_nxv16i8(<vscale x 16 x i8> %a) { ; CHECK-LABEL: abs_nxv16i8: ; CHECK: // %bb.0: @@ -166,6 +182,14 @@ define <vscale x 4 x i32> @sqadd_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> % ret <vscale x 4 x i32> %res } +define <vscale x 4 x i32> @sqadd_i32_zero(<vscale x 4 x i32> %a) { +; CHECK-LABEL: sqadd_i32_zero: +; CHECK: // %bb.0: +; CHECK-NEXT: ret + %res = call <vscale x 4 x i32> @llvm.sadd.sat.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> zeroinitializer) + ret <vscale x 4 x i32> %res +} + define <vscale x 8 x i16> @sqadd_i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) { ; CHECK-LABEL: sqadd_i16: ; CHECK: // %bb.0: @@ -194,6 +218,14 @@ define <vscale x 2 x i64> @sqsub_i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> % ret <vscale x 2 x i64> %res } +define <vscale x 2 x i64> @sqsub_i64_zero(<vscale x 2 x i64> %a) { +; CHECK-LABEL: sqsub_i64_zero: +; CHECK: // %bb.0: +; CHECK-NEXT: ret + %res = call <vscale x 2 x i64> @llvm.ssub.sat.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> zeroinitializer) + ret <vscale x 2 x i64> %res +} + define <vscale x 4 x i32> @sqsub_i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) { ; CHECK-LABEL: sqsub_i32: ; CHECK: // %bb.0: diff --git a/llvm/test/CodeGen/AArch64/sve-int-log.ll b/llvm/test/CodeGen/AArch64/sve-int-log.ll index 116112f525e1..2da05d30a9e0 100644 --- a/llvm/test/CodeGen/AArch64/sve-int-log.ll +++ b/llvm/test/CodeGen/AArch64/sve-int-log.ll @@ -37,6 +37,15 @@ define <vscale x 16 x i8> @and_b(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) { ret <vscale x 16 x i8> %res } +define <vscale x 16 x i8> @and_b_zero(<vscale x 16 x i8> %a) { +; CHECK-LABEL: and_b_zero: +; CHECK: // %bb.0: +; CHECK-NEXT: mov z0.b, #0 // =0x0 +; CHECK-NEXT: ret + %res = and <vscale x 16 x i8> %a, zeroinitializer + ret <vscale x 16 x i8> %res +} + define <vscale x 2 x i1> @and_pred_d(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b) { ; CHECK-LABEL: and_pred_d: ; CHECK: // %bb.0: @@ -113,6 +122,14 @@ define <vscale x 16 x i8> @or_b(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) { ret <vscale x 16 x i8> %res } +define <vscale x 16 x i8> @or_b_zero(<vscale x 16 x i8> %a) { +; CHECK-LABEL: or_b_zero: +; CHECK: // %bb.0: +; CHECK-NEXT: ret + %res = or <vscale x 16 x i8> %a, zeroinitializer + ret <vscale x 16 x i8> %res +} + define <vscale x 2 x i1> @or_pred_d(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b) { ; CHECK-LABEL: or_pred_d: ; CHECK: // %bb.0: @@ -189,6 +206,14 @@ define <vscale x 16 x i8> @xor_b(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) { ret <vscale x 16 x i8> %res } +define <vscale x 16 x i8> @xor_b_zero(<vscale x 16 x i8> %a) { +; CHECK-LABEL: xor_b_zero: +; CHECK: // %bb.0: +; CHECK-NEXT: ret + %res = xor <vscale x 16 x i8> %a, zeroinitializer + ret <vscale x 16 x i8> %res +} + define <vscale x 2 x i1> @xor_pred_d(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b) { ; CHECK-LABEL: xor_pred_d: ; CHECK: // %bb.0: diff --git a/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv32.ll index bbfc09d1c276..f8b18f73fd21 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv32.ll @@ -341,7 +341,6 @@ define <vscale x 1 x i16> @vdiv_vi_nxv1i16_0(<vscale x 1 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,mf4,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -382,7 +381,6 @@ define <vscale x 2 x i16> @vdiv_vi_nxv2i16_0(<vscale x 2 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,mf2,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -423,7 +421,6 @@ define <vscale x 4 x i16> @vdiv_vi_nxv4i16_0(<vscale x 4 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m1,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -464,7 +461,6 @@ define <vscale x 8 x i16> @vdiv_vi_nxv8i16_0(<vscale x 8 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m2,ta,mu ; CHECK-NEXT: vmulh.vx v26, v8, a0 -; CHECK-NEXT: vadd.vi v26, v26, 0 ; CHECK-NEXT: vsra.vi v26, v26, 1 ; CHECK-NEXT: vsrl.vi v28, v26, 15 ; CHECK-NEXT: vand.vi v28, v28, -1 @@ -505,7 +501,6 @@ define <vscale x 16 x i16> @vdiv_vi_nxv16i16_0(<vscale x 16 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m4,ta,mu ; CHECK-NEXT: vmulh.vx v28, v8, a0 -; CHECK-NEXT: vadd.vi v28, v28, 0 ; CHECK-NEXT: vsra.vi v28, v28, 1 ; CHECK-NEXT: vsrl.vi v8, v28, 15 ; CHECK-NEXT: vand.vi v8, v8, -1 @@ -546,7 +541,6 @@ define <vscale x 32 x i16> @vdiv_vi_nxv32i16_0(<vscale x 32 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m8,ta,mu ; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vadd.vi v8, v8, 0 ; CHECK-NEXT: vsra.vi v8, v8, 1 ; CHECK-NEXT: vsrl.vi v16, v8, 15 ; CHECK-NEXT: vand.vi v16, v16, -1 @@ -808,7 +802,6 @@ define <vscale x 1 x i64> @vdiv_vi_nxv1i64_0(<vscale x 1 x i64> %va) { ; CHECK-NEXT: vsrl.vx v26, v26, a0 ; CHECK-NEXT: vor.vv v25, v26, v25 ; CHECK-NEXT: vmulh.vv v25, v8, v25 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v26, v25, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v25, v25, a0 @@ -866,7 +859,6 @@ define <vscale x 2 x i64> @vdiv_vi_nxv2i64_0(<vscale x 2 x i64> %va) { ; CHECK-NEXT: vsrl.vx v28, v28, a0 ; CHECK-NEXT: vor.vv v26, v28, v26 ; CHECK-NEXT: vmulh.vv v26, v8, v26 -; CHECK-NEXT: vadd.vi v26, v26, 0 ; CHECK-NEXT: vsra.vi v28, v26, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v26, v26, a0 @@ -924,7 +916,6 @@ define <vscale x 4 x i64> @vdiv_vi_nxv4i64_0(<vscale x 4 x i64> %va) { ; CHECK-NEXT: vsrl.vx v12, v12, a0 ; CHECK-NEXT: vor.vv v28, v12, v28 ; CHECK-NEXT: vmulh.vv v28, v8, v28 -; CHECK-NEXT: vadd.vi v28, v28, 0 ; CHECK-NEXT: vsra.vi v8, v28, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v28, v28, a0 @@ -982,7 +973,6 @@ define <vscale x 8 x i64> @vdiv_vi_nxv8i64_0(<vscale x 8 x i64> %va) { ; CHECK-NEXT: vsrl.vx v24, v24, a0 ; CHECK-NEXT: vor.vv v16, v24, v16 ; CHECK-NEXT: vmulh.vv v8, v8, v16 -; CHECK-NEXT: vadd.vi v8, v8, 0 ; CHECK-NEXT: vsra.vi v16, v8, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v8, v8, a0 diff --git a/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv64.ll index b8f331e78b5b..96f832571023 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode-rv64.ll @@ -317,7 +317,6 @@ define <vscale x 1 x i16> @vdiv_vi_nxv1i16_0(<vscale x 1 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,mf4,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -358,7 +357,6 @@ define <vscale x 2 x i16> @vdiv_vi_nxv2i16_0(<vscale x 2 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,mf2,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -399,7 +397,6 @@ define <vscale x 4 x i16> @vdiv_vi_nxv4i16_0(<vscale x 4 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m1,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -440,7 +437,6 @@ define <vscale x 8 x i16> @vdiv_vi_nxv8i16_0(<vscale x 8 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m2,ta,mu ; CHECK-NEXT: vmulh.vx v26, v8, a0 -; CHECK-NEXT: vadd.vi v26, v26, 0 ; CHECK-NEXT: vsra.vi v26, v26, 1 ; CHECK-NEXT: vsrl.vi v28, v26, 15 ; CHECK-NEXT: vand.vi v28, v28, -1 @@ -481,7 +477,6 @@ define <vscale x 16 x i16> @vdiv_vi_nxv16i16_0(<vscale x 16 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m4,ta,mu ; CHECK-NEXT: vmulh.vx v28, v8, a0 -; CHECK-NEXT: vadd.vi v28, v28, 0 ; CHECK-NEXT: vsra.vi v28, v28, 1 ; CHECK-NEXT: vsrl.vi v8, v28, 15 ; CHECK-NEXT: vand.vi v8, v8, -1 @@ -522,7 +517,6 @@ define <vscale x 32 x i16> @vdiv_vi_nxv32i16_0(<vscale x 32 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m8,ta,mu ; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vadd.vi v8, v8, 0 ; CHECK-NEXT: vsra.vi v8, v8, 1 ; CHECK-NEXT: vsrl.vi v16, v8, 15 ; CHECK-NEXT: vand.vi v16, v16, -1 @@ -779,7 +773,6 @@ define <vscale x 1 x i64> @vdiv_vi_nxv1i64_0(<vscale x 1 x i64> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e64,m1,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v26, v25, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v25, v25, a0 @@ -827,7 +820,6 @@ define <vscale x 2 x i64> @vdiv_vi_nxv2i64_0(<vscale x 2 x i64> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e64,m2,ta,mu ; CHECK-NEXT: vmulh.vx v26, v8, a0 -; CHECK-NEXT: vadd.vi v26, v26, 0 ; CHECK-NEXT: vsra.vi v28, v26, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v26, v26, a0 @@ -875,7 +867,6 @@ define <vscale x 4 x i64> @vdiv_vi_nxv4i64_0(<vscale x 4 x i64> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e64,m4,ta,mu ; CHECK-NEXT: vmulh.vx v28, v8, a0 -; CHECK-NEXT: vadd.vi v28, v28, 0 ; CHECK-NEXT: vsra.vi v8, v28, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v28, v28, a0 @@ -923,7 +914,6 @@ define <vscale x 8 x i64> @vdiv_vi_nxv8i64_0(<vscale x 8 x i64> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e64,m8,ta,mu ; CHECK-NEXT: vmulh.vx v8, v8, a0 -; CHECK-NEXT: vadd.vi v8, v8, 0 ; CHECK-NEXT: vsra.vi v16, v8, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v8, v8, a0 diff --git a/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv32.ll index 3a5a7b420933..b887e51c90a5 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv32.ll @@ -338,7 +338,6 @@ define <vscale x 1 x i16> @vrem_vi_nxv1i16_0(<vscale x 1 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,mf4,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -382,7 +381,6 @@ define <vscale x 2 x i16> @vrem_vi_nxv2i16_0(<vscale x 2 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,mf2,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -426,7 +424,6 @@ define <vscale x 4 x i16> @vrem_vi_nxv4i16_0(<vscale x 4 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m1,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -470,7 +467,6 @@ define <vscale x 8 x i16> @vrem_vi_nxv8i16_0(<vscale x 8 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m2,ta,mu ; CHECK-NEXT: vmulh.vx v26, v8, a0 -; CHECK-NEXT: vadd.vi v26, v26, 0 ; CHECK-NEXT: vsra.vi v26, v26, 1 ; CHECK-NEXT: vsrl.vi v28, v26, 15 ; CHECK-NEXT: vand.vi v28, v28, -1 @@ -514,7 +510,6 @@ define <vscale x 16 x i16> @vrem_vi_nxv16i16_0(<vscale x 16 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m4,ta,mu ; CHECK-NEXT: vmulh.vx v28, v8, a0 -; CHECK-NEXT: vadd.vi v28, v28, 0 ; CHECK-NEXT: vsra.vi v28, v28, 1 ; CHECK-NEXT: vsrl.vi v12, v28, 15 ; CHECK-NEXT: vand.vi v12, v12, -1 @@ -558,7 +553,6 @@ define <vscale x 32 x i16> @vrem_vi_nxv32i16_0(<vscale x 32 x i16> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m8,ta,mu ; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vadd.vi v16, v16, 0 ; CHECK-NEXT: vsra.vi v16, v16, 1 ; CHECK-NEXT: vsrl.vi v24, v16, 15 ; CHECK-NEXT: vand.vi v24, v24, -1 @@ -838,7 +832,6 @@ define <vscale x 1 x i64> @vrem_vi_nxv1i64_0(<vscale x 1 x i64> %va) { ; CHECK-NEXT: vsrl.vx v26, v26, a0 ; CHECK-NEXT: vor.vv v25, v26, v25 ; CHECK-NEXT: vmulh.vv v25, v8, v25 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v26, v25, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v25, v25, a0 @@ -899,7 +892,6 @@ define <vscale x 2 x i64> @vrem_vi_nxv2i64_0(<vscale x 2 x i64> %va) { ; CHECK-NEXT: vsrl.vx v28, v28, a0 ; CHECK-NEXT: vor.vv v26, v28, v26 ; CHECK-NEXT: vmulh.vv v26, v8, v26 -; CHECK-NEXT: vadd.vi v26, v26, 0 ; CHECK-NEXT: vsra.vi v28, v26, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v26, v26, a0 @@ -960,7 +952,6 @@ define <vscale x 4 x i64> @vrem_vi_nxv4i64_0(<vscale x 4 x i64> %va) { ; CHECK-NEXT: vsrl.vx v12, v12, a0 ; CHECK-NEXT: vor.vv v28, v12, v28 ; CHECK-NEXT: vmulh.vv v28, v8, v28 -; CHECK-NEXT: vadd.vi v28, v28, 0 ; CHECK-NEXT: vsra.vi v12, v28, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v28, v28, a0 @@ -1021,7 +1012,6 @@ define <vscale x 8 x i64> @vrem_vi_nxv8i64_0(<vscale x 8 x i64> %va) { ; CHECK-NEXT: vsrl.vx v24, v24, a0 ; CHECK-NEXT: vor.vv v16, v24, v16 ; CHECK-NEXT: vmulh.vv v16, v8, v16 -; CHECK-NEXT: vadd.vi v16, v16, 0 ; CHECK-NEXT: vsra.vi v24, v16, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v16, v16, a0 diff --git a/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv64.ll index 243667128018..abbecd5de976 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vrem-sdnode-rv64.ll @@ -338,7 +338,6 @@ define <vscale x 1 x i16> @vrem_vi_nxv1i16_0(<vscale x 1 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,mf4,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -382,7 +381,6 @@ define <vscale x 2 x i16> @vrem_vi_nxv2i16_0(<vscale x 2 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,mf2,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -426,7 +424,6 @@ define <vscale x 4 x i16> @vrem_vi_nxv4i16_0(<vscale x 4 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m1,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v25, v25, 1 ; CHECK-NEXT: vsrl.vi v26, v25, 15 ; CHECK-NEXT: vand.vi v26, v26, -1 @@ -470,7 +467,6 @@ define <vscale x 8 x i16> @vrem_vi_nxv8i16_0(<vscale x 8 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m2,ta,mu ; CHECK-NEXT: vmulh.vx v26, v8, a0 -; CHECK-NEXT: vadd.vi v26, v26, 0 ; CHECK-NEXT: vsra.vi v26, v26, 1 ; CHECK-NEXT: vsrl.vi v28, v26, 15 ; CHECK-NEXT: vand.vi v28, v28, -1 @@ -514,7 +510,6 @@ define <vscale x 16 x i16> @vrem_vi_nxv16i16_0(<vscale x 16 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m4,ta,mu ; CHECK-NEXT: vmulh.vx v28, v8, a0 -; CHECK-NEXT: vadd.vi v28, v28, 0 ; CHECK-NEXT: vsra.vi v28, v28, 1 ; CHECK-NEXT: vsrl.vi v12, v28, 15 ; CHECK-NEXT: vand.vi v12, v12, -1 @@ -558,7 +553,6 @@ define <vscale x 32 x i16> @vrem_vi_nxv32i16_0(<vscale x 32 x i16> %va) { ; CHECK-NEXT: addiw a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e16,m8,ta,mu ; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vadd.vi v16, v16, 0 ; CHECK-NEXT: vsra.vi v16, v16, 1 ; CHECK-NEXT: vsrl.vi v24, v16, 15 ; CHECK-NEXT: vand.vi v24, v24, -1 @@ -833,7 +827,6 @@ define <vscale x 1 x i64> @vrem_vi_nxv1i64_0(<vscale x 1 x i64> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e64,m1,ta,mu ; CHECK-NEXT: vmulh.vx v25, v8, a0 -; CHECK-NEXT: vadd.vi v25, v25, 0 ; CHECK-NEXT: vsra.vi v26, v25, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v25, v25, a0 @@ -884,7 +877,6 @@ define <vscale x 2 x i64> @vrem_vi_nxv2i64_0(<vscale x 2 x i64> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e64,m2,ta,mu ; CHECK-NEXT: vmulh.vx v26, v8, a0 -; CHECK-NEXT: vadd.vi v26, v26, 0 ; CHECK-NEXT: vsra.vi v28, v26, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v26, v26, a0 @@ -935,7 +927,6 @@ define <vscale x 4 x i64> @vrem_vi_nxv4i64_0(<vscale x 4 x i64> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e64,m4,ta,mu ; CHECK-NEXT: vmulh.vx v28, v8, a0 -; CHECK-NEXT: vadd.vi v28, v28, 0 ; CHECK-NEXT: vsra.vi v12, v28, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v28, v28, a0 @@ -986,7 +977,6 @@ define <vscale x 8 x i64> @vrem_vi_nxv8i64_0(<vscale x 8 x i64> %va) { ; CHECK-NEXT: addi a0, a0, 1755 ; CHECK-NEXT: vsetvli a1, zero, e64,m8,ta,mu ; CHECK-NEXT: vmulh.vx v16, v8, a0 -; CHECK-NEXT: vadd.vi v16, v16, 0 ; CHECK-NEXT: vsra.vi v24, v16, 1 ; CHECK-NEXT: addi a0, zero, 63 ; CHECK-NEXT: vsrl.vx v16, v16, a0 |