[ARM] Add support for the MVE long shift instructions
authorSam Tebbs <sam.tebbs@arm.com>
Fri, 28 Jun 2019 15:43:31 +0000 (15:43 +0000)
committerSam Tebbs <sam.tebbs@arm.com>
Fri, 28 Jun 2019 15:43:31 +0000 (15:43 +0000)
commite39e958da36da52d34e883dd5820262e96a8781a
tree8531832a979744c37c7b8efe661600430bc5b2b9
parent176b9f651685c52bce25e700a758bd33e6a5354d
[ARM] Add support for the MVE long shift instructions

MVE adds the lsll, lsrl and asrl instructions, which perform a shift on a 64 bit value separated into two 32 bit registers.

The Expand64BitShift function is modified to accept ISD::SHL, ISD::SRL and ISD::SRA and convert it into the appropriate opcode in ARMISD. An SHL is converted into an lsll, an SRL is converted into an lsrl for the immediate form and a negation and lsll for the register form, and SRA is converted into an asrl.

test/CodeGen/ARM/shift_parts.ll is added to test the logic of emitting these instructions.

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

llvm-svn: 364654
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/lib/Target/ARM/ARMISelLowering.h
llvm/lib/Target/ARM/ARMInstrInfo.td
llvm/lib/Target/ARM/ARMInstrMVE.td
llvm/test/CodeGen/ARM/shift_parts.ll [new file with mode: 0644]