| 162 | } |
| 163 | |
| 164 | void TensorReformatPass::translate_pass(OptState& opt) const { |
| 165 | auto rewriter = opt.graph().make_rewriter(); |
| 166 | auto on_opr = [&rewriter](OperatorNodeBase* opr) { |
| 167 | if (opr->same_type<RelayoutPlaceholder>()) { |
| 168 | auto ph = try_cast_as_op<RelayoutPlaceholder>(opr); |
| 169 | auto new_inp = rewriter.get_var(opr->input(0)); |
| 170 | auto new_var = ReformatManager::instance().get(ph->key())({new_inp}); |
| 171 | rewriter.replace_var( |
| 172 | opr->output(0), new_var, |
| 173 | mgb_cstr_log("replace relayout placeholder")); |
| 174 | return; |
| 175 | } |
| 176 | rewriter.auto_replace_outputs(opr); |
| 177 | }; |
| 178 | opt.graph().iter(on_opr); |
| 179 | rewriter.apply_inplace(); |
| 180 | } |
| 181 | |
| 182 | void TensorReformatPass::apply(OptState& opt) const { |
| 183 | MIDOUT_B("TensorReformatPass::apply") |
nothing calls this directly
no test coverage detected