diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2021-08-05 15:04:06 +0100 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2021-08-05 15:40:48 +0100 |
commit | 2cbf9fd402afe8c33272bf60997cfb7e1f7c5f69 (patch) | |
tree | fb3b6da45f69b6095c14eef209e2eb433e045594 /llvm/tools/llvm-diff/lib | |
parent | 38b098be6605494cc7308ea9b08f920c4c3fe4ce (diff) | |
download | llvm-2cbf9fd402afe8c33272bf60997cfb7e1f7c5f69.zip llvm-2cbf9fd402afe8c33272bf60997cfb7e1f7c5f69.tar.gz llvm-2cbf9fd402afe8c33272bf60997cfb7e1f7c5f69.tar.bz2 |
[DAG] DAGCombiner::visitVECTOR_SHUFFLE - recognise INSERT_SUBVECTOR patterns
IR typically creates INSERT_SUBVECTOR patterns as a widening of the subvector with undefs to pad to the destination size, followed by a shuffle for the actual insertion - SelectionDAGBuilder has to do something similar for shuffles when source/destination vectors are different sizes.
This combine attempts to recognize these patterns by looking for a shuffle of a subvector (from a CONCAT_VECTORS) that starts at a modulo of its size into an otherwise identity shuffle of the base vector.
This uncovered a couple of target-specific issues as we haven't often created INSERT_SUBVECTOR nodes in generic code - aarch64 could only handle insertions into the bottom of undefs (i.e. a vector widening), and x86-avx512 vXi1 insertion wasn't keeping track of undef elements in the base vector.
Fixes PR50053
Differential Revision: https://reviews.llvm.org/D107068
Diffstat (limited to 'llvm/tools/llvm-diff/lib')
0 files changed, 0 insertions, 0 deletions