#include #include #include #include #include #include #include #include #include #include #include #include #include namespace migraphx { inline namespace MIGRAPHX_INLINE_NS { void run_passes(program& prog, const std::vector& passes, tracer trace) { for(auto& p : passes) { trace("Pass: ", p.name()); p.apply(prog); trace(prog); #ifndef NDEBUG trace("Validate ..."); auto invalid = prog.validate(); if(invalid != prog.end()) { auto index = std::distance(prog.begin(), invalid); MIGRAPHX_THROW(p.name() + " pass produces invalid program at instruction " + std::to_string(index) + ": " + invalid->name()); } trace(); #endif } } } // namespace MIGRAPHX_INLINE_NS } // namespace migraphx