#include #include #include #include #include #include #include #include #include #include #include #include #include namespace migraphx { inline namespace MIGRAPHX_INLINE_NS { void run_passes(module& modl, const std::vector& passes, tracer trace) { for(const auto& p : passes) { trace("Pass: ", p.name()); p.apply(modl); trace(modl); #ifndef NDEBUG trace("Validate ..."); auto invalid = modl.validate(); if(invalid != modl.end()) { auto index = std::distance(modl.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