1//===-- SystemZSelectionDAGInfo.h - SystemZ 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 SystemZ subclass for SelectionDAGTargetInfo.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSELECTIONDAGINFO_H
14#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSELECTIONDAGINFO_H
15
16#include "llvm/CodeGen/SelectionDAGTargetInfo.h"
17
18namespace llvm {
19
20class SystemZTargetMachine;
21
22class SystemZSelectionDAGInfo : public SelectionDAGTargetInfo {
23public:
24  explicit SystemZSelectionDAGInfo() = default;
25
26  SDValue EmitTargetCodeForMemcpy(SelectionDAG &DAG, const SDLoc &DL,
27                                  SDValue Chain, SDValue Dst, SDValue Src,
28                                  SDValue Size, Align Alignment,
29                                  bool IsVolatile, bool AlwaysInline,
30                                  MachinePointerInfo DstPtrInfo,
31                                  MachinePointerInfo SrcPtrInfo) const override;
32
33  SDValue EmitTargetCodeForMemset(SelectionDAG &DAG, const SDLoc &DL,
34                                  SDValue Chain, SDValue Dst, SDValue Byte,
35                                  SDValue Size, Align Alignment,
36                                  bool IsVolatile,
37                                  MachinePointerInfo DstPtrInfo) const override;
38
39  std::pair<SDValue, SDValue>
40  EmitTargetCodeForMemcmp(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
41                          SDValue Src1, SDValue Src2, SDValue Size,
42                          MachinePointerInfo Op1PtrInfo,
43                          MachinePointerInfo Op2PtrInfo) const override;
44
45  std::pair<SDValue, SDValue>
46  EmitTargetCodeForMemchr(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
47                          SDValue Src, SDValue Char, SDValue Length,
48                          MachinePointerInfo SrcPtrInfo) const override;
49
50  std::pair<SDValue, SDValue> EmitTargetCodeForStrcpy(
51      SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Dest,
52      SDValue Src, MachinePointerInfo DestPtrInfo,
53      MachinePointerInfo SrcPtrInfo, bool isStpcpy) const override;
54
55  std::pair<SDValue, SDValue>
56  EmitTargetCodeForStrcmp(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
57                          SDValue Src1, SDValue Src2,
58                          MachinePointerInfo Op1PtrInfo,
59                          MachinePointerInfo Op2PtrInfo) const override;
60
61  std::pair<SDValue, SDValue>
62  EmitTargetCodeForStrlen(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
63                          SDValue Src,
64                          MachinePointerInfo SrcPtrInfo) const override;
65
66  std::pair<SDValue, SDValue>
67  EmitTargetCodeForStrnlen(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
68                           SDValue Src, SDValue MaxLength,
69                           MachinePointerInfo SrcPtrInfo) const override;
70};
71
72} // end namespace llvm
73
74#endif
75