[ARM] MVE VADDLV lowering
authorDavid Green <david.green@arm.com>
Mon, 17 Feb 2020 11:35:22 +0000 (11:35 +0000)
committerDavid Green <david.green@arm.com>
Wed, 19 Feb 2020 11:07:20 +0000 (11:07 +0000)
commitfceb3e3b4aec635d4e31dda618c7e4c17516cdb9
tree1bfff2832dbb40a984a5360435616932395ce167
parent5e32e7981b3a099e9b12b3b83b0eae0460095966
[ARM] MVE VADDLV lowering

Following on from the extra VADDV lowering, this extends things to
handle VADDLV which allows summing values into a pair of i32 registers,
together treated as a i64. This needs to be done in DAGCombine too as
the types are otherwise illegal, which is a fairly simple addition on
top of the existing code.

There is also a VADDLVA instruction handled here, that adds the incoming
values from the two general purpose registers. As opposed to the
non-long version where we could just add patterns for add(x, VADDV), the
long version needs to handle this early before the i64 has being split
into too many pieces.

Differential Revision: https://reviews.llvm.org/D74224
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/lib/Target/ARM/ARMISelLowering.h
llvm/lib/Target/ARM/ARMInstrMVE.td
llvm/test/CodeGen/Thumb2/mve-vecreduce-add.ll