xref: /llvm-project/llvm/lib/Target/AArch64/AArch64SelectionDAGInfo.h (revision 9ae92d70561bcc95a7f818920238e764253d9758)
1 //===-- AArch64SelectionDAGInfo.h - AArch64 SelectionDAG Info ---*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines the AArch64 subclass for SelectionDAGTargetInfo.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_LIB_TARGET_AARCH64_AARCH64SELECTIONDAGINFO_H
14 #define LLVM_LIB_TARGET_AARCH64_AARCH64SELECTIONDAGINFO_H
15 
16 #include "llvm/CodeGen/SelectionDAGTargetInfo.h"
17 
18 namespace llvm {
19 
20 class AArch64SelectionDAGInfo : public SelectionDAGTargetInfo {
21 public:
22   bool isTargetMemoryOpcode(unsigned Opcode) const override;
23 
24   bool isTargetStrictFPOpcode(unsigned Opcode) const override;
25 
26   SDValue EmitMOPS(unsigned Opcode, SelectionDAG &DAG, const SDLoc &DL,
27                    SDValue Chain, SDValue Dst, SDValue SrcOrValue, SDValue Size,
28                    Align Alignment, bool isVolatile,
29                    MachinePointerInfo DstPtrInfo,
30                    MachinePointerInfo SrcPtrInfo) const;
31 
32   SDValue EmitTargetCodeForMemcpy(SelectionDAG &DAG, const SDLoc &dl,
33                                   SDValue Chain, SDValue Dst, SDValue Src,
34                                   SDValue Size, Align Alignment,
35                                   bool isVolatile, bool AlwaysInline,
36                                   MachinePointerInfo DstPtrInfo,
37                                   MachinePointerInfo SrcPtrInfo) const override;
38   SDValue EmitTargetCodeForMemset(SelectionDAG &DAG, const SDLoc &dl,
39                                   SDValue Chain, SDValue Dst, SDValue Src,
40                                   SDValue Size, Align Alignment,
41                                   bool isVolatile, bool AlwaysInline,
42                                   MachinePointerInfo DstPtrInfo) const override;
43   SDValue
44   EmitTargetCodeForMemmove(SelectionDAG &DAG, const SDLoc &dl, SDValue Chain,
45                            SDValue Dst, SDValue Src, SDValue Size,
46                            Align Alignment, bool isVolatile,
47                            MachinePointerInfo DstPtrInfo,
48                            MachinePointerInfo SrcPtrInfo) const override;
49 
50   SDValue EmitTargetCodeForSetTag(SelectionDAG &DAG, const SDLoc &dl,
51                                   SDValue Chain, SDValue Op1, SDValue Op2,
52                                   MachinePointerInfo DstPtrInfo,
53                                   bool ZeroData) const override;
54 
55   SDValue EmitStreamingCompatibleMemLibCall(SelectionDAG &DAG, const SDLoc &DL,
56                                             SDValue Chain, SDValue Dst,
57                                             SDValue Src, SDValue Size,
58                                             RTLIB::Libcall LC) const;
59 };
60 }
61 
62 #endif
63