1*c9157d92SDimitry Andric //===- MatchDataInfo.cpp ----------------------------------------*- C++ -*-===// 2*c9157d92SDimitry Andric // 3*c9157d92SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*c9157d92SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*c9157d92SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*c9157d92SDimitry Andric // 7*c9157d92SDimitry Andric //===----------------------------------------------------------------------===// 8*c9157d92SDimitry Andric // 9*c9157d92SDimitry Andric // 10*c9157d92SDimitry Andric //===----------------------------------------------------------------------===// 11*c9157d92SDimitry Andric 12*c9157d92SDimitry Andric #include "MatchDataInfo.h" 13*c9157d92SDimitry Andric #include "llvm/Support/Debug.h" 14*c9157d92SDimitry Andric #include "llvm/Support/raw_ostream.h" 15*c9157d92SDimitry Andric 16*c9157d92SDimitry Andric namespace llvm { 17*c9157d92SDimitry Andric namespace gi { 18*c9157d92SDimitry Andric 19*c9157d92SDimitry Andric StringMap<std::vector<std::string>> AllMatchDataVars; 20*c9157d92SDimitry Andric getVariableName() const21*c9157d92SDimitry AndricStringRef MatchDataInfo::getVariableName() const { 22*c9157d92SDimitry Andric assert(hasVariableName()); 23*c9157d92SDimitry Andric return VarName; 24*c9157d92SDimitry Andric } 25*c9157d92SDimitry Andric print(raw_ostream & OS) const26*c9157d92SDimitry Andricvoid MatchDataInfo::print(raw_ostream &OS) const { 27*c9157d92SDimitry Andric OS << "(MatchDataInfo pattern_symbol:" << PatternSymbol << " type:'" << Type 28*c9157d92SDimitry Andric << "' var_name:" << (VarName.empty() ? "<unassigned>" : VarName) << ")"; 29*c9157d92SDimitry Andric } 30*c9157d92SDimitry Andric dump() const31*c9157d92SDimitry Andricvoid MatchDataInfo::dump() const { print(dbgs()); } 32*c9157d92SDimitry Andric AssignMatchDataVariables(MutableArrayRef<MatchDataInfo> Infos)33*c9157d92SDimitry Andricvoid AssignMatchDataVariables(MutableArrayRef<MatchDataInfo> Infos) { 34*c9157d92SDimitry Andric static unsigned NextVarID = 0; 35*c9157d92SDimitry Andric 36*c9157d92SDimitry Andric StringMap<unsigned> SeenTypes; 37*c9157d92SDimitry Andric for (auto &Info : Infos) { 38*c9157d92SDimitry Andric unsigned &NumSeen = SeenTypes[Info.getType()]; 39*c9157d92SDimitry Andric auto &ExistingVars = AllMatchDataVars[Info.getType()]; 40*c9157d92SDimitry Andric 41*c9157d92SDimitry Andric if (NumSeen == ExistingVars.size()) 42*c9157d92SDimitry Andric ExistingVars.push_back("MDInfo" + std::to_string(NextVarID++)); 43*c9157d92SDimitry Andric 44*c9157d92SDimitry Andric Info.setVariableName(ExistingVars[NumSeen++]); 45*c9157d92SDimitry Andric } 46*c9157d92SDimitry Andric } 47*c9157d92SDimitry Andric 48*c9157d92SDimitry Andric } // namespace gi 49*c9157d92SDimitry Andric } // namespace llvm 50