10 #ifndef LLVM_SUPPORT_SCOPEDPRINTER_H
11 #define LLVM_SUPPORT_SCOPEDPRINTER_H
17 #include "llvm/Support/DataTypes.h"
50 : Value(static_cast<
unsigned long long>(Value)) {}
75 void indent(
int Levels = 1) { IndentLevel += Levels; }
78 IndentLevel = std::max(0, IndentLevel - Levels);
87 for (
int i = 0;
i < IndentLevel; ++
i)
93 template <
typename T,
typename TEnum>
98 for (
const auto &EnumItem : EnumValues) {
99 if (EnumItem.Value == Value) {
100 Name = EnumItem.Name;
107 startLine() << Label <<
": " << Name <<
" (" <<
hex(Value) <<
")\n";
113 template <
typename T,
typename TFlag>
115 TFlag EnumMask1 = {}, TFlag EnumMask2 = {},
116 TFlag EnumMask3 = {}) {
117 typedef EnumEntry<TFlag> FlagEntry;
118 typedef SmallVector<FlagEntry, 10> FlagVector;
126 if (
Flag.Value & EnumMask1)
127 EnumMask = EnumMask1;
128 else if (
Flag.Value & EnumMask2)
129 EnumMask = EnumMask2;
130 else if (
Flag.Value & EnumMask3)
131 EnumMask = EnumMask3;
132 bool IsEnum = (
Flag.Value & EnumMask) != 0;
133 if ((!IsEnum && (Value &
Flag.Value) ==
Flag.Value) ||
134 (IsEnum && (Value & EnumMask) ==
Flag.Value)) {
135 SetFlags.push_back(
Flag);
139 std::sort(SetFlags.begin(), SetFlags.end(), &flagName<TFlag>);
142 for (
const auto &
Flag : SetFlags) {
151 uint64_t Curr = Value;
162 startLine() << Label <<
": " << Value <<
"\n";
166 startLine() << Label <<
": " << Value <<
"\n";
170 startLine() << Label <<
": " << Value <<
"\n";
178 startLine() << Label <<
": " << Value <<
"\n";
182 startLine() << Label <<
": " << Value <<
"\n";
186 startLine() << Label <<
": " << Value <<
"\n";
190 startLine() << Label <<
": " << int(Value) <<
"\n";
194 startLine() << Label <<
": " << Value <<
"\n";
198 startLine() << Label <<
": " << (Value ?
"Yes" :
"No") <<
'\n';
203 printVersionInternal(
Version...);
210 for (
const auto &Item : List) {
219 template <
typename T,
typename U>
223 for (
const auto &Item : List) {
235 for (
const auto &Item : List) {
249 startLine() << Label <<
": " << Str <<
" (" <<
hex(Value) <<
")\n";
252 template <
typename T>
254 startLine() << Label <<
": " << Symbol <<
'+' <<
hex(Value) <<
'\n';
260 startLine() << Label <<
": " << Value <<
"\n";
264 startLine() << Label <<
": " << Value <<
"\n";
267 template <
typename T>
269 startLine() << Label <<
": " << Str <<
" (" << Value <<
")\n";
273 printBinaryImpl(Label, Str, Value,
false);
279 printBinaryImpl(Label, Str, V,
false);
283 printBinaryImpl(Label,
StringRef(), Value,
false);
289 printBinaryImpl(Label,
StringRef(), V,
false);
295 printBinaryImpl(Label,
StringRef(), V,
false);
299 printBinaryImpl(Label,
StringRef(), Value,
true);
305 printBinaryImpl(Label,
StringRef(), V,
true);
309 startLine() << Label <<
": " << Value <<
"\n";
320 template <
typename T>
void printVersionInternal(
T Value) {
324 template <
typename S,
typename T,
typename... TArgs>
325 void printVersionInternal(S Value,
T Value2, TArgs...
Args) {
327 printVersionInternal(Value2,
Args...);
330 template <
typename T>
331 static bool flagName(
const EnumEntry<T> &lhs,
const EnumEntry<T> &rhs) {
332 return lhs.Name < rhs.Name;
335 void printBinaryImpl(StringRef Label, StringRef Str, ArrayRef<uint8_t> Value,
345 ScopedPrinter::printHex<support::ulittle16_t>(
StringRef Label,
347 startLine() << Label <<
": " << hex(Value) <<
"\n";
350 template<
char Open,
char Close>
void printHexList(StringRef Label, const T &List)
HexNumber(signed long Value)
void printEnum(StringRef Label, T Value, ArrayRef< EnumEntry< TEnum >> EnumValues)
void printBinary(StringRef Label, ArrayRef< char > Value)
void printBinary(StringRef Label, StringRef Value)
void printSymbolOffset(StringRef Label, StringRef Symbol, T Value)
void printBoolean(StringRef Label, bool Value)
void printVersion(StringRef Label, T...Version)
HexNumber(signed char Value)
void printNumber(StringRef Label, int32_t Value)
print alias Alias Set Printer
void printString(StringRef Label, StringRef Value)
struct fuzzer::@269 Flags
ArrayRef< T > makeArrayRef(const T &OneElt)
Construct an ArrayRef from a single element.
void indent(int Levels=1)
DelimitedScope(ScopedPrinter &W)
HexNumber(signed short Value)
raw_ostream & getOStream()
EnumEntry(StringRef N, StringRef A, T V)
void printBinary(StringRef Label, StringRef Str, ArrayRef< uint8_t > Value)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
void printNumber(StringRef Label, uint8_t Value)
void printFlags(StringRef Label, T Value)
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE size_t size() const
size - Get the string size.
void printBinary(StringRef Label, StringRef Str, ArrayRef< char > Value)
size_t size() const
size - Get the array size.
void printBinaryBlock(StringRef Label, StringRef Value)
Flag
These should be considered private to the implementation of the MCInstrDesc class.
HexNumber(unsigned char Value)
void printString(StringRef Label, const std::string &Value)
HexNumber(unsigned short Value)
HexNumber(signed int Value)
raw_ostream & startLine()
void printNumber(StringRef Label, const APSInt &Value)
void printList(StringRef Label, const T &List)
EnumEntry(StringRef N, T V)
HexNumber(signed long long Value)
void printHex(StringRef Label, T Value)
HexNumber(unsigned int Value)
std::string & str()
Flushes the stream contents to the target string and returns the string's reference.
void printNumber(StringRef Label, uint32_t Value)
void printString(StringRef Value)
void printNumber(StringRef Label, uint64_t Value)
DelimitedScope(ScopedPrinter &W, StringRef N)
void printObject(StringRef Label, const T &Value)
void printNumber(StringRef Label, int8_t Value)
void printBinary(StringRef Label, ArrayRef< uint8_t > Value)
void printNumber(StringRef Label, int16_t Value)
const std::string to_hexString(uint64_t Value, bool UpperCase=true)
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE bool empty() const
empty - Check if the string is empty.
HexNumber(unsigned long Value)
void printHex(StringRef Label, StringRef Str, T Value)
void setPrefix(StringRef P)
void unindent(int Levels=1)
void printFlags(StringRef Label, T Value, ArrayRef< EnumEntry< TFlag >> Flags, TFlag EnumMask1={}, TFlag EnumMask2={}, TFlag EnumMask3={})
ScopedPrinter(raw_ostream &OS)
raw_ostream & operator<<(raw_ostream &OS, const APInt &I)
void printNumber(StringRef Label, uint16_t Value)
const std::string to_string(const T &Value)
void printList(StringRef Label, const T &List, const U &Printer)
A raw_ostream that writes to an std::string.
LLVM Value Representation.
This class implements an extremely fast bulk output stream that can only output to a stream...
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE const char * data() const
data - Get a pointer to the start of the string (which may not be null terminated).
StringRef - Represent a constant reference to a string, i.e.
void printNumber(StringRef Label, int64_t Value)
void printNumber(StringRef Label, StringRef Str, T Value)
static GCRegistry::Add< ErlangGC > A("erlang","erlang-compatible garbage collector")
HexNumber(unsigned long long Value)
void printBinaryBlock(StringRef Label, ArrayRef< uint8_t > Value)