mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-15 18:25:49 +00:00
Remove bitcode dump functions
This commit is contained in:
@@ -229,311 +229,6 @@ enum class TypeRecord : uint32_t
|
||||
|
||||
#define IS_KNOWN(val, KnownID) (decltype(KnownID)(val) == KnownID)
|
||||
|
||||
static rdcstr getName(uint32_t parentBlock, const LLVMBC::BlockOrRecord &block)
|
||||
{
|
||||
const char *name = NULL;
|
||||
|
||||
if(block.IsBlock())
|
||||
{
|
||||
// GetBlockName in BitcodeAnalyzer.cpp
|
||||
switch(KnownBlocks(block.id))
|
||||
{
|
||||
case KnownBlocks::BLOCKINFO: name = "BLOCKINFO"; break;
|
||||
case KnownBlocks::MODULE_BLOCK: name = "MODULE_BLOCK"; break;
|
||||
case KnownBlocks::PARAMATTR_BLOCK: name = "PARAMATTR_BLOCK"; break;
|
||||
case KnownBlocks::PARAMATTR_GROUP_BLOCK: name = "PARAMATTR_GROUP_BLOCK"; break;
|
||||
case KnownBlocks::CONSTANTS_BLOCK: name = "CONSTANTS_BLOCK"; break;
|
||||
case KnownBlocks::FUNCTION_BLOCK: name = "FUNCTION_BLOCK"; break;
|
||||
case KnownBlocks::TYPE_SYMTAB_BLOCK: name = "TYPE_SYMTAB_BLOCK"; break;
|
||||
case KnownBlocks::VALUE_SYMTAB_BLOCK: name = "VALUE_SYMTAB_BLOCK"; break;
|
||||
case KnownBlocks::METADATA_BLOCK: name = "METADATA_BLOCK"; break;
|
||||
case KnownBlocks::METADATA_ATTACHMENT: name = "METADATA_ATTACHMENT"; break;
|
||||
case KnownBlocks::TYPE_BLOCK: name = "TYPE_BLOCK"; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#define STRINGISE_RECORD(a) \
|
||||
case decltype(code)::a: name = #a; break;
|
||||
|
||||
// GetCodeName in BitcodeAnalyzer.cpp
|
||||
switch(KnownBlocks(parentBlock))
|
||||
{
|
||||
case KnownBlocks::BLOCKINFO:
|
||||
case KnownBlocks::TYPE_SYMTAB_BLOCK:
|
||||
case KnownBlocks::METADATA_ATTACHMENT: break;
|
||||
case KnownBlocks::MODULE_BLOCK:
|
||||
{
|
||||
ModuleRecord code = ModuleRecord(block.id);
|
||||
switch(code)
|
||||
{
|
||||
STRINGISE_RECORD(VERSION);
|
||||
STRINGISE_RECORD(TRIPLE);
|
||||
STRINGISE_RECORD(DATALAYOUT);
|
||||
STRINGISE_RECORD(GLOBALVAR);
|
||||
STRINGISE_RECORD(FUNCTION);
|
||||
STRINGISE_RECORD(ALIAS);
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case KnownBlocks::PARAMATTR_BLOCK:
|
||||
case KnownBlocks::PARAMATTR_GROUP_BLOCK: return StringFormat::Fmt("ENTRY%u", block.id); break;
|
||||
case KnownBlocks::CONSTANTS_BLOCK:
|
||||
{
|
||||
ConstantsRecord code = ConstantsRecord(block.id);
|
||||
switch(code)
|
||||
{
|
||||
STRINGISE_RECORD(SETTYPE);
|
||||
STRINGISE_RECORD(UNDEF);
|
||||
STRINGISE_RECORD(INTEGER);
|
||||
STRINGISE_RECORD(FLOAT);
|
||||
STRINGISE_RECORD(AGGREGATE);
|
||||
STRINGISE_RECORD(STRING);
|
||||
STRINGISE_RECORD(DATA);
|
||||
case ConstantsRecord::CONST_NULL: name = "NULL"; break;
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case KnownBlocks::FUNCTION_BLOCK:
|
||||
{
|
||||
FunctionRecord code = FunctionRecord(block.id);
|
||||
switch(code)
|
||||
{
|
||||
STRINGISE_RECORD(DECLAREBLOCKS);
|
||||
STRINGISE_RECORD(INST_BINOP);
|
||||
STRINGISE_RECORD(INST_CAST);
|
||||
STRINGISE_RECORD(INST_GEP_OLD);
|
||||
STRINGISE_RECORD(INST_SELECT);
|
||||
STRINGISE_RECORD(INST_EXTRACTELT);
|
||||
STRINGISE_RECORD(INST_INSERTELT);
|
||||
STRINGISE_RECORD(INST_SHUFFLEVEC);
|
||||
STRINGISE_RECORD(INST_CMP);
|
||||
STRINGISE_RECORD(INST_RET);
|
||||
STRINGISE_RECORD(INST_BR);
|
||||
STRINGISE_RECORD(INST_SWITCH);
|
||||
STRINGISE_RECORD(INST_INVOKE);
|
||||
STRINGISE_RECORD(INST_UNREACHABLE);
|
||||
STRINGISE_RECORD(INST_PHI);
|
||||
STRINGISE_RECORD(INST_ALLOCA);
|
||||
STRINGISE_RECORD(INST_LOAD);
|
||||
STRINGISE_RECORD(INST_VAARG);
|
||||
STRINGISE_RECORD(INST_STORE_OLD);
|
||||
STRINGISE_RECORD(INST_EXTRACTVAL);
|
||||
STRINGISE_RECORD(INST_INSERTVAL);
|
||||
STRINGISE_RECORD(INST_CMP2);
|
||||
STRINGISE_RECORD(INST_VSELECT);
|
||||
STRINGISE_RECORD(INST_INBOUNDS_GEP_OLD);
|
||||
STRINGISE_RECORD(INST_INDIRECTBR);
|
||||
STRINGISE_RECORD(DEBUG_LOC_AGAIN);
|
||||
STRINGISE_RECORD(INST_CALL);
|
||||
STRINGISE_RECORD(DEBUG_LOC);
|
||||
STRINGISE_RECORD(INST_FENCE);
|
||||
STRINGISE_RECORD(INST_CMPXCHG_OLD);
|
||||
STRINGISE_RECORD(INST_ATOMICRMW);
|
||||
STRINGISE_RECORD(INST_RESUME);
|
||||
STRINGISE_RECORD(INST_LANDINGPAD_OLD);
|
||||
STRINGISE_RECORD(INST_LOADATOMIC);
|
||||
STRINGISE_RECORD(INST_STOREATOMIC_OLD);
|
||||
STRINGISE_RECORD(INST_GEP);
|
||||
STRINGISE_RECORD(INST_STORE);
|
||||
STRINGISE_RECORD(INST_STOREATOMIC);
|
||||
STRINGISE_RECORD(INST_CMPXCHG);
|
||||
STRINGISE_RECORD(INST_LANDINGPAD);
|
||||
STRINGISE_RECORD(INST_CLEANUPRET);
|
||||
STRINGISE_RECORD(INST_CATCHRET);
|
||||
STRINGISE_RECORD(INST_CATCHPAD);
|
||||
STRINGISE_RECORD(INST_CLEANUPPAD);
|
||||
STRINGISE_RECORD(INST_CATCHSWITCH);
|
||||
STRINGISE_RECORD(OPERAND_BUNDLE);
|
||||
STRINGISE_RECORD(INST_UNOP);
|
||||
STRINGISE_RECORD(INST_CALLBR);
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case KnownBlocks::VALUE_SYMTAB_BLOCK:
|
||||
{
|
||||
ValueSymtabRecord code = ValueSymtabRecord(block.id);
|
||||
switch(code)
|
||||
{
|
||||
STRINGISE_RECORD(ENTRY);
|
||||
STRINGISE_RECORD(BBENTRY);
|
||||
STRINGISE_RECORD(FNENTRY);
|
||||
STRINGISE_RECORD(COMBINED_ENTRY);
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case KnownBlocks::METADATA_BLOCK:
|
||||
{
|
||||
MetaDataRecord code = MetaDataRecord(block.id);
|
||||
switch(code)
|
||||
{
|
||||
STRINGISE_RECORD(STRING_OLD);
|
||||
STRINGISE_RECORD(VALUE);
|
||||
STRINGISE_RECORD(NODE);
|
||||
STRINGISE_RECORD(NAME);
|
||||
STRINGISE_RECORD(DISTINCT_NODE);
|
||||
STRINGISE_RECORD(KIND);
|
||||
STRINGISE_RECORD(LOCATION);
|
||||
STRINGISE_RECORD(OLD_NODE);
|
||||
STRINGISE_RECORD(OLD_FN_NODE);
|
||||
STRINGISE_RECORD(NAMED_NODE);
|
||||
STRINGISE_RECORD(ATTACHMENT);
|
||||
STRINGISE_RECORD(GENERIC_DEBUG);
|
||||
STRINGISE_RECORD(SUBRANGE);
|
||||
STRINGISE_RECORD(ENUMERATOR);
|
||||
STRINGISE_RECORD(BASIC_TYPE);
|
||||
STRINGISE_RECORD(FILE);
|
||||
STRINGISE_RECORD(DERIVED_TYPE);
|
||||
STRINGISE_RECORD(COMPOSITE_TYPE);
|
||||
STRINGISE_RECORD(SUBROUTINE_TYPE);
|
||||
STRINGISE_RECORD(COMPILE_UNIT);
|
||||
STRINGISE_RECORD(SUBPROGRAM);
|
||||
STRINGISE_RECORD(LEXICAL_BLOCK);
|
||||
STRINGISE_RECORD(LEXICAL_BLOCK_FILE);
|
||||
STRINGISE_RECORD(NAMESPACE);
|
||||
STRINGISE_RECORD(TEMPLATE_TYPE);
|
||||
STRINGISE_RECORD(TEMPLATE_VALUE);
|
||||
STRINGISE_RECORD(GLOBAL_VAR);
|
||||
STRINGISE_RECORD(LOCAL_VAR);
|
||||
STRINGISE_RECORD(EXPRESSION);
|
||||
STRINGISE_RECORD(OBJC_PROPERTY);
|
||||
STRINGISE_RECORD(IMPORTED_ENTITY);
|
||||
STRINGISE_RECORD(MODULE);
|
||||
STRINGISE_RECORD(MACRO);
|
||||
STRINGISE_RECORD(MACRO_FILE);
|
||||
STRINGISE_RECORD(STRINGS);
|
||||
STRINGISE_RECORD(GLOBAL_DECL_ATTACHMENT);
|
||||
STRINGISE_RECORD(GLOBAL_VAR_EXPR);
|
||||
STRINGISE_RECORD(INDEX_OFFSET);
|
||||
STRINGISE_RECORD(INDEX);
|
||||
STRINGISE_RECORD(LABEL);
|
||||
STRINGISE_RECORD(COMMON_BLOCK);
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case KnownBlocks::TYPE_BLOCK:
|
||||
{
|
||||
TypeRecord code = TypeRecord(block.id);
|
||||
switch(code)
|
||||
{
|
||||
STRINGISE_RECORD(NUMENTRY);
|
||||
STRINGISE_RECORD(VOID);
|
||||
STRINGISE_RECORD(FLOAT);
|
||||
STRINGISE_RECORD(DOUBLE);
|
||||
STRINGISE_RECORD(LABEL);
|
||||
STRINGISE_RECORD(OPAQUE);
|
||||
STRINGISE_RECORD(INTEGER);
|
||||
STRINGISE_RECORD(POINTER);
|
||||
STRINGISE_RECORD(FUNCTION_OLD);
|
||||
STRINGISE_RECORD(HALF);
|
||||
STRINGISE_RECORD(ARRAY);
|
||||
STRINGISE_RECORD(VECTOR);
|
||||
STRINGISE_RECORD(METADATA);
|
||||
STRINGISE_RECORD(STRUCT_ANON);
|
||||
STRINGISE_RECORD(STRUCT_NAME);
|
||||
STRINGISE_RECORD(STRUCT_NAMED);
|
||||
STRINGISE_RECORD(FUNCTION);
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// fallback
|
||||
if(name)
|
||||
{
|
||||
return name;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(block.IsBlock())
|
||||
return StringFormat::Fmt("BLOCK%u", block.id);
|
||||
else
|
||||
return StringFormat::Fmt("RECORD%u", block.id);
|
||||
}
|
||||
}
|
||||
|
||||
static void dumpRecord(size_t idx, uint32_t parentBlock, const LLVMBC::BlockOrRecord &record,
|
||||
int indent)
|
||||
{
|
||||
rdcstr line;
|
||||
line.fill(indent, ' ');
|
||||
|
||||
line += StringFormat::Fmt("[%u] = ", idx);
|
||||
|
||||
line += "<" + getName(parentBlock, record);
|
||||
|
||||
if(KnownBlocks(parentBlock) == KnownBlocks::METADATA_BLOCK &&
|
||||
(MetaDataRecord(record.id) == MetaDataRecord::STRING_OLD ||
|
||||
MetaDataRecord(record.id) == MetaDataRecord::NAME ||
|
||||
MetaDataRecord(record.id) == MetaDataRecord::KIND))
|
||||
{
|
||||
line += " record string = " + escapeString(record.getString());
|
||||
}
|
||||
else
|
||||
{
|
||||
bool allASCII = true;
|
||||
for(size_t i = 0; i < record.ops.size(); i++)
|
||||
{
|
||||
if(record.ops[i] < 0x20 || record.ops[i] > 0x7f)
|
||||
{
|
||||
allASCII = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(allASCII && record.ops.size() > 3)
|
||||
line += " record string = " + escapeString(record.getString());
|
||||
|
||||
for(size_t i = 0; i < record.ops.size(); i++)
|
||||
line += StringFormat::Fmt(" op%u=%llu", (uint32_t)i, record.ops[i]);
|
||||
}
|
||||
|
||||
if(record.blob)
|
||||
line += StringFormat::Fmt(" with blob of %u bytes", (uint32_t)record.blobLength);
|
||||
|
||||
line += "/>";
|
||||
|
||||
RDCLOG("%s", line.c_str());
|
||||
}
|
||||
|
||||
static void dumpBlock(const LLVMBC::BlockOrRecord &block, int indent)
|
||||
{
|
||||
rdcstr line;
|
||||
line.fill(indent, ' ');
|
||||
|
||||
if(block.children.empty() || KnownBlocks(block.id) == KnownBlocks::BLOCKINFO)
|
||||
{
|
||||
line += StringFormat::Fmt("<%s/>", getName(0, block).c_str());
|
||||
RDCLOG("%s", line.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
line += StringFormat::Fmt("<%s NumWords=%u>", getName(0, block).c_str(), block.blockDwordLength);
|
||||
RDCLOG("%s", line.c_str());
|
||||
|
||||
for(size_t i = 0; i < block.children.size(); i++)
|
||||
{
|
||||
const LLVMBC::BlockOrRecord &child = block.children[i];
|
||||
|
||||
if(child.IsBlock())
|
||||
dumpBlock(child, indent + 2);
|
||||
else
|
||||
dumpRecord(i, block.id, child, indent + 2);
|
||||
}
|
||||
|
||||
line.fill(indent, ' ');
|
||||
line += StringFormat::Fmt("</%s>", getName(0, block).c_str());
|
||||
RDCLOG("%s", line.c_str());
|
||||
}
|
||||
|
||||
void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType,
|
||||
std::function<Type *(uint64_t)> getType,
|
||||
std::function<const Value *(uint64_t)> getValue,
|
||||
@@ -1139,7 +834,7 @@ Program::Program(const byte *bytes, size_t length)
|
||||
continue;
|
||||
}
|
||||
|
||||
if(symtab.id != 1)
|
||||
if(!IS_KNOWN(symtab.id, ValueSymtabRecord::ENTRY))
|
||||
{
|
||||
RDCERR("Unexpected symbol table record ID %u", symtab.id);
|
||||
continue;
|
||||
@@ -1604,7 +1299,6 @@ Program::Program(const byte *bytes, size_t length)
|
||||
}
|
||||
}
|
||||
|
||||
(void)&dumpBlock;
|
||||
RDCASSERT(functionDecls.empty());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user