10b57cec5SDimitry Andric //===-- SystemZSelectionDAGInfo.h - SystemZ 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 SystemZ subclass for SelectionDAGTargetInfo.
100b57cec5SDimitry Andric //
110b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
120b57cec5SDimitry Andric 
130b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSELECTIONDAGINFO_H
140b57cec5SDimitry Andric #define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSELECTIONDAGINFO_H
150b57cec5SDimitry Andric 
160b57cec5SDimitry Andric #include "llvm/CodeGen/SelectionDAGTargetInfo.h"
170b57cec5SDimitry Andric 
180b57cec5SDimitry Andric namespace llvm {
190b57cec5SDimitry Andric 
200b57cec5SDimitry Andric class SystemZSelectionDAGInfo : public SelectionDAGTargetInfo {
210b57cec5SDimitry Andric public:
220b57cec5SDimitry Andric   explicit SystemZSelectionDAGInfo() = default;
230b57cec5SDimitry Andric 
240b57cec5SDimitry Andric   SDValue EmitTargetCodeForMemcpy(SelectionDAG &DAG, const SDLoc &DL,
250b57cec5SDimitry Andric                                   SDValue Chain, SDValue Dst, SDValue Src,
265ffd83dbSDimitry Andric                                   SDValue Size, Align Alignment,
275ffd83dbSDimitry Andric                                   bool IsVolatile, bool AlwaysInline,
280b57cec5SDimitry Andric                                   MachinePointerInfo DstPtrInfo,
290b57cec5SDimitry Andric                                   MachinePointerInfo SrcPtrInfo) const override;
300b57cec5SDimitry Andric 
310b57cec5SDimitry Andric   SDValue EmitTargetCodeForMemset(SelectionDAG &DAG, const SDLoc &DL,
320b57cec5SDimitry Andric                                   SDValue Chain, SDValue Dst, SDValue Byte,
335ffd83dbSDimitry Andric                                   SDValue Size, Align Alignment,
3481ad6265SDimitry Andric                                   bool IsVolatile, bool AlwaysInline,
350b57cec5SDimitry Andric                                   MachinePointerInfo DstPtrInfo) const override;
360b57cec5SDimitry Andric 
370b57cec5SDimitry Andric   std::pair<SDValue, SDValue>
380b57cec5SDimitry Andric   EmitTargetCodeForMemcmp(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
390b57cec5SDimitry Andric                           SDValue Src1, SDValue Src2, SDValue Size,
400b57cec5SDimitry Andric                           MachinePointerInfo Op1PtrInfo,
410b57cec5SDimitry Andric                           MachinePointerInfo Op2PtrInfo) const override;
420b57cec5SDimitry Andric 
430b57cec5SDimitry Andric   std::pair<SDValue, SDValue>
440b57cec5SDimitry Andric   EmitTargetCodeForMemchr(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
450b57cec5SDimitry Andric                           SDValue Src, SDValue Char, SDValue Length,
460b57cec5SDimitry Andric                           MachinePointerInfo SrcPtrInfo) const override;
470b57cec5SDimitry Andric 
480b57cec5SDimitry Andric   std::pair<SDValue, SDValue> EmitTargetCodeForStrcpy(
490b57cec5SDimitry Andric       SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Dest,
500b57cec5SDimitry Andric       SDValue Src, MachinePointerInfo DestPtrInfo,
510b57cec5SDimitry Andric       MachinePointerInfo SrcPtrInfo, bool isStpcpy) const override;
520b57cec5SDimitry Andric 
530b57cec5SDimitry Andric   std::pair<SDValue, SDValue>
540b57cec5SDimitry Andric   EmitTargetCodeForStrcmp(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
550b57cec5SDimitry Andric                           SDValue Src1, SDValue Src2,
560b57cec5SDimitry Andric                           MachinePointerInfo Op1PtrInfo,
570b57cec5SDimitry Andric                           MachinePointerInfo Op2PtrInfo) const override;
580b57cec5SDimitry Andric 
590b57cec5SDimitry Andric   std::pair<SDValue, SDValue>
600b57cec5SDimitry Andric   EmitTargetCodeForStrlen(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
610b57cec5SDimitry Andric                           SDValue Src,
620b57cec5SDimitry Andric                           MachinePointerInfo SrcPtrInfo) const override;
630b57cec5SDimitry Andric 
640b57cec5SDimitry Andric   std::pair<SDValue, SDValue>
650b57cec5SDimitry Andric   EmitTargetCodeForStrnlen(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
660b57cec5SDimitry Andric                            SDValue Src, SDValue MaxLength,
670b57cec5SDimitry Andric                            MachinePointerInfo SrcPtrInfo) const override;
680b57cec5SDimitry Andric };
690b57cec5SDimitry Andric 
700b57cec5SDimitry Andric } // end namespace llvm
710b57cec5SDimitry Andric 
720b57cec5SDimitry Andric #endif
73