diff options
author | Nirav Dave <niravd@google.com> | 2017-07-18 14:39:09 +0000 |
---|---|---|
committer | Nirav Dave <niravd@google.com> | 2017-07-18 14:39:09 +0000 |
commit | f87c8e82f699c7bfdb1d3f2a0fed0f263a9f83ba (patch) | |
tree | 8daa8e6d7643d19ddb4955149f64660ff9b33867 /llvm/lib/CodeGen | |
parent | c2cbb525ecfc2c94059210781c077c2a4ecc578a (diff) | |
download | bcm5719-llvm-f87c8e82f699c7bfdb1d3f2a0fed0f263a9f83ba.tar.gz bcm5719-llvm-f87c8e82f699c7bfdb1d3f2a0fed0f263a9f83ba.zip |
[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.
llvm-svn: 308312
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index b733ce76c6a..d526dfd0cc4 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/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, |