| 139 | } |
| 140 | |
| 141 | static module::with_inputs append_pointwise_module(instruction_ref ins, instruction_ref output) |
| 142 | { |
| 143 | std::unordered_set<instruction_ref> original_inputs{ins->inputs().begin(), ins->inputs().end()}; |
| 144 | original_inputs.insert(output->inputs().begin(), output->inputs().end()); |
| 145 | module pm = *ins->module_inputs().at(0); |
| 146 | module_ref xm = output->module_inputs().at(0); |
| 147 | const bool dependent = contains(output->inputs(), ins); |
| 148 | assert(not dependent or pm.get_returns().size() == 1); |
| 149 | |
| 150 | std::unordered_map<instruction_ref, instruction_ref> map_ins = |
| 151 | pm.get_ins_param_map(ins->inputs()); |
| 152 | if(dependent) |
| 153 | map_ins[ins] = pm.get_returns().front(); |
| 154 | auto returns = pm.fuse(*xm, output->inputs(), &map_ins, nullptr, &to_scalar); |
| 155 | if(not is_used_once(ins, &output) or not dependent) |
| 156 | { |
| 157 | auto ireturns = pm.get_returns(); |
| 158 | returns.insert(returns.end(), ireturns.begin(), ireturns.end()); |
| 159 | } |
| 160 | pm.replace_return(returns); |
| 161 | auto inputs = find_inputs(map_ins, original_inputs, &pm); |
| 162 | return {std::move(pm), inputs}; |
| 163 | } |
| 164 | |
| 165 | static void replace_with_tuple(module& m, instruction_ref ins, instruction_ref rep, bool first) |
| 166 |
no test coverage detected