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