90 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "PPCSelectionDAGInfo.h"10#include "llvm/CodeGen/SelectionDAG.h"11 12#define GET_SDNODE_DESC13#include "PPCGenSDNodeInfo.inc"14 15using namespace llvm;16 17PPCSelectionDAGInfo::PPCSelectionDAGInfo()18 : SelectionDAGGenTargetInfo(PPCGenSDNodeInfo) {}19 20PPCSelectionDAGInfo::~PPCSelectionDAGInfo() = default;21 22const char *PPCSelectionDAGInfo::getTargetNodeName(unsigned Opcode) const {23 switch (static_cast<PPCISD::NodeType>(Opcode)) {24 case PPCISD::GlobalBaseReg:25 return "PPCISD::GlobalBaseReg";26 case PPCISD::SRA_ADDZE:27 return "PPCISD::SRA_ADDZE";28 case PPCISD::READ_TIME_BASE:29 return "PPCISD::READ_TIME_BASE";30 case PPCISD::MFOCRF:31 return "PPCISD::MFOCRF";32 case PPCISD::ANDI_rec_1_EQ_BIT:33 return "PPCISD::ANDI_rec_1_EQ_BIT";34 case PPCISD::ANDI_rec_1_GT_BIT:35 return "PPCISD::ANDI_rec_1_GT_BIT";36 case PPCISD::BDNZ:37 return "PPCISD::BDNZ";38 case PPCISD::BDZ:39 return "PPCISD::BDZ";40 case PPCISD::PPC32_PICGOT:41 return "PPCISD::PPC32_PICGOT";42 case PPCISD::VADD_SPLAT:43 return "PPCISD::VADD_SPLAT";44 }45 46 return SelectionDAGGenTargetInfo::getTargetNodeName(Opcode);47}48 49void PPCSelectionDAGInfo::verifyTargetNode(const SelectionDAG &DAG,50 const SDNode *N) const {51 switch (N->getOpcode()) {52 default:53 break;54 case PPCISD::DYNAREAOFFSET:55 // invalid number of results; expected 2, got 156 case PPCISD::TOC_ENTRY:57 // invalid number of results; expected 1, got 258 case PPCISD::STORE_COND:59 // invalid number of results; expected 2, got 360 case PPCISD::LD_SPLAT:61 case PPCISD::SEXT_LD_SPLAT:62 case PPCISD::ZEXT_LD_SPLAT:63 // invalid number of operands; expected 2, got 364 case PPCISD::ST_VSR_SCAL_INT:65 // invalid number of operands; expected 4, got 566 case PPCISD::XXPERM:67 // operand #1 must have type v2f64, but has type v16i868 case PPCISD::ACC_BUILD:69 // operand #3 must have type v4i32, but has type v16i870 case PPCISD::PAIR_BUILD:71 // operand #1 must have type v4i32, but has type v16i872 return;73 }74 75 SelectionDAGGenTargetInfo::verifyTargetNode(DAG, N);76}77 78std::pair<SDValue, SDValue> PPCSelectionDAGInfo::EmitTargetCodeForMemcmp(79 SelectionDAG &DAG, const SDLoc &dl, SDValue Chain, SDValue Op1, SDValue Op2,80 SDValue Op3, const CallInst *CI) const {81 return DAG.getMemcmp(Chain, dl, Op1, Op2, Op3, CI);82}83 84std::pair<SDValue, SDValue>85PPCSelectionDAGInfo::EmitTargetCodeForStrlen(SelectionDAG &DAG, const SDLoc &DL,86 SDValue Chain, SDValue Src,87 const CallInst *CI) const {88 return DAG.getStrlen(Chain, DL, Src, CI);89}90