1356843Sdim//===- GIMatchDagInstr.cpp - A shared operand list for nodes --------------===// 2356843Sdim// 3356843Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4356843Sdim// See https://llvm.org/LICENSE.txt for license information. 5356843Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6356843Sdim// 7356843Sdim//===----------------------------------------------------------------------===// 8356843Sdim 9356843Sdim#include "GIMatchDagInstr.h" 10356843Sdim#include "../CodeGenInstruction.h" 11356843Sdim#include "GIMatchDag.h" 12356843Sdim#include "llvm/TableGen/Record.h" 13356843Sdim 14356843Sdimusing namespace llvm; 15356843Sdim 16356843Sdimvoid GIMatchDagInstr::print(raw_ostream &OS) const { 17356843Sdim OS << "("; 18356843Sdim if (const auto *Annotation = getOpcodeAnnotation()) 19356843Sdim OS << Annotation->TheDef->getName(); 20356843Sdim else 21356843Sdim OS << "<unknown>"; 22356843Sdim OS << " "; 23356843Sdim OperandInfo.print(OS); 24356843Sdim OS << "):$" << Name; 25356843Sdim if (!UserAssignedNamesForOperands.empty()) { 26356843Sdim OS << " // "; 27356843Sdim SmallVector<std::pair<unsigned, StringRef>, 8> ToPrint; 28356843Sdim for (const auto &Assignment : UserAssignedNamesForOperands) 29356843Sdim ToPrint.emplace_back(Assignment.first, Assignment.second); 30356843Sdim llvm::sort(ToPrint.begin(), ToPrint.end()); 31356843Sdim StringRef Separator = ""; 32356843Sdim for (const auto &Assignment : ToPrint) { 33356843Sdim OS << Separator << "$" << Assignment.second << "=getOperand(" 34356843Sdim << Assignment.first << ")"; 35356843Sdim Separator = ", "; 36356843Sdim } 37356843Sdim } 38356843Sdim} 39356843Sdim 40356843Sdimvoid GIMatchDagInstr::setMatchRoot() { 41356843Sdim IsMatchRoot = true; 42356843Sdim Dag.addMatchRoot(this); 43356843Sdim} 44356843Sdim 45356843Sdimraw_ostream &llvm::operator<<(raw_ostream &OS, const GIMatchDagInstr &N) { 46356843Sdim N.print(OS); 47356843Sdim return OS; 48356843Sdim} 49