14 namespace split_by_successor_predecessor_known_groups
18 auto new_state = std::make_shared<Grouping>(
state->netlist_abstr);
21 for (
const auto& [group_id, gates] :
state->gates_of_group)
23 if (!
state->is_group_allowed_to_split(group_id))
25 u32 new_group_id = ++id_counter;
27 new_state->group_control_fingerprint_map[new_group_id] =
state->netlist_abstr.gate_to_fingerprint.at(*gates.begin());
28 new_state->operations_on_group_allowed[new_group_id] =
state->operations_on_group_allowed.at(group_id);
30 new_state->gates_of_group[new_group_id].insert(gates.begin(), gates.end());
31 for (
const auto& sg : gates)
33 new_state->parent_group_of_gate[sg] = new_group_id;
38 std::map<std::set<u32>, std::unordered_set<u32>> characteristics_map;
39 for (
auto gate : gates)
41 std::set<u32> characteristics_of_gate;
44 for (
auto known_group_successors :
state->netlist_abstr.gate_to_known_successor_groups.at(gate))
46 characteristics_of_gate.insert(known_group_successors);
51 for (
auto known_group_predecessors :
state->netlist_abstr.gate_to_known_predecessor_groups.at(gate))
53 characteristics_of_gate.insert(known_group_predecessors);
57 characteristics_map[characteristics_of_gate].insert(gate);
61 for (
auto gates_to_merge : characteristics_map)
63 u32 new_group_id = ++id_counter;
65 new_state->group_control_fingerprint_map[new_group_id] = new_state->netlist_abstr.gate_to_fingerprint.at(*gates_to_merge.second.begin());
66 new_state->operations_on_group_allowed[new_group_id] =
state->operations_on_group_allowed.at(group_id);
68 new_state->gates_of_group[new_group_id].insert(gates_to_merge.second.begin(), gates_to_merge.second.end());
69 for (
const auto& sg : gates_to_merge.second)
71 new_state->parent_group_of_gate[sg] = new_group_id;
std::shared_ptr< Grouping > process(const processing::Configuration &config, const std::shared_ptr< Grouping > &state, bool successors)
This file contains the struct that holds all information on the netlist abstraction used for dataflow...
This file contains the class that holds all information of a dataflow analysis grouping.