LLVM 22.0.0git
PPCSelectionDAGInfo.h
Go to the documentation of this file.
1//===----------------------------------------------------------------------===//
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#ifndef LLVM_LIB_TARGET_POWERPC_PPCSELECTIONDAGINFO_H
10#define LLVM_LIB_TARGET_POWERPC_PPCSELECTIONDAGINFO_H
11
13
14#define GET_SDNODE_ENUM
15#include "PPCGenSDNodeInfo.inc"
16
17namespace llvm {
18namespace PPCISD {
19
20enum NodeType : unsigned {
21 /// The result of the mflr at function entry, used for PIC code.
22 GlobalBaseReg = GENERATED_OPCODE_END,
23
24 /// The combination of sra[wd]i and addze used to implemented signed
25 /// integer division by a power of 2. The first operand is the dividend,
26 /// and the second is the constant shift amount (representing the
27 /// divisor).
29
30 /// R32 = MFOCRF(CRREG, INFLAG) - Represents the MFOCRF instruction.
31 /// This copies the bits corresponding to the specified CRREG into the
32 /// resultant GPR. Bits corresponding to other CR regs are undefined.
34
35 // FIXME: Remove these once the ANDI glue bug is fixed:
36 /// i1 = ANDI_rec_1_[EQ|GT]_BIT(i32 or i64 x) - Represents the result of the
37 /// eq or gt bit of CR0 after executing andi. x, 1. This is used to
38 /// implement truncation of i32 or i64 to i1.
41
42 // READ_TIME_BASE - A read of the 64-bit time-base register on a 32-bit
43 // target (returns (Lo, Hi)). It takes a chain operand.
45
46 /// CHAIN = BDNZ CHAIN, DESTBB - These are used to create counter-based
47 /// loops.
50
51 /// GPRC = address of _GLOBAL_OFFSET_TABLE_. Used by general dynamic and
52 /// local dynamic TLS and position indendepent code on PPC32.
54
55 /// VRRC = VADD_SPLAT Elt, EltSize - Temporary node to be expanded
56 /// during instruction selection to optimize a BUILD_VECTOR into
57 /// operations on splats. This is necessary to avoid losing these
58 /// optimizations due to constant folding.
60};
61
62} // namespace PPCISD
63
65public:
67
69
70 const char *getTargetNodeName(unsigned Opcode) const override;
71
72 void verifyTargetNode(const SelectionDAG &DAG,
73 const SDNode *N) const override;
74
75 std::pair<SDValue, SDValue>
77 SDValue Op1, SDValue Op2, SDValue Op3,
78 const CallInst *CI) const override;
79 std::pair<SDValue, SDValue>
81 SDValue Src, const CallInst *CI) const override;
82};
83
84} // namespace llvm
85
86#endif // LLVM_LIB_TARGET_POWERPC_PPCSELECTIONDAGINFO_H
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
This class represents a function call, abstracting a target machine's calling convention.
std::pair< SDValue, SDValue > EmitTargetCodeForMemcmp(SelectionDAG &DAG, const SDLoc &dl, SDValue Chain, SDValue Op1, SDValue Op2, SDValue Op3, const CallInst *CI) const override
Emit target-specific code that performs a memcmp/bcmp, in cases where that is faster than a libcall.
const char * getTargetNodeName(unsigned Opcode) const override
Returns the name of the given target-specific opcode, suitable for debug printing.
std::pair< SDValue, SDValue > EmitTargetCodeForStrlen(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src, const CallInst *CI) const override
void verifyTargetNode(const SelectionDAG &DAG, const SDNode *N) const override
Checks that the given target-specific node is valid. Aborts if it is not.
Wrapper class for IR location info (IR ordering and DebugLoc) to be passed into SDNode creation funct...
Represents one node in the SelectionDAG.
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation.
SelectionDAGGenTargetInfo(const SDNodeInfo &GenNodeInfo)
This is used to represent a portion of an LLVM function in a low-level Data Dependence DAG representa...
@ BDNZ
CHAIN = BDNZ CHAIN, DESTBB - These are used to create counter-based loops.
@ ANDI_rec_1_EQ_BIT
i1 = ANDI_rec_1_[EQ|GT]_BIT(i32 or i64 x) - Represents the result of the eq or gt bit of CR0 after ex...
@ MFOCRF
R32 = MFOCRF(CRREG, INFLAG) - Represents the MFOCRF instruction.
@ VADD_SPLAT
VRRC = VADD_SPLAT Elt, EltSize - Temporary node to be expanded during instruction selection to optimi...
@ PPC32_PICGOT
GPRC = address of GLOBAL_OFFSET_TABLE.
@ GlobalBaseReg
The result of the mflr at function entry, used for PIC code.
@ SRA_ADDZE
The combination of sra[wd]i and addze used to implemented signed integer division by a power of 2.
This is an optimization pass for GlobalISel generic memory operations.
#define N