diff options
author | Hal Finkel <hfinkel@anl.gov> | 2014-03-30 15:10:18 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2014-03-30 15:10:18 +0000 |
commit | 90adf0fe0619b7ed7fea4a64675fd1d8cf151fe2 (patch) | |
tree | f0267a4946c16630a05a8f0de003aeb0c9bdd2c2 /clang/lib/AST/MicrosoftMangle.cpp | |
parent | c1e8aa06aa52b9404300c29fe66da333c747e730 (diff) | |
download | bcm5719-llvm-90adf0fe0619b7ed7fea4a64675fd1d8cf151fe2.tar.gz bcm5719-llvm-90adf0fe0619b7ed7fea4a64675fd1d8cf151fe2.zip |
Make use of previously generated stores in SelectionDAGLegalize::ExpandExtractFromVectorThroughStack
When expanding EXTRACT_VECTOR_ELT and EXTRACT_SUBVECTOR using
SelectionDAGLegalize::ExpandExtractFromVectorThroughStack, we store the entire
vector and then load the piece we want. This is fine in isolation, but
generating a new store (and corresponding stack slot) for each extraction ends
up producing code of poor quality. When we scalarize a vector operation (using
SelectionDAG::UnrollVectorOp for example) we generate one EXTRACT_VECTOR_ELT
for each element in the vector. This used to generate one stored copy of the
vector for each element in the vector. Now we search the uses of the vector for
a suitable store before generating a new one, which results in much more
efficient scalarization code.
llvm-svn: 205153
Diffstat (limited to 'clang/lib/AST/MicrosoftMangle.cpp')
0 files changed, 0 insertions, 0 deletions