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"
10*1d94fb21SDaniel Sanders 
117ea2e519SDaniel Sanders #include "llvm/TableGen/Record.h"
127ea2e519SDaniel Sanders 
137ea2e519SDaniel Sanders #include "GIMatchDagOperands.h"
147ea2e519SDaniel Sanders #include "../CodeGenInstruction.h"
157ea2e519SDaniel Sanders 
167ea2e519SDaniel Sanders using namespace llvm;
177ea2e519SDaniel Sanders 
187ea2e519SDaniel Sanders void GIMatchDagPredicate::print(raw_ostream &OS) const {
197ea2e519SDaniel Sanders   OS << "<<";
207ea2e519SDaniel Sanders   printDescription(OS);
217ea2e519SDaniel Sanders   OS << ">>:$" << Name;
227ea2e519SDaniel Sanders }
237ea2e519SDaniel Sanders 
247ea2e519SDaniel Sanders void GIMatchDagPredicate::printDescription(raw_ostream &OS) const { OS << ""; }
257ea2e519SDaniel Sanders 
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 
327ea2e519SDaniel Sanders void GIMatchDagOpcodePredicate::printDescription(raw_ostream &OS) const {
337ea2e519SDaniel Sanders   OS << "$mi.getOpcode() == " << Instr.TheDef->getName();
347ea2e519SDaniel Sanders }
357ea2e519SDaniel Sanders 
36*1d94fb21SDaniel Sanders GIMatchDagOneOfOpcodesPredicate::GIMatchDagOneOfOpcodesPredicate(
37*1d94fb21SDaniel Sanders     GIMatchDagContext &Ctx, StringRef Name)
38*1d94fb21SDaniel Sanders     : GIMatchDagPredicate(GIMatchDagPredicateKind_OneOfOpcodes, Name,
39*1d94fb21SDaniel Sanders                           Ctx.makeMIPredicateOperandList()) {}
40*1d94fb21SDaniel Sanders 
41*1d94fb21SDaniel Sanders void GIMatchDagOneOfOpcodesPredicate::printDescription(raw_ostream &OS) const {
42*1d94fb21SDaniel Sanders   OS << "$mi.getOpcode() == oneof(";
43*1d94fb21SDaniel Sanders   StringRef Separator = "";
44*1d94fb21SDaniel Sanders   for (const CodeGenInstruction *Instr : Instrs) {
45*1d94fb21SDaniel Sanders     OS << Separator << Instr->TheDef->getName();
46*1d94fb21SDaniel Sanders     Separator = ",";
47*1d94fb21SDaniel Sanders   }
48*1d94fb21SDaniel Sanders   OS << ")";
49*1d94fb21SDaniel Sanders }
50*1d94fb21SDaniel Sanders 
517ea2e519SDaniel Sanders GIMatchDagSameMOPredicate::GIMatchDagSameMOPredicate(GIMatchDagContext &Ctx,
527ea2e519SDaniel Sanders                                                      StringRef Name)
537ea2e519SDaniel Sanders     : GIMatchDagPredicate(GIMatchDagPredicateKind_SameMO, Name,
547ea2e519SDaniel Sanders                           Ctx.makeTwoMOPredicateOperandList()) {}
557ea2e519SDaniel Sanders 
567ea2e519SDaniel Sanders void GIMatchDagSameMOPredicate::printDescription(raw_ostream &OS) const {
577ea2e519SDaniel Sanders   OS << "$mi0 == $mi1";
587ea2e519SDaniel Sanders }
597ea2e519SDaniel Sanders 
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 
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