From: Nirav Dave Date: Tue, 18 Jul 2017 14:39:09 +0000 (+0000) Subject: [DAG] Allow base element type of store merge type to also be a vector. X-Git-Tag: android-x86-7.1-r4~13360 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=7a0cfc0ffdd2e5c8064ade98eeded780158f5859;p=android-x86%2Fexternal-llvm.git [DAG] Allow base element type of store merge type to also be a vector. Correctly calculate merged vector size if MemVT is already a vector. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308312 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index b733ce76c6a..d526dfd0cc4 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -12763,7 +12763,12 @@ bool DAGCombiner::MergeConsecutiveStores(StoreSDNode *St) { TLI.storeOfVectorConstantIsCheap(MemVT, i + 1, FirstStoreAS)) && !NoVectors) { // Find a legal type for the vector store. - EVT Ty = EVT::getVectorVT(Context, MemVT, i + 1); + unsigned Elts = i + 1; + if (MemVT.isVector()) { + // When merging vector stores, get the total number of elements. + Elts *= MemVT.getVectorNumElements(); + } + EVT Ty = EVT::getVectorVT(Context, MemVT.getScalarType(), Elts); if (TLI.isTypeLegal(Ty) && TLI.canMergeStoresTo(FirstStoreAS, Ty, DAG) && TLI.allowsMemoryAccess(Context, DL, Ty, FirstStoreAS,