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