Go to the documentation of this file.
9 #ifndef LLVM_DEBUGINFO_PDB_NATIVE_FORMATUTIL_H
10 #define LLVM_DEBUGINFO_PDB_NATIVE_FORMATUTIL_H
20 #include <type_traits>
25 #define PUSH_MASKED_FLAG(Enum, Mask, TheOpt, Value, Text) \
26 if (Enum::TheOpt == (Value & Mask)) \
29 #define PUSH_FLAG(Enum, TheOpt, Value, Text) \
30 PUSH_MASKED_FLAG(Enum, Enum::TheOpt, TheOpt, Value, Text)
32 #define RETURN_CASE(Enum, X, Ret) \
37 return formatv(
"unknown ({0})",
static_cast<std::underlying_type_t<T>
>(
Value))
59 bool Friendly =
true);
81 if (
N < 1000000000ULL)
83 if (
N < 10000000000ULL)
85 if (
N < 100000000000ULL)
87 if (
N < 1000000000000ULL)
89 if (
N < 10000000000000ULL)
91 if (
N < 100000000000000ULL)
93 if (
N < 1000000000000000ULL)
95 if (
N < 10000000000000000ULL)
97 if (
N < 100000000000000000ULL)
99 if (
N < 1000000000000000000ULL)
101 if (
N < 10000000000000000000ULL)
107 template <
typename T>
109 :
public FormatAdapter<support::detail::packed_endian_specific_integral<
110 T, support::little, support::unaligned>> {
124 template <
typename T>
125 detail::EndianAdapter<T>
This is an optimization pass for GlobalISel generic memory operations.
SymbolKind
Duplicate copy of the above enum, but using the official CV names.
void format(llvm::raw_ostream &Stream, StringRef Style) override
int NumDigits(uint64_t N)
Returns the number of digits in the given integer.
auto formatv(const char *Fmt, Ts &&... Vals) -> formatv_object< decltype(std::make_tuple(detail::build_format_adapter(std::forward< Ts >(Vals))...))>
EndianAdapter(EndianType &&Item)
(vector float) vec_cmpeq(*A, *B) C
This class implements an extremely fast bulk output stream that can only output to a stream.
detail::EndianAdapter< T > fmtle(support::detail::packed_endian_specific_integral< T, support::little, support::unaligned > Value)
std::string typesetItemList(ArrayRef< std::string > Opts, uint32_t IndentLevel, uint32_t GroupSize, StringRef Sep)
std::string formatChunkKind(codeview::DebugSubsectionKind Kind, bool Friendly=true)
compiles ldr LCPI1_0 ldr ldr mov lsr tst moveq r1 ldr LCPI1_1 and r0 bx lr It would be better to do something like to fold the shift into the conditional move
std::string formatSegmentOffset(uint16_t Segment, uint32_t Offset)
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
std::string formatTypeLeafKind(codeview::TypeLeafKind K)
StringRef - Represent a constant reference to a string, i.e.
format_object< Ts... > format(const char *Fmt, const Ts &... Vals)
These are helper functions used to produce formatted output.
std::string formatSectionCharacteristics(uint32_t IndentLevel, uint32_t C, uint32_t FlagsPerLine, StringRef Separator, CharacteristicStyle Style=CharacteristicStyle::HeaderDefinition)
std::string typesetStringList(uint32_t IndentLevel, ArrayRef< StringRef > Strings)
std::string formatUnknownEnum(T Value)
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
LLVM Value Representation.
std::string formatSymbolKind(codeview::SymbolKind K)