1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "PPCSelectionDAGInfo.h"
#include "llvm/CodeGen/SelectionDAG.h"
#define GET_SDNODE_DESC
#include "PPCGenSDNodeInfo.inc"
using namespace llvm;
PPCSelectionDAGInfo::PPCSelectionDAGInfo()
: SelectionDAGGenTargetInfo(PPCGenSDNodeInfo) {}
PPCSelectionDAGInfo::~PPCSelectionDAGInfo() = default;
const char *PPCSelectionDAGInfo::getTargetNodeName(unsigned Opcode) const {
switch (static_cast<PPCISD::NodeType>(Opcode)) {
case PPCISD::GlobalBaseReg:
return "PPCISD::GlobalBaseReg";
case PPCISD::SRA_ADDZE:
return "PPCISD::SRA_ADDZE";
case PPCISD::READ_TIME_BASE:
return "PPCISD::READ_TIME_BASE";
case PPCISD::MFOCRF:
return "PPCISD::MFOCRF";
case PPCISD::ANDI_rec_1_EQ_BIT:
return "PPCISD::ANDI_rec_1_EQ_BIT";
case PPCISD::ANDI_rec_1_GT_BIT:
return "PPCISD::ANDI_rec_1_GT_BIT";
case PPCISD::BDNZ:
return "PPCISD::BDNZ";
case PPCISD::BDZ:
return "PPCISD::BDZ";
case PPCISD::PPC32_PICGOT:
return "PPCISD::PPC32_PICGOT";
case PPCISD::VADD_SPLAT:
return "PPCISD::VADD_SPLAT";
}
return SelectionDAGGenTargetInfo::getTargetNodeName(Opcode);
}
void PPCSelectionDAGInfo::verifyTargetNode(const SelectionDAG &DAG,
const SDNode *N) const {
switch (N->getOpcode()) {
default:
break;
case PPCISD::DYNAREAOFFSET:
// invalid number of results; expected 2, got 1
case PPCISD::TOC_ENTRY:
// invalid number of results; expected 1, got 2
case PPCISD::STORE_COND:
// invalid number of results; expected 2, got 3
case PPCISD::LD_SPLAT:
case PPCISD::SEXT_LD_SPLAT:
case PPCISD::ZEXT_LD_SPLAT:
// invalid number of operands; expected 2, got 3
case PPCISD::ST_VSR_SCAL_INT:
// invalid number of operands; expected 4, got 5
case PPCISD::XXPERM:
// operand #1 must have type v2f64, but has type v16i8
case PPCISD::ACC_BUILD:
// operand #3 must have type v4i32, but has type v16i8
case PPCISD::PAIR_BUILD:
// operand #1 must have type v4i32, but has type v16i8
return;
}
SelectionDAGGenTargetInfo::verifyTargetNode(DAG, N);
}
std::pair<SDValue, SDValue> PPCSelectionDAGInfo::EmitTargetCodeForMemcmp(
SelectionDAG &DAG, const SDLoc &dl, SDValue Chain, SDValue Op1, SDValue Op2,
SDValue Op3, const CallInst *CI) const {
return DAG.getMemcmp(Chain, dl, Op1, Op2, Op3, CI);
}
std::pair<SDValue, SDValue>
PPCSelectionDAGInfo::EmitTargetCodeForStrlen(SelectionDAG &DAG, const SDLoc &DL,
SDValue Chain, SDValue Src,
const CallInst *CI) const {
return DAG.getStrlen(Chain, DL, Src, CI);
}
|