fix for pass manager and new pass improvements #7

Merged
Alexander_KS merged 3 commits from select_array_dim_conf_pass_xnp into master 2023-09-27 12:58:50 +00:00
Showing only changes of commit 377e60df78 - Show all commits

View File

@@ -98,7 +98,8 @@ public:
list({ *this }) -= list({ right });
}
void applyRemovals() {
void applyRemovals()
{
map<passes, set<passes>> to_process, processed;
to_process[name] = {};
@@ -106,18 +107,21 @@ public:
{
map<passes, set<passes>> to_process_next;
for (const auto& pass : to_process) {
for (const auto& pass : to_process)
{
auto processed_it = processed.find(pass.first);
auto& done_removals = processed_it != processed.end() ? processed_it->second : processed[pass.first];
set<passes> removals_to_do;
bool process_pass = false;
if (processed_it == processed.end()) {
if (processed_it == processed.end())
{
removals_to_do = done_removals = pass.second;
process_pass = true;
}
else {
else
{
const auto& needed_removals = pass.second;
set_difference(needed_removals.begin(), needed_removals.end(), done_removals.begin(), done_removals.end(),
@@ -127,12 +131,14 @@ public:
done_removals.insert(removals_to_do.begin(), removals_to_do.end());
}
if (process_pass) {
if (process_pass)
{
processed[pass.first] = pass.second;
auto removals_it = passRemovals.find(pass.first);
if (removals_it != passRemovals.end()) {
if (removals_it != passRemovals.end())
{
auto& removals_saved = removals_it->second;
set<passes> add;
@@ -145,10 +151,12 @@ public:
auto deps_it = passDeps->find(pass.first);
if (deps_it != passDeps->end()) {
if (deps_it != passDeps->end())
{
auto& deps = deps_it->second;
for (auto dep_it = deps.begin(); dep_it != deps.end();) {
for (auto dep_it = deps.begin(); dep_it != deps.end();)
{
if (removals_to_do.find(*dep_it) == removals_to_do.end())
to_process_next[*(dep_it++)].insert(removals_to_do.begin(), removals_to_do.end());
else