1*7ea2e519SDaniel Sanders //===- GIMatchDagPredicate.cpp - Represent a predicate to check -----------===// 2*7ea2e519SDaniel Sanders // 3*7ea2e519SDaniel Sanders // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*7ea2e519SDaniel Sanders // See https://llvm.org/LICENSE.txt for license information. 5*7ea2e519SDaniel Sanders // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*7ea2e519SDaniel Sanders // 7*7ea2e519SDaniel Sanders //===----------------------------------------------------------------------===// 8*7ea2e519SDaniel Sanders 9*7ea2e519SDaniel Sanders #include "GIMatchDagPredicate.h" 10*7ea2e519SDaniel Sanders #include "llvm/TableGen/Record.h" 11*7ea2e519SDaniel Sanders 12*7ea2e519SDaniel Sanders #include "GIMatchDagOperands.h" 13*7ea2e519SDaniel Sanders #include "../CodeGenInstruction.h" 14*7ea2e519SDaniel Sanders 15*7ea2e519SDaniel Sanders using namespace llvm; 16*7ea2e519SDaniel Sanders 17*7ea2e519SDaniel Sanders void GIMatchDagPredicate::print(raw_ostream &OS) const { 18*7ea2e519SDaniel Sanders OS << "<<"; 19*7ea2e519SDaniel Sanders printDescription(OS); 20*7ea2e519SDaniel Sanders OS << ">>:$" << Name; 21*7ea2e519SDaniel Sanders } 22*7ea2e519SDaniel Sanders 23*7ea2e519SDaniel Sanders void GIMatchDagPredicate::printDescription(raw_ostream &OS) const { OS << ""; } 24*7ea2e519SDaniel Sanders 25*7ea2e519SDaniel Sanders GIMatchDagOpcodePredicate::GIMatchDagOpcodePredicate( 26*7ea2e519SDaniel Sanders GIMatchDagContext &Ctx, StringRef Name, const CodeGenInstruction &Instr) 27*7ea2e519SDaniel Sanders : GIMatchDagPredicate(GIMatchDagPredicateKind_Opcode, Name, 28*7ea2e519SDaniel Sanders Ctx.makeMIPredicateOperandList()), 29*7ea2e519SDaniel Sanders Instr(Instr) {} 30*7ea2e519SDaniel Sanders 31*7ea2e519SDaniel Sanders void GIMatchDagOpcodePredicate::printDescription(raw_ostream &OS) const { 32*7ea2e519SDaniel Sanders OS << "$mi.getOpcode() == " << Instr.TheDef->getName(); 33*7ea2e519SDaniel Sanders } 34*7ea2e519SDaniel Sanders 35*7ea2e519SDaniel Sanders GIMatchDagSameMOPredicate::GIMatchDagSameMOPredicate(GIMatchDagContext &Ctx, 36*7ea2e519SDaniel Sanders StringRef Name) 37*7ea2e519SDaniel Sanders : GIMatchDagPredicate(GIMatchDagPredicateKind_SameMO, Name, 38*7ea2e519SDaniel Sanders Ctx.makeTwoMOPredicateOperandList()) {} 39*7ea2e519SDaniel Sanders 40*7ea2e519SDaniel Sanders void GIMatchDagSameMOPredicate::printDescription(raw_ostream &OS) const { 41*7ea2e519SDaniel Sanders OS << "$mi0 == $mi1"; 42*7ea2e519SDaniel Sanders } 43*7ea2e519SDaniel Sanders 44*7ea2e519SDaniel Sanders raw_ostream &llvm::operator<<(raw_ostream &OS, const GIMatchDagPredicate &N) { 45*7ea2e519SDaniel Sanders N.print(OS); 46*7ea2e519SDaniel Sanders return OS; 47*7ea2e519SDaniel Sanders } 48*7ea2e519SDaniel Sanders 49*7ea2e519SDaniel Sanders raw_ostream &llvm::operator<<(raw_ostream &OS, 50*7ea2e519SDaniel Sanders const GIMatchDagOpcodePredicate &N) { 51*7ea2e519SDaniel Sanders N.print(OS); 52*7ea2e519SDaniel Sanders return OS; 53*7ea2e519SDaniel Sanders } 54