1259698Sdim//===-- SystemZSelectionDAGInfo.h - SystemZ SelectionDAG Info ---*- C++ -*-===//
2259698Sdim//
3259698Sdim//                     The LLVM Compiler Infrastructure
4259698Sdim//
5259698Sdim// This file is distributed under the University of Illinois Open Source
6259698Sdim// License. See LICENSE.TXT for details.
7259698Sdim//
8259698Sdim//===----------------------------------------------------------------------===//
9259698Sdim//
10259698Sdim// This file defines the SystemZ subclass for TargetSelectionDAGInfo.
11259698Sdim//
12259698Sdim//===----------------------------------------------------------------------===//
13259698Sdim
14280031Sdim#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSELECTIONDAGINFO_H
15280031Sdim#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSELECTIONDAGINFO_H
16259698Sdim
17259698Sdim#include "llvm/Target/TargetSelectionDAGInfo.h"
18259698Sdim
19259698Sdimnamespace llvm {
20259698Sdim
21259698Sdimclass SystemZTargetMachine;
22259698Sdim
23259698Sdimclass SystemZSelectionDAGInfo : public TargetSelectionDAGInfo {
24259698Sdimpublic:
25288943Sdim  explicit SystemZSelectionDAGInfo() = default;
26259698Sdim
27259698Sdim  SDValue EmitTargetCodeForMemcpy(SelectionDAG &DAG, SDLoc DL, SDValue Chain,
28259698Sdim                                  SDValue Dst, SDValue Src,
29259698Sdim                                  SDValue Size, unsigned Align,
30259698Sdim                                  bool IsVolatile, bool AlwaysInline,
31259698Sdim                                  MachinePointerInfo DstPtrInfo,
32276479Sdim                                  MachinePointerInfo SrcPtrInfo) const override;
33259698Sdim
34276479Sdim  SDValue EmitTargetCodeForMemset(SelectionDAG &DAG, SDLoc DL,
35276479Sdim                                  SDValue Chain, SDValue Dst, SDValue Byte,
36276479Sdim                                  SDValue Size, unsigned Align, bool IsVolatile,
37276479Sdim                                  MachinePointerInfo DstPtrInfo) const override;
38259698Sdim
39276479Sdim  std::pair<SDValue, SDValue>
40259698Sdim  EmitTargetCodeForMemcmp(SelectionDAG &DAG, SDLoc DL, SDValue Chain,
41259698Sdim                          SDValue Src1, SDValue Src2, SDValue Size,
42259698Sdim                          MachinePointerInfo Op1PtrInfo,
43276479Sdim                          MachinePointerInfo Op2PtrInfo) const override;
44259698Sdim
45276479Sdim  std::pair<SDValue, SDValue>
46259698Sdim  EmitTargetCodeForMemchr(SelectionDAG &DAG, SDLoc DL, SDValue Chain,
47259698Sdim                          SDValue Src, SDValue Char, SDValue Length,
48276479Sdim                          MachinePointerInfo SrcPtrInfo) const override;
49259698Sdim
50276479Sdim  std::pair<SDValue, SDValue>
51259698Sdim  EmitTargetCodeForStrcpy(SelectionDAG &DAG, SDLoc DL, SDValue Chain,
52259698Sdim                          SDValue Dest, SDValue Src,
53259698Sdim                          MachinePointerInfo DestPtrInfo,
54259698Sdim                          MachinePointerInfo SrcPtrInfo,
55276479Sdim                          bool isStpcpy) const override;
56259698Sdim
57276479Sdim  std::pair<SDValue, SDValue>
58259698Sdim  EmitTargetCodeForStrcmp(SelectionDAG &DAG, SDLoc DL, SDValue Chain,
59259698Sdim                          SDValue Src1, SDValue Src2,
60259698Sdim                          MachinePointerInfo Op1PtrInfo,
61276479Sdim                          MachinePointerInfo Op2PtrInfo) const override;
62259698Sdim
63276479Sdim  std::pair<SDValue, SDValue>
64259698Sdim  EmitTargetCodeForStrlen(SelectionDAG &DAG, SDLoc DL, SDValue Chain,
65276479Sdim                          SDValue Src,
66276479Sdim                          MachinePointerInfo SrcPtrInfo) const override;
67259698Sdim
68276479Sdim  std::pair<SDValue, SDValue>
69259698Sdim  EmitTargetCodeForStrnlen(SelectionDAG &DAG, SDLoc DL, SDValue Chain,
70259698Sdim                           SDValue Src, SDValue MaxLength,
71276479Sdim                           MachinePointerInfo SrcPtrInfo) const override;
72259698Sdim};
73259698Sdim
74276479Sdim} // end namespace llvm
75259698Sdim
76259698Sdim#endif
77