Remove bitcode dump functions

This commit is contained in:
baldurk
2020-06-18 17:22:40 +01:00
parent 39eb8da8f2
commit c94b157165
+1 -307
View File
@@ -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());
}