aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@sifive.com>2023-04-24 17:30:35 -0700
committerCraig Topper <craig.topper@sifive.com>2023-04-24 17:41:09 -0700
commita1e89710d9fb8d4eb90083d476bd5d77215a960e (patch)
treef850cbf0e147d27bf88ebb88eb64044cc96f7d6c
parentc95533a7be2858893ec32b8abaa37a2d912ebe63 (diff)
downloadllvm-a1e89710d9fb8d4eb90083d476bd5d77215a960e.zip
llvm-a1e89710d9fb8d4eb90083d476bd5d77215a960e.tar.gz
llvm-a1e89710d9fb8d4eb90083d476bd5d77215a960e.tar.bz2
[RISCV] Strengthen INSERT_SUBVECTOR check in combineBinOpToReduce.
It's not enough for the vector we're inserting into to be undef. We also need to be inserting into the lowest subvector. Spotted by inspection while trying to figure out why this doesn't work for vp.reduce.fadd.
-rw-r--r--llvm/lib/Target/RISCV/RISCVISelLowering.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index d23d496..897a8a6 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -9126,7 +9126,8 @@ static SDValue combineBinOpToReduce(SDNode *N, SelectionDAG &DAG,
SDValue ScalarV = Reduce.getOperand(2);
EVT ScalarVT = ScalarV.getValueType();
if (ScalarV.getOpcode() == ISD::INSERT_SUBVECTOR &&
- ScalarV.getOperand(0)->isUndef())
+ ScalarV.getOperand(0)->isUndef() &&
+ isNullConstant(ScalarV.getOperand(2)))
ScalarV = ScalarV.getOperand(1);
// Make sure that ScalarV is a splat with VL=1.