From 2d7e757a836abb54590daa25fce626283adafadf Mon Sep 17 00:00:00 2001 From: Danilo Carvalho Grael Date: Tue, 17 Dec 2019 10:42:52 -0500 Subject: [AArch64][SVE] Add patterns for some arith SVE instructions. Summary: Add patterns for the following instructions: - smax, smin, umax, umin Reviewers: sdesmalen, huntergr, rengolin, efriedma, c-rhodes, mgudim, kmclaughlin Subscribers: amehsan Differential Revision: https://reviews.llvm.org/D71779 --- llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp') diff --git a/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp b/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp index 5362c0e0647..a51aa85a931 100644 --- a/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp @@ -271,6 +271,10 @@ private: bool SelectSVEAddSubImm(SDValue N, MVT VT, SDValue &Imm, SDValue &Shift); bool SelectSVELogicalImm(SDValue N, MVT VT, SDValue &Imm); + + bool SelectSVESignedArithImm(SDValue N, SDValue &Imm); + + bool SelectSVEArithImm(SDValue N, SDValue &Imm); }; } // end anonymous namespace @@ -2909,6 +2913,31 @@ bool AArch64DAGToDAGISel::SelectSVEAddSubImm(SDValue N, MVT VT, SDValue &Imm, SD return false; } +bool AArch64DAGToDAGISel::SelectSVESignedArithImm(SDValue N, SDValue &Imm) { + if (auto CNode = dyn_cast(N)) { + int64_t ImmVal = CNode->getSExtValue(); + SDLoc DL(N); + if (ImmVal >= -127 && ImmVal < 127) { + Imm = CurDAG->getTargetConstant(ImmVal, DL, MVT::i32); + return true; + } + } + return false; +} + +bool AArch64DAGToDAGISel::SelectSVEArithImm(SDValue N, SDValue &Imm) { + if (auto CNode = dyn_cast(N)) { + uint64_t ImmVal = CNode->getSExtValue(); + SDLoc DL(N); + ImmVal = ImmVal & 0xFF; + if (ImmVal < 256) { + Imm = CurDAG->getTargetConstant(ImmVal, DL, MVT::i32); + return true; + } + } + return false; +} + bool AArch64DAGToDAGISel::SelectSVELogicalImm(SDValue N, MVT VT, SDValue &Imm) { if (auto CNode = dyn_cast(N)) { uint64_t ImmVal = CNode->getZExtValue(); -- cgit v1.2.3