Add special zeroinitializer disassembly

This commit is contained in:
baldurk
2020-06-08 11:46:29 +01:00
parent c94b157165
commit 80205a887c
3 changed files with 11 additions and 2 deletions
@@ -243,6 +243,7 @@ void ParseConstant(const LLVMBC::BlockOrRecord &constant, const Type *&curType,
{
Value v;
v.type = curType;
v.nullconst = IS_KNOWN(constant.id, ConstantsRecord::CONST_NULL);
v.undef = IS_KNOWN(constant.id, ConstantsRecord::UNDEF);
addValue(v);
}
@@ -183,7 +183,7 @@ struct Value
ShaderValue val = {};
rdcarray<Value> members;
rdcstr str;
bool undef = false, symbol = false;
bool undef = false, nullconst = true, symbol = false;
rdcstr toString() const;
};
@@ -387,9 +387,17 @@ void Program::MakeDisassemblyString()
case SymbolType::Literal: ret = "???"; break;
case SymbolType::Metadata:
if(s.idx < m_Metadata.size())
ret += StringFormat::Fmt("metadata !%u", GetOrAssignMetaID(&m_Metadata[s.idx]));
{
Metadata &m = m_Metadata[s.idx];
if(m.value && m.val && m.val->nullconst)
ret += StringFormat::Fmt("metadata %s zeroinitializer", m.val->type->toString());
else
ret += StringFormat::Fmt("metadata !%u", GetOrAssignMetaID(&m));
}
else
{
ret = "metadata " + GetFunctionMetadata(func, s.idx)->refString();
}
break;
case SymbolType::Function: ret = "@" + escapeStringIfNeeded(m_Functions[s.idx].name); break;
case SymbolType::GlobalVar: