LLVM  8.0.1
SystemZSelectionDAGInfo.h
Go to the documentation of this file.
1 //===-- SystemZSelectionDAGInfo.h - SystemZ SelectionDAG Info ---*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the SystemZ subclass for SelectionDAGTargetInfo.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSELECTIONDAGINFO_H
15 #define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZSELECTIONDAGINFO_H
16 
18 
19 namespace llvm {
20 
21 class SystemZTargetMachine;
22 
24 public:
25  explicit SystemZSelectionDAGInfo() = default;
26 
28  SDValue Chain, SDValue Dst, SDValue Src,
29  SDValue Size, unsigned Align, bool IsVolatile,
30  bool AlwaysInline,
31  MachinePointerInfo DstPtrInfo,
32  MachinePointerInfo SrcPtrInfo) const override;
33 
35  SDValue Chain, SDValue Dst, SDValue Byte,
36  SDValue Size, unsigned Align, 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
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
This class represents lattice values for constants.
Definition: AllocatorList.h:24
constexpr char IsVolatile[]
Key for Kernel::Arg::Metadata::mIsVolatile.
std::pair< SDValue, SDValue > EmitTargetCodeForMemchr(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src, SDValue Char, SDValue Length, MachinePointerInfo SrcPtrInfo) const override
Emit target-specific code that performs a memchr, in cases where that is faster than a libcall...
SDValue EmitTargetCodeForMemset(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Dst, SDValue Byte, SDValue Size, unsigned Align, bool IsVolatile, MachinePointerInfo DstPtrInfo) const override
Emit target-specific code that performs a memset.
std::pair< SDValue, SDValue > EmitTargetCodeForMemcmp(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src1, SDValue Src2, SDValue Size, MachinePointerInfo Op1PtrInfo, MachinePointerInfo Op2PtrInfo) const override
Emit target-specific code that performs a memcmp, in cases where that is faster than a libcall...
SDValue EmitTargetCodeForMemcpy(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Dst, SDValue Src, SDValue Size, unsigned Align, bool IsVolatile, bool AlwaysInline, MachinePointerInfo DstPtrInfo, MachinePointerInfo SrcPtrInfo) const override
Emit target-specific code that performs a memcpy.
Targets can subclass this to parameterize the SelectionDAG lowering and instruction selection process...
This class contains a discriminated union of information about pointers in memory operands...
This is used to represent a portion of an LLVM function in a low-level Data Dependence DAG representa...
Definition: SelectionDAG.h:222
std::pair< SDValue, SDValue > EmitTargetCodeForStrcmp(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src1, SDValue Src2, MachinePointerInfo Op1PtrInfo, MachinePointerInfo Op2PtrInfo) const override
Emit target-specific code that performs a strcmp, in cases where that is faster than a libcall...
Wrapper class for IR location info (IR ordering and DebugLoc) to be passed into SDNode creation funct...
uint32_t Size
Definition: Profile.cpp:47
std::pair< SDValue, SDValue > EmitTargetCodeForStrnlen(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src, SDValue MaxLength, MachinePointerInfo SrcPtrInfo) const override
std::pair< SDValue, SDValue > EmitTargetCodeForStrcpy(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Dest, SDValue Src, MachinePointerInfo DestPtrInfo, MachinePointerInfo SrcPtrInfo, bool isStpcpy) const override
Emit target-specific code that performs a strcpy or stpcpy, in cases where that is faster than a libc...
std::pair< SDValue, SDValue > EmitTargetCodeForStrlen(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src, MachinePointerInfo SrcPtrInfo) const override
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation...