[AArch64][DAGCombine] Add performBuildVectorCombine 'extract_elt ~> anyext'
authorDavid Sherwood <david.sherwood@arm.com>
Fri, 29 Jul 2022 08:32:08 +0000 (09:32 +0100)
committerTobias Hieta <tobias@hieta.se>
Tue, 9 Aug 2022 11:30:00 +0000 (13:30 +0200)
commit9f4d9a0b7b75210b284816e88362f48e7f64aff8
treee50f6ec65fefda182b51ff0eb84fa250dd1deee2
parent53cfe2c77e584a6272a65c945e576d891a99bba8
[AArch64][DAGCombine] Add performBuildVectorCombine 'extract_elt ~> anyext'

A build vector of two extracted elements is equivalent to an extract
subvector where the inner vector is any-extended to the
extract_vector_elt VT, because extract_vector_elt has the effect of an
any-extend.

  (build_vector (extract_elt_i16_to_i32 vec Idx+0) (extract_elt_i16_to_i32 vec Idx+1))
  => (extract_subvector (anyext_i16_to_i32 vec) Idx)

Depends on D130697

Differential Revision: https://reviews.llvm.org/D130698

(cherry picked from commit 487fa6f8c3af87232f7ff9484568be7782f7f8b2)
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/test/CodeGen/AArch64/bitcast-promote-widen.ll
llvm/test/CodeGen/AArch64/sve-fixed-length-extract-subvector.ll
llvm/test/CodeGen/AArch64/sve-fixed-length-masked-gather.ll
llvm/test/CodeGen/AArch64/sve-fixed-length-masked-loads.ll
llvm/test/CodeGen/AArch64/sve-fixed-length-masked-scatter.ll
llvm/test/CodeGen/AArch64/sve-fixed-length-masked-stores.ll
llvm/test/CodeGen/AArch64/vector-fcvt.ll