diff options
author | James Molloy <james.molloy@arm.com> | 2015-07-17 17:10:55 +0000 |
---|---|---|
committer | James Molloy <james.molloy@arm.com> | 2015-07-17 17:10:55 +0000 |
commit | a6702e2f145fa79f552f398200e50438dbecdf28 (patch) | |
tree | c192540087f0f001c2d26da949646964021dc388 /llvm/lib/Target/ARM/ARMISelLowering.cpp | |
parent | faf4e3c33bde9e37387624e3f2ed5f063fbbf74b (diff) | |
download | bcm5719-llvm-a6702e2f145fa79f552f398200e50438dbecdf28.tar.gz bcm5719-llvm-a6702e2f145fa79f552f398200e50438dbecdf28.zip |
[ARM] Use [SU]ABSDIFF nodes instead of intrinsics for VABD/VABA
No functional change, but it preps codegen for the future when SABSDIFF
will start getting generated in anger.
llvm-svn: 242546
Diffstat (limited to 'llvm/lib/Target/ARM/ARMISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMISelLowering.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index 0a5d8833c06..832fc974089 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -142,6 +142,11 @@ void ARMTargetLowering::addTypeForNEON(MVT VT, MVT PromotedLdStVT, setOperationAction(ISD::SREM, VT, Expand); setOperationAction(ISD::UREM, VT, Expand); setOperationAction(ISD::FREM, VT, Expand); + + if (VT.isInteger()) { + setOperationAction(ISD::SABSDIFF, VT, Legal); + setOperationAction(ISD::UABSDIFF, VT, Legal); + } } void ARMTargetLowering::addDRTypeForNEON(MVT VT) { @@ -9717,6 +9722,15 @@ static SDValue PerformIntrinsicCombine(SDNode *N, SelectionDAG &DAG) { // Don't do anything for most intrinsics. break; + case Intrinsic::arm_neon_vabds: + if (!N->getValueType(0).isInteger()) + return SDValue(); + return DAG.getNode(ISD::SABSDIFF, SDLoc(N), N->getValueType(0), + N->getOperand(1), N->getOperand(2)); + case Intrinsic::arm_neon_vabdu: + return DAG.getNode(ISD::UABSDIFF, SDLoc(N), N->getValueType(0), + N->getOperand(1), N->getOperand(2)); + // Vector shifts: check for immediate versions and lower them. // Note: This is done during DAG combining instead of DAG legalizing because // the build_vectors for 64-bit vector element shift counts are generally |