diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2015-05-21 10:05:03 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2015-05-21 10:05:03 +0000 |
| commit | e0541993545643aad2a74cc4bdbe73197fe9f9f4 (patch) | |
| tree | e8d097a57babaa2b1c2b92307489dc96a4e994ed /llvm/lib/Support/Threading.cpp | |
| parent | 1e0a69f22213fa223f229d908698cd36d7b54963 (diff) | |
| download | bcm5719-llvm-e0541993545643aad2a74cc4bdbe73197fe9f9f4.tar.gz bcm5719-llvm-e0541993545643aad2a74cc4bdbe73197fe9f9f4.zip | |
[X86][SSE] Improve support for 128-bit vector sign extension
This patch improves support for sign extension of the lower lanes of vectors of integers by making use of the SSE41 pmovsx* sign extension instructions where possible, and optimizing the sign extension by shifts on pre-SSE41 targets (avoiding the use of i64 arithmetic shifts which require scalarization).
It converts SIGN_EXTEND nodes to SIGN_EXTEND_VECTOR_INREG where necessary, that more closely matches the pmovsx* instruction than the default approach of using SIGN_EXTEND_INREG which splits the operation (into an ANY_EXTEND lowered to a shuffle followed by shifts) making instruction matching difficult during lowering. Necessary support for SIGN_EXTEND_VECTOR_INREG has been added to the DAGCombiner.
Differential Revision: http://reviews.llvm.org/D9848
llvm-svn: 237885
Diffstat (limited to 'llvm/lib/Support/Threading.cpp')
0 files changed, 0 insertions, 0 deletions

