| 215 | } |
| 216 | |
| 217 | static auto find_input_pointwise(const module& m, instruction_ref ins, bool multi_out) |
| 218 | { |
| 219 | auto it = std::find_if(ins->inputs().begin(), ins->inputs().end(), [&](auto i) { |
| 220 | return i->name() == "pointwise" and i->outputs().size() == 1 and m.has_instruction(i); |
| 221 | }); |
| 222 | if(it == ins->inputs().end() and multi_out) |
| 223 | { |
| 224 | it = std::find_if(ins->inputs().begin(), ins->inputs().end(), [&](auto i) { |
| 225 | if(not m.has_instruction(i)) |
| 226 | return false; |
| 227 | auto base_distance = std::distance(i, ins); |
| 228 | return i->name() == "pointwise" and |
| 229 | std::none_of(i->outputs().begin(), i->outputs().end(), [&](auto output) { |
| 230 | if(not m.has_instruction(output)) |
| 231 | return true; |
| 232 | if(output == ins) |
| 233 | return false; |
| 234 | if(std::distance(i, output) > base_distance) |
| 235 | return false; |
| 236 | return reaches(output, ins, &m); |
| 237 | }); |
| 238 | }); |
| 239 | } |
| 240 | return it; |
| 241 | } |
| 242 | |
| 243 | static std::vector<instruction_ref> |
| 244 | find_output_pointwise(const module& m, instruction_ref ins, bool multi_out) |
no test coverage detected