summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorNirav Dave <niravd@google.com>2017-07-18 14:39:09 +0000
committerNirav Dave <niravd@google.com>2017-07-18 14:39:09 +0000
commitf87c8e82f699c7bfdb1d3f2a0fed0f263a9f83ba (patch)
tree8daa8e6d7643d19ddb4955149f64660ff9b33867 /llvm/lib/CodeGen
parentc2cbb525ecfc2c94059210781c077c2a4ecc578a (diff)
downloadbcm5719-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.cpp7
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,
OpenPOWER on IntegriCloud