57 const std::vector<CFGBlock>& cfg_blocks) {
58 const size_t num_blocks = cfg_blocks.size();
60 std::vector<DomainT> gen_sets(num_blocks);
61 for (
size_t i = 0; i < num_blocks; ++i) {
65 std::vector<DomainT> in_sets(num_blocks);
68 if (!cfg_blocks.empty()) {
76 for (
size_t i = 0; i < num_blocks; ++i) {
78 if (i == 0 || cfg_blocks[i].predecessors.empty()) {
81 std::vector<DomainT> pred_outs;
82 pred_outs.reserve(cfg_blocks[i].predecessors.size());
83 std::transform(cfg_blocks[i].predecessors.begin(),
84 cfg_blocks[i].predecessors.end(),
85 std::back_inserter(pred_outs),
86 [&out_sets](
int pred_idx) {
87 return out_sets[pred_idx];
92 if (new_in != in_sets[i]) {
93 in_sets[i] = std::move(new_in);
98 if (new_out != out_sets[i]) {
99 out_sets[i] = std::move(new_out);
105 return {std::move(in_sets), std::move(out_sets)};