1356843Sdim//===- GIMatchDagPredicate.cpp - Represent a predicate to check -----------===// 2356843Sdim// 3356843Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4356843Sdim// See https://llvm.org/LICENSE.txt for license information. 5356843Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6356843Sdim// 7356843Sdim//===----------------------------------------------------------------------===// 8356843Sdim 9356843Sdim#include "GIMatchDagPredicate.h" 10356843Sdim 11356843Sdim#include "llvm/TableGen/Record.h" 12356843Sdim 13356843Sdim#include "GIMatchDagOperands.h" 14356843Sdim#include "../CodeGenInstruction.h" 15356843Sdim 16356843Sdimusing namespace llvm; 17356843Sdim 18356843Sdimvoid GIMatchDagPredicate::print(raw_ostream &OS) const { 19356843Sdim OS << "<<"; 20356843Sdim printDescription(OS); 21356843Sdim OS << ">>:$" << Name; 22356843Sdim} 23356843Sdim 24356843Sdimvoid GIMatchDagPredicate::printDescription(raw_ostream &OS) const { OS << ""; } 25356843Sdim 26356843SdimGIMatchDagOpcodePredicate::GIMatchDagOpcodePredicate( 27356843Sdim GIMatchDagContext &Ctx, StringRef Name, const CodeGenInstruction &Instr) 28356843Sdim : GIMatchDagPredicate(GIMatchDagPredicateKind_Opcode, Name, 29356843Sdim Ctx.makeMIPredicateOperandList()), 30356843Sdim Instr(Instr) {} 31356843Sdim 32356843Sdimvoid GIMatchDagOpcodePredicate::printDescription(raw_ostream &OS) const { 33356843Sdim OS << "$mi.getOpcode() == " << Instr.TheDef->getName(); 34356843Sdim} 35356843Sdim 36356843SdimGIMatchDagOneOfOpcodesPredicate::GIMatchDagOneOfOpcodesPredicate( 37356843Sdim GIMatchDagContext &Ctx, StringRef Name) 38356843Sdim : GIMatchDagPredicate(GIMatchDagPredicateKind_OneOfOpcodes, Name, 39356843Sdim Ctx.makeMIPredicateOperandList()) {} 40356843Sdim 41356843Sdimvoid GIMatchDagOneOfOpcodesPredicate::printDescription(raw_ostream &OS) const { 42356843Sdim OS << "$mi.getOpcode() == oneof("; 43356843Sdim StringRef Separator = ""; 44356843Sdim for (const CodeGenInstruction *Instr : Instrs) { 45356843Sdim OS << Separator << Instr->TheDef->getName(); 46356843Sdim Separator = ","; 47356843Sdim } 48356843Sdim OS << ")"; 49356843Sdim} 50356843Sdim 51356843SdimGIMatchDagSameMOPredicate::GIMatchDagSameMOPredicate(GIMatchDagContext &Ctx, 52356843Sdim StringRef Name) 53356843Sdim : GIMatchDagPredicate(GIMatchDagPredicateKind_SameMO, Name, 54356843Sdim Ctx.makeTwoMOPredicateOperandList()) {} 55356843Sdim 56356843Sdimvoid GIMatchDagSameMOPredicate::printDescription(raw_ostream &OS) const { 57356843Sdim OS << "$mi0 == $mi1"; 58356843Sdim} 59356843Sdim 60356843Sdimraw_ostream &llvm::operator<<(raw_ostream &OS, const GIMatchDagPredicate &N) { 61356843Sdim N.print(OS); 62356843Sdim return OS; 63356843Sdim} 64356843Sdim 65356843Sdimraw_ostream &llvm::operator<<(raw_ostream &OS, 66356843Sdim const GIMatchDagOpcodePredicate &N) { 67356843Sdim N.print(OS); 68356843Sdim return OS; 69356843Sdim} 70