VarAction2: Don't change variable masks when disabling procedure DSE

This commit is contained in:
Jonathan G Rennison
2022-06-03 23:46:37 +01:00
parent 3d42e36f89
commit a93b3948b5

View File

@@ -52,6 +52,7 @@
#include "debug_settings.h" #include "debug_settings.h"
#include "core/arena_alloc.hpp" #include "core/arena_alloc.hpp"
#include "core/y_combinator.hpp" #include "core/y_combinator.hpp"
#include "core/container_func.hpp"
#include "table/strings.h" #include "table/strings.h"
#include "table/build_industry.h" #include "table/build_industry.h"
@@ -6237,10 +6238,9 @@ static void RecursiveDisallowDSEForProcedure(const SpriteGroup *group)
if (group->type != SGT_DETERMINISTIC) return; if (group->type != SGT_DETERMINISTIC) return;
const DeterministicSpriteGroup *sub = static_cast<const DeterministicSpriteGroup *>(group); const DeterministicSpriteGroup *sub = static_cast<const DeterministicSpriteGroup *>(group);
VarAction2GroupVariableTracking *var_tracking = _cur.GetVarAction2GroupVariableTracking(sub, true); container_unordered_remove(_cur.dead_store_elimination_candidates, group);
if (!var_tracking->out.all()) { for (const DeterministicSpriteGroupAdjust &adjust : sub->adjusts) {
var_tracking->out.set(); if (adjust.variable == 0x7E) RecursiveDisallowDSEForProcedure(adjust.subroutine);
CheckDeterministicSpriteGroupOutputVarBits(sub, var_tracking->out, false, false);
} }
if (!sub->calculated_result) { if (!sub->calculated_result) {
RecursiveDisallowDSEForProcedure(const_cast<SpriteGroup *>(sub->default_group)); RecursiveDisallowDSEForProcedure(const_cast<SpriteGroup *>(sub->default_group));