xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/AArch64/AArch64SelectionDAGInfo.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
10b57cec5SDimitry Andric //===-- AArch64SelectionDAGInfo.h - AArch64 SelectionDAG Info ---*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric //
90b57cec5SDimitry Andric // This file defines the AArch64 subclass for SelectionDAGTargetInfo.
100b57cec5SDimitry Andric //
110b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
120b57cec5SDimitry Andric 
130b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_AARCH64_AARCH64SELECTIONDAGINFO_H
140b57cec5SDimitry Andric #define LLVM_LIB_TARGET_AARCH64_AARCH64SELECTIONDAGINFO_H
150b57cec5SDimitry Andric 
160b57cec5SDimitry Andric #include "llvm/CodeGen/SelectionDAGTargetInfo.h"
170b57cec5SDimitry Andric 
180b57cec5SDimitry Andric namespace llvm {
190b57cec5SDimitry Andric 
200b57cec5SDimitry Andric class AArch64SelectionDAGInfo : public SelectionDAGTargetInfo {
210b57cec5SDimitry Andric public:
221fd87a68SDimitry Andric   SDValue EmitMOPS(AArch64ISD::NodeType SDOpcode, SelectionDAG &DAG,
231fd87a68SDimitry Andric                    const SDLoc &DL, SDValue Chain, SDValue Dst,
241fd87a68SDimitry Andric                    SDValue SrcOrValue, SDValue Size, Align Alignment,
251fd87a68SDimitry Andric                    bool isVolatile, MachinePointerInfo DstPtrInfo,
261fd87a68SDimitry Andric                    MachinePointerInfo SrcPtrInfo) const;
271fd87a68SDimitry Andric 
281fd87a68SDimitry Andric   SDValue EmitTargetCodeForMemcpy(SelectionDAG &DAG, const SDLoc &dl,
291fd87a68SDimitry Andric                                   SDValue Chain, SDValue Dst, SDValue Src,
301fd87a68SDimitry Andric                                   SDValue Size, Align Alignment,
311fd87a68SDimitry Andric                                   bool isVolatile, bool AlwaysInline,
321fd87a68SDimitry Andric                                   MachinePointerInfo DstPtrInfo,
331fd87a68SDimitry Andric                                   MachinePointerInfo SrcPtrInfo) const override;
340b57cec5SDimitry Andric   SDValue EmitTargetCodeForMemset(SelectionDAG &DAG, const SDLoc &dl,
350b57cec5SDimitry Andric                                   SDValue Chain, SDValue Dst, SDValue Src,
365ffd83dbSDimitry Andric                                   SDValue Size, Align Alignment,
3781ad6265SDimitry Andric                                   bool isVolatile, bool AlwaysInline,
380b57cec5SDimitry Andric                                   MachinePointerInfo DstPtrInfo) const override;
391fd87a68SDimitry Andric   SDValue
401fd87a68SDimitry Andric   EmitTargetCodeForMemmove(SelectionDAG &DAG, const SDLoc &dl, SDValue Chain,
411fd87a68SDimitry Andric                            SDValue Dst, SDValue Src, SDValue Size,
421fd87a68SDimitry Andric                            Align Alignment, bool isVolatile,
431fd87a68SDimitry Andric                            MachinePointerInfo DstPtrInfo,
441fd87a68SDimitry Andric                            MachinePointerInfo SrcPtrInfo) const override;
451fd87a68SDimitry Andric 
460b57cec5SDimitry Andric   SDValue EmitTargetCodeForSetTag(SelectionDAG &DAG, const SDLoc &dl,
470b57cec5SDimitry Andric                                   SDValue Chain, SDValue Op1, SDValue Op2,
480b57cec5SDimitry Andric                                   MachinePointerInfo DstPtrInfo,
490b57cec5SDimitry Andric                                   bool ZeroData) const override;
50*0fca6ea1SDimitry Andric 
51*0fca6ea1SDimitry Andric   SDValue EmitStreamingCompatibleMemLibCall(SelectionDAG &DAG, const SDLoc &DL,
52*0fca6ea1SDimitry Andric                                             SDValue Chain, SDValue Dst,
53*0fca6ea1SDimitry Andric                                             SDValue Src, SDValue Size,
54*0fca6ea1SDimitry Andric                                             RTLIB::Libcall LC) const;
550b57cec5SDimitry Andric };
560b57cec5SDimitry Andric }
570b57cec5SDimitry Andric 
580b57cec5SDimitry Andric #endif
59