aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2020-07-04 14:35:49 -0700
committerCraig Topper <craig.topper@intel.com>2020-07-04 14:35:49 -0700
commit76123d338dc542d25cc9c4f20ddc49df1b9712cd (patch)
tree9ab3819eca03d39c8a324d8ceed3dc174fcc237d
parent6c4a5e9257bac022ffe60e466686ba7fc96ffd1a (diff)
downloadllvm-76123d338dc542d25cc9c4f20ddc49df1b9712cd.zip
llvm-76123d338dc542d25cc9c4f20ddc49df1b9712cd.tar.gz
llvm-76123d338dc542d25cc9c4f20ddc49df1b9712cd.tar.bz2
[DAGCombiner] visitSIGN_EXTEND_INREG should fold sext_vector_inreg(undef) to 0 not undef.
We need to ensure that the sign bits of the result all match so we can't fold to undef. Similar to PR46585. Reviewed By: lebedev.ri Differential Revision: https://reviews.llvm.org/D83163
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index c0d5337..015d78a3 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -10957,8 +10957,9 @@ SDValue DAGCombiner::visitSIGN_EXTEND_INREG(SDNode *N) {
unsigned VTBits = VT.getScalarSizeInBits();
unsigned ExtVTBits = ExtVT.getScalarSizeInBits();
+ // sext_vector_inreg(undef) = 0 because the top bit will all be the same.
if (N0.isUndef())
- return DAG.getUNDEF(VT);
+ return DAG.getConstant(0, SDLoc(N), VT);
// fold (sext_in_reg c1) -> c1
if (DAG.isConstantIntBuildVectorOrConstantInt(N0))