shader_ir: Corrections, documenting and asserting control_flow

This commit is contained in:
Fernando Sahmkow 2019-06-25 20:15:40 -04:00 committed by FernandoS27
parent d5533b440c
commit 01b21ee1e8
3 changed files with 54 additions and 52 deletions

View file

@ -46,7 +46,7 @@ void ShaderIR::Decode() {
coverage_end = shader_info.end;
if (shader_info.decompilable) {
disable_flow_stack = true;
auto insert_block = ([this](NodeBlock& nodes, u32 label) {
const auto insert_block = ([this](NodeBlock& nodes, u32 label) {
if (label == exit_branch) {
return;
}
@ -88,7 +88,6 @@ void ShaderIR::Decode() {
for (u32 label = main_offset; label < shader_end; label++) {
basic_blocks.insert({label, DecodeRange(label, label + 1)});
}
return;
}
NodeBlock ShaderIR::DecodeRange(u32 begin, u32 end) {
@ -104,16 +103,17 @@ void ShaderIR::DecodeRangeInner(NodeBlock& bb, u32 begin, u32 end) {
}
void ShaderIR::InsertControlFlow(NodeBlock& bb, const ShaderBlock& block) {
auto apply_conditions = ([&](const Condition& cond, Node n) -> Node {
const auto apply_conditions = ([&](const Condition& cond, Node n) -> Node {
Node result = n;
if (cond.cc != ConditionCode::T) {
result = Conditional(GetConditionCode(cond.cc), {result});
}
if (cond.predicate != Pred::UnusedIndex) {
u32 pred = static_cast<u32>(cond.predicate);
bool is_neg = pred > 7;
if (is_neg)
const bool is_neg = pred > 7;
if (is_neg) {
pred -= 8;
}
result = Conditional(GetPredicate(pred, is_neg), {result});
}
return result;