diff options
Diffstat (limited to 'utils/TableGen/InfoByHwMode.cpp')
-rw-r--r-- | utils/TableGen/InfoByHwMode.cpp | 63 |
1 files changed, 36 insertions, 27 deletions
diff --git a/utils/TableGen/InfoByHwMode.cpp b/utils/TableGen/InfoByHwMode.cpp index aee0dd6fa6a..7e1e1864356 100644 --- a/utils/TableGen/InfoByHwMode.cpp +++ b/utils/TableGen/InfoByHwMode.cpp @@ -76,34 +76,31 @@ StringRef ValueTypeByHwMode::getMVTName(MVT T) { return N; } -std::string ValueTypeByHwMode::getAsString() const { - if (isSimple()) - return getMVTName(getSimple()); +void ValueTypeByHwMode::writeToStream(raw_ostream &OS) const { + if (isSimple()) { + OS << getMVTName(getSimple()); + return; + } std::vector<const PairType*> Pairs; for (const auto &P : Map) Pairs.push_back(&P); std::sort(Pairs.begin(), Pairs.end(), deref<std::less<PairType>>()); - std::stringstream str; - str << '{'; + OS << '{'; for (unsigned i = 0, e = Pairs.size(); i != e; ++i) { const PairType *P = Pairs[i]; - str << '(' << getModeName(P->first) - << ':' << getMVTName(P->second).str() << ')'; + OS << '(' << getModeName(P->first) + << ':' << getMVTName(P->second).str() << ')'; if (i != e-1) - str << ','; + OS << ','; } - str << '}'; - return str.str(); + OS << '}'; } LLVM_DUMP_METHOD void ValueTypeByHwMode::dump() const { - dbgs() << "size=" << Map.size() << '\n'; - for (const auto &P : Map) - dbgs() << " " << P.first << " -> " - << llvm::getEnumName(P.second.SimpleTy) << '\n'; + dbgs() << *this << '\n'; } ValueTypeByHwMode llvm::getValueTypeByHwMode(Record *Rec, @@ -136,11 +133,9 @@ bool RegSizeInfo::isSubClassOf(const RegSizeInfo &I) const { SpillSize <= I.SpillSize; } -std::string RegSizeInfo::getAsString() const { - std::stringstream str; - str << "[R=" << RegSize << ",S=" << SpillSize - << ",A=" << SpillAlignment << ']'; - return str.str(); +void RegSizeInfo::writeToStream(raw_ostream &OS) const { + OS << "[R=" << RegSize << ",S=" << SpillSize + << ",A=" << SpillAlignment << ']'; } RegSizeInfoByHwMode::RegSizeInfoByHwMode(Record *R, @@ -177,22 +172,36 @@ bool RegSizeInfoByHwMode::hasStricterSpillThan(const RegSizeInfoByHwMode &I) std::tie(B0.SpillSize, B0.SpillAlignment); } -std::string RegSizeInfoByHwMode::getAsString() const { +void RegSizeInfoByHwMode::writeToStream(raw_ostream &OS) const { typedef typename decltype(Map)::value_type PairType; std::vector<const PairType*> Pairs; for (const auto &P : Map) Pairs.push_back(&P); std::sort(Pairs.begin(), Pairs.end(), deref<std::less<PairType>>()); - std::stringstream str; - str << '{'; + OS << '{'; for (unsigned i = 0, e = Pairs.size(); i != e; ++i) { const PairType *P = Pairs[i]; - str << '(' << getModeName(P->first) - << ':' << P->second.getAsString() << ')'; + OS << '(' << getModeName(P->first) << ':' << P->second << ')'; if (i != e-1) - str << ','; + OS << ','; + } + OS << '}'; +} + +namespace llvm { + raw_ostream &operator<<(raw_ostream &OS, const ValueTypeByHwMode &T) { + T.writeToStream(OS); + return OS; + } + + raw_ostream &operator<<(raw_ostream &OS, const RegSizeInfo &T) { + T.writeToStream(OS); + return OS; + } + + raw_ostream &operator<<(raw_ostream &OS, const RegSizeInfoByHwMode &T) { + T.writeToStream(OS); + return OS; } - str << '}'; - return str.str(); } |