[ARM] Fix MVE_VQxDMLxDH instruction class
authorMikhail Maltsev <mikhail.maltsev@arm.com>
Mon, 1 Jul 2019 16:07:58 +0000 (16:07 +0000)
committerMikhail Maltsev <mikhail.maltsev@arm.com>
Mon, 1 Jul 2019 16:07:58 +0000 (16:07 +0000)
commitec01b2964e0b733881e2fdb359f6445d6072fe03
treede0df266e1046eae636ccb60c621754a62e947a3
parentebb2f49e2daf6732ad7e73c620df3c658dd05334
[ARM] Fix MVE_VQxDMLxDH instruction class

Summary:
According to the ARMARM, the VQDMLADH, VQRDMLADH, VQDMLSDH and
VQRDMLSDH instructions handle their results as follows: "The base
variant writes the results into the lower element of each pair of
elements in the destination register, whereas the exchange variant
writes to the upper element in each pair". I.e., the initial content
of the output register affects the result, as usual, we model this
with an additional input.

Also, for 32-bit variants Qd is not allowed to be the same register as
Qm and Qn, we use @earlyclobber to indicate this.

This patch also changes vpred_r to vpred_n because the instructions
don't have an explicit 'inactive' operand.

Reviewers: dmgreen, ostannard, simon_tatham

Reviewed By: simon_tatham

Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364796 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMInstrMVE.td