| 688 | const int program_file_version = 7; |
| 689 | |
| 690 | value program::to_value() const |
| 691 | { |
| 692 | value result; |
| 693 | result["version"] = program_file_version; |
| 694 | result["migraphx_version"] = get_migraphx_version(); |
| 695 | result["targets"] = migraphx::to_value(this->impl->targets); |
| 696 | result["contexts"] = migraphx::to_value(this->impl->contexts); |
| 697 | value module_vals = value::object{}; |
| 698 | std::unordered_map<instruction_ref, std::string> names; |
| 699 | for(auto& mod : this->get_modules()) |
| 700 | { |
| 701 | value mod_val; |
| 702 | value nodes; |
| 703 | mod_val["name"] = mod->name(); |
| 704 | names = mod->print( |
| 705 | [&](auto ins, auto ins_names) { |
| 706 | value node; |
| 707 | node["output"] = ins_names.at(ins); |
| 708 | node["name"] = ins->name(); |
| 709 | node["shape"] = migraphx::to_value(ins->get_shape()); |
| 710 | node["normalized"] = ins->is_normalized(); |
| 711 | if(ins->name() == "@literal") |
| 712 | node["literal"] = migraphx::to_value(ins->get_literal()); |
| 713 | node["operator"] = ins->get_operator().to_value(); |
| 714 | std::vector<std::string> inputs; |
| 715 | std::transform(ins->inputs().begin(), |
| 716 | ins->inputs().end(), |
| 717 | std::back_inserter(inputs), |
| 718 | [&](auto i) { |
| 719 | assert(contains(ins_names, i)); |
| 720 | return ins_names.at(i); |
| 721 | }); |
| 722 | node["inputs"] = inputs; |
| 723 | auto module_args = ins->module_inputs(); |
| 724 | if(not module_args.empty()) |
| 725 | { |
| 726 | std::vector<std::string> module_inputs; |
| 727 | std::transform(module_args.begin(), |
| 728 | module_args.end(), |
| 729 | std::back_inserter(module_inputs), |
| 730 | [&](auto mod_ref) { return mod_ref->name(); }); |
| 731 | node["module_inputs"] = module_inputs; |
| 732 | } |
| 733 | |
| 734 | nodes.push_back(node); |
| 735 | }, |
| 736 | names); |
| 737 | mod_val["nodes"] = nodes; |
| 738 | |
| 739 | module_vals[mod->name()] = mod_val; |
| 740 | } |
| 741 | |
| 742 | result["modules"] = module_vals; |
| 743 | |
| 744 | return result; |
| 745 | } |
| 746 | |
| 747 | static void mod_from_val(module_ref mod, |