[CodeGen] Combine concat_vector of trunc'd scalar to scalar_to_vector.
authorAhmed Bougacha <ahmed.bougacha@gmail.com>
Thu, 9 Apr 2015 20:04:47 +0000 (20:04 +0000)
committerAhmed Bougacha <ahmed.bougacha@gmail.com>
Thu, 9 Apr 2015 20:04:47 +0000 (20:04 +0000)
commitdf4373778263833340f65a681c489b01a5fcc26c
treee6be711e59e6059fd4230dd1c7902797968a1f6d
parentbd0c7eb4dc127b818b3da03d64c06c8cab55303c
[CodeGen] Combine concat_vector of trunc'd scalar to scalar_to_vector.

We already do:
  concat_vectors(scalar, undef) -> scalar_to_vector(scalar)
When the scalar is legal.
When it's not, but is a truncated legal scalar, we can also do:
  concat_vectors(trunc(scalar), undef) -> scalar_to_vector(scalar)
Which is equivalent, since the upper lanes are undef anyway.
While there, teach the combine to look at more than 2 operands.

Differential Revision: http://reviews.llvm.org/D8883

llvm-svn: 234530
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/test/CodeGen/AArch64/concat_vector-truncate-combine.ll
llvm/test/CodeGen/AArch64/concat_vector-truncated-scalar-combine.ll [new file with mode: 0644]