VarAction2: Fix reg tracking through previously handled procedures

See: #479
This commit is contained in:
Jonathan G Rennison
2023-01-29 14:54:55 +00:00
parent 87f8e56534
commit d793a70dfe
2 changed files with 4 additions and 2 deletions

View File

@@ -29,6 +29,7 @@ struct VarAction2GroupVariableTracking {
std::bitset<256> in; std::bitset<256> in;
std::bitset<256> out; std::bitset<256> out;
std::bitset<256> proc_call_out; std::bitset<256> proc_call_out;
std::bitset<256> proc_call_in;
}; };
struct VarAction2ProcedureAnnotation { struct VarAction2ProcedureAnnotation {

View File

@@ -1689,9 +1689,10 @@ struct CheckDeterministicSpriteGroupOutputVarBitsProcedureHandler {
std::bitset<256> new_total = var_tracking->out | new_proc_call_out; std::bitset<256> new_total = var_tracking->out | new_proc_call_out;
var_tracking->proc_call_out = new_proc_call_out; var_tracking->proc_call_out = new_proc_call_out;
if (old_total != new_total) { if (old_total != new_total) {
CheckDeterministicSpriteGroupOutputVarBits(sub, new_total, input_bits, false); CheckDeterministicSpriteGroupOutputVarBits(sub, new_total, &(var_tracking->proc_call_in), false);
} }
} }
if (input_bits != nullptr) (*input_bits) |= var_tracking->proc_call_in;
if (top_level) this->bits |= var_tracking->in; if (top_level) this->bits |= var_tracking->in;
return false; return false;
} else { } else {
@@ -1737,7 +1738,7 @@ static bool CheckDeterministicSpriteGroupOutputVarBits(const DeterministicSprite
proc_handler.ProcessGroup(adjust.subroutine, nullptr, true); proc_handler.ProcessGroup(adjust.subroutine, nullptr, true);
} }
} }
if (store_input_bits != nullptr) *store_input_bits |= bits; if (store_input_bits != nullptr) *store_input_bits = bits;
return dse; return dse;
} }