• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===- GIMatchDagInstr.cpp - A shared operand list for nodes --------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "GIMatchDagInstr.h"
10 #include "../CodeGenInstruction.h"
11 #include "GIMatchDag.h"
12 #include "llvm/TableGen/Record.h"
13 
14 using namespace llvm;
15 
print(raw_ostream & OS) const16 void GIMatchDagInstr::print(raw_ostream &OS) const {
17   OS << "(";
18   if (const auto *Annotation = getOpcodeAnnotation())
19     OS << Annotation->TheDef->getName();
20   else
21     OS << "<unknown>";
22   OS << " ";
23   OperandInfo.print(OS);
24   OS << "):$" << Name;
25   if (!UserAssignedNamesForOperands.empty()) {
26     OS << " // ";
27     SmallVector<std::pair<unsigned, StringRef>, 8> ToPrint;
28     for (const auto &Assignment : UserAssignedNamesForOperands)
29       ToPrint.emplace_back(Assignment.first, Assignment.second);
30     llvm::sort(ToPrint.begin(), ToPrint.end());
31     StringRef Separator = "";
32     for (const auto &Assignment : ToPrint) {
33       OS << Separator << "$" << Assignment.second << "=getOperand("
34          << Assignment.first << ")";
35       Separator = ", ";
36     }
37   }
38 }
39 
setMatchRoot()40 void GIMatchDagInstr::setMatchRoot() {
41   IsMatchRoot = true;
42   Dag.addMatchRoot(this);
43 }
44 
operator <<(raw_ostream & OS,const GIMatchDagInstr & N)45 raw_ostream &llvm::operator<<(raw_ostream &OS, const GIMatchDagInstr &N) {
46   N.print(OS);
47   return OS;
48 }
49