[all-commits] [llvm/llvm-project] 2cbf9f: [DAG] DAGCombiner::visitVECTOR_SHUFFLE - recognise...
Simon Pilgrim via All-commits
all-commits at lists.llvm.org
Thu Aug 5 07:41:13 PDT 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 2cbf9fd402afe8c33272bf60997cfb7e1f7c5f69
https://github.com/llvm/llvm-project/commit/2cbf9fd402afe8c33272bf60997cfb7e1f7c5f69
Author: Simon Pilgrim <llvm-dev at redking.me.uk>
Date: 2021-08-05 (Thu, 05 Aug 2021)
Changed paths:
M llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
M llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
M llvm/lib/Target/X86/X86ISelLowering.cpp
M llvm/test/CodeGen/AArch64/arm64-neon-copy.ll
M llvm/test/CodeGen/X86/2012-04-26-sdglue.ll
M llvm/test/CodeGen/X86/avx-intrinsics-x86-upgrade.ll
M llvm/test/CodeGen/X86/avx-vperm2x128.ll
M llvm/test/CodeGen/X86/pr34592.ll
M llvm/test/CodeGen/X86/vector-shuffle-512-v16.ll
Log Message:
-----------
[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
More information about the All-commits
mailing list