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