Commit a1efd676 authored by Paul's avatar Paul
Browse files

Format

parent 4c185e65
...@@ -562,32 +562,36 @@ struct find_splits ...@@ -562,32 +562,36 @@ struct find_splits
static std::vector<instruction_ref> split_nary(const std::vector<instruction_ref>& group) static std::vector<instruction_ref> split_nary(const std::vector<instruction_ref>& group)
{ {
// All inputs have the same slices // All inputs have the same slices
if (not std::all_of(group.begin(), group.end(), [](auto ins) { if(not std::all_of(group.begin(), group.end(), [](auto ins) {
if (ins->inputs().empty()) if(ins->inputs().empty())
return false; return false;
auto first = ins->inputs().front(); auto first = ins->inputs().front();
if (first->name() != "slice") if(first->name() != "slice")
return false; return false;
return std::all_of(ins->inputs().begin()+1, ins->inputs().end(), [&](auto input) { return std::all_of(ins->inputs().begin() + 1, ins->inputs().end(), [&](auto input) {
return input->get_operator() == first->get_operator(); return input->get_operator() == first->get_operator();
}); });
})) }))
return {}; return {};
auto start = group.front(); auto start = group.front();
std::vector<instruction_ref> inputs; std::vector<instruction_ref> inputs;
std::transform(start->inputs().begin(), start->inputs().end(), std::back_inserter(inputs), [](auto ins) { std::transform(start->inputs().begin(),
return ins->inputs().front(); start->inputs().end(),
}); std::back_inserter(inputs),
if (not std::all_of(group.begin(), group.end(), [&](auto ins) { [](auto ins) { return ins->inputs().front(); });
return std::equal(ins->inputs().begin(), ins->inputs().end(), inputs.begin(), inputs.end(), [](auto slice, auto input) { if(not std::all_of(group.begin(), group.end(), [&](auto ins) {
return slice->inputs().front() == input; return std::equal(
}); ins->inputs().begin(),
})) ins->inputs().end(),
inputs.begin(),
inputs.end(),
[](auto slice, auto input) { return slice->inputs().front() == input; });
}))
return {}; return {};
return inputs; return inputs;
} }
template<class Range> template <class Range>
static instruction_ref find_last_instruction(const module& m, const Range& r) static instruction_ref find_last_instruction(const module& m, const Range& r)
{ {
auto rm = reverse(m); auto rm = reverse(m);
...@@ -629,10 +633,10 @@ struct find_splits ...@@ -629,10 +633,10 @@ struct find_splits
}) && "one argument must be a split"); }) && "one argument must be a split");
auto split_inputs = split_nary(group); auto split_inputs = split_nary(group);
if (not split_inputs.empty()) if(not split_inputs.empty())
{ {
auto last = find_last_instruction(m, split_inputs); auto last = find_last_instruction(m, split_inputs);
c = m.insert_instruction(std::next(last), op, split_inputs); c = m.insert_instruction(std::next(last), op, split_inputs);
} }
else else
{ {
...@@ -673,7 +677,6 @@ struct find_splits ...@@ -673,7 +677,6 @@ struct find_splits
args[data_idx] = concat; args[data_idx] = concat;
c = m.insert_instruction(std::next(ins), op, args); c = m.insert_instruction(std::next(ins), op, args);
} }
} }
if(c != m.end()) if(c != m.end())
{ {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment