17ea2e519SDaniel Sanders //===- GIMatchDagPredicate.cpp - Represent a predicate to check -----------===//
27ea2e519SDaniel Sanders //
37ea2e519SDaniel Sanders // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
47ea2e519SDaniel Sanders // See https://llvm.org/LICENSE.txt for license information.
57ea2e519SDaniel Sanders // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
67ea2e519SDaniel Sanders //
77ea2e519SDaniel Sanders //===----------------------------------------------------------------------===//
87ea2e519SDaniel Sanders
97ea2e519SDaniel Sanders #include "GIMatchDagPredicate.h"
101d94fb21SDaniel Sanders
117ea2e519SDaniel Sanders #include "llvm/TableGen/Record.h"
127ea2e519SDaniel Sanders
137ea2e519SDaniel Sanders #include "../CodeGenInstruction.h"
14*bd059b3bSserge-sans-paille #include "GIMatchDag.h"
157ea2e519SDaniel Sanders
167ea2e519SDaniel Sanders using namespace llvm;
177ea2e519SDaniel Sanders
print(raw_ostream & OS) const187ea2e519SDaniel Sanders void GIMatchDagPredicate::print(raw_ostream &OS) const {
197ea2e519SDaniel Sanders OS << "<<";
207ea2e519SDaniel Sanders printDescription(OS);
217ea2e519SDaniel Sanders OS << ">>:$" << Name;
227ea2e519SDaniel Sanders }
237ea2e519SDaniel Sanders
printDescription(raw_ostream & OS) const247ea2e519SDaniel Sanders void GIMatchDagPredicate::printDescription(raw_ostream &OS) const { OS << ""; }
257ea2e519SDaniel Sanders
GIMatchDagOpcodePredicate(GIMatchDagContext & Ctx,StringRef Name,const CodeGenInstruction & Instr)267ea2e519SDaniel Sanders GIMatchDagOpcodePredicate::GIMatchDagOpcodePredicate(
277ea2e519SDaniel Sanders GIMatchDagContext &Ctx, StringRef Name, const CodeGenInstruction &Instr)
287ea2e519SDaniel Sanders : GIMatchDagPredicate(GIMatchDagPredicateKind_Opcode, Name,
297ea2e519SDaniel Sanders Ctx.makeMIPredicateOperandList()),
307ea2e519SDaniel Sanders Instr(Instr) {}
317ea2e519SDaniel Sanders
printDescription(raw_ostream & OS) const327ea2e519SDaniel Sanders void GIMatchDagOpcodePredicate::printDescription(raw_ostream &OS) const {
337ea2e519SDaniel Sanders OS << "$mi.getOpcode() == " << Instr.TheDef->getName();
347ea2e519SDaniel Sanders }
357ea2e519SDaniel Sanders
GIMatchDagOneOfOpcodesPredicate(GIMatchDagContext & Ctx,StringRef Name)361d94fb21SDaniel Sanders GIMatchDagOneOfOpcodesPredicate::GIMatchDagOneOfOpcodesPredicate(
371d94fb21SDaniel Sanders GIMatchDagContext &Ctx, StringRef Name)
381d94fb21SDaniel Sanders : GIMatchDagPredicate(GIMatchDagPredicateKind_OneOfOpcodes, Name,
391d94fb21SDaniel Sanders Ctx.makeMIPredicateOperandList()) {}
401d94fb21SDaniel Sanders
printDescription(raw_ostream & OS) const411d94fb21SDaniel Sanders void GIMatchDagOneOfOpcodesPredicate::printDescription(raw_ostream &OS) const {
421d94fb21SDaniel Sanders OS << "$mi.getOpcode() == oneof(";
431d94fb21SDaniel Sanders StringRef Separator = "";
441d94fb21SDaniel Sanders for (const CodeGenInstruction *Instr : Instrs) {
451d94fb21SDaniel Sanders OS << Separator << Instr->TheDef->getName();
461d94fb21SDaniel Sanders Separator = ",";
471d94fb21SDaniel Sanders }
481d94fb21SDaniel Sanders OS << ")";
491d94fb21SDaniel Sanders }
501d94fb21SDaniel Sanders
GIMatchDagSameMOPredicate(GIMatchDagContext & Ctx,StringRef Name)517ea2e519SDaniel Sanders GIMatchDagSameMOPredicate::GIMatchDagSameMOPredicate(GIMatchDagContext &Ctx,
527ea2e519SDaniel Sanders StringRef Name)
537ea2e519SDaniel Sanders : GIMatchDagPredicate(GIMatchDagPredicateKind_SameMO, Name,
547ea2e519SDaniel Sanders Ctx.makeTwoMOPredicateOperandList()) {}
557ea2e519SDaniel Sanders
printDescription(raw_ostream & OS) const567ea2e519SDaniel Sanders void GIMatchDagSameMOPredicate::printDescription(raw_ostream &OS) const {
577ea2e519SDaniel Sanders OS << "$mi0 == $mi1";
587ea2e519SDaniel Sanders }
597ea2e519SDaniel Sanders
operator <<(raw_ostream & OS,const GIMatchDagPredicate & N)607ea2e519SDaniel Sanders raw_ostream &llvm::operator<<(raw_ostream &OS, const GIMatchDagPredicate &N) {
617ea2e519SDaniel Sanders N.print(OS);
627ea2e519SDaniel Sanders return OS;
637ea2e519SDaniel Sanders }
647ea2e519SDaniel Sanders
operator <<(raw_ostream & OS,const GIMatchDagOpcodePredicate & N)657ea2e519SDaniel Sanders raw_ostream &llvm::operator<<(raw_ostream &OS,
667ea2e519SDaniel Sanders const GIMatchDagOpcodePredicate &N) {
677ea2e519SDaniel Sanders N.print(OS);
687ea2e519SDaniel Sanders return OS;
697ea2e519SDaniel Sanders }
70