diff options
| author | Reid Kleckner <rnk@google.com> | 2018-09-14 19:39:40 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2018-09-14 19:39:40 +0000 |
| commit | 4d1b75c6b7643450d681bc2629d1b0fd9db0eb0b (patch) | |
| tree | c8073df74ff26936139cb7ed6621fb91c707f3fe /llvm/lib/CodeGen | |
| parent | 16f58d18506bf3c0bf89cf24e3fea88d5a8154dc (diff) | |
| download | bcm5719-llvm-4d1b75c6b7643450d681bc2629d1b0fd9db0eb0b.tar.gz bcm5719-llvm-4d1b75c6b7643450d681bc2629d1b0fd9db0eb0b.zip | |
Revert r342183 "[DAGCombine] Fix crash when store merging created an extract_subvector with invalid index."
Causes 'isVector() && "Invalid vector type!"' assertion when building
Skia in Chrome.
llvm-svn: 342265
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 71048b14683..20e749ba569 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -13843,24 +13843,17 @@ bool DAGCombiner::MergeStoresOfConstantsOrVecElts( Val.getOpcode() == ISD::EXTRACT_SUBVECTOR)) { SDValue Vec = Val.getOperand(0); EVT MemVTScalarTy = MemVT.getScalarType(); - SDValue Idx = Val.getOperand(1); // We may need to add a bitcast here to get types to line up. if (MemVTScalarTy != Vec.getValueType()) { unsigned Elts = Vec.getValueType().getSizeInBits() / MemVTScalarTy.getSizeInBits(); - if (Val.getValueType().isVector()) { - unsigned IdxC = cast<ConstantSDNode>(Idx)->getZExtValue(); - unsigned NewIdx = - ((uint64_t)IdxC * MemVT.getVectorNumElements()) / Elts; - Idx = DAG.getConstant(NewIdx, SDLoc(Val), Idx.getValueType()); - } EVT NewVecTy = EVT::getVectorVT(*DAG.getContext(), MemVTScalarTy, Elts); Vec = DAG.getBitcast(NewVecTy, Vec); } auto OpC = (MemVT.isVector()) ? ISD::EXTRACT_SUBVECTOR : ISD::EXTRACT_VECTOR_ELT; - Val = DAG.getNode(OpC, SDLoc(Val), MemVT, Vec, Idx); + Val = DAG.getNode(OpC, SDLoc(Val), MemVT, Vec, Val.getOperand(1)); } Ops.push_back(Val); } |

