Commit a4567795 authored by Shucai Xiao's avatar Shucai Xiao
Browse files

fix issue that alias 0 instrution as program return values

parent fa542e7c
...@@ -39,6 +39,13 @@ static bool try_compute_shape(instruction_ref ins, ...@@ -39,6 +39,13 @@ static bool try_compute_shape(instruction_ref ins,
return false; return false;
} }
if (std::any_of(outputs.begin(), outputs.end(), [](auto o) {
return o->name() == "@return";
}))
{
return false;
}
for(auto output : outputs) for(auto output : outputs)
{ {
auto args = output->inputs(); auto args = output->inputs();
......
...@@ -627,8 +627,9 @@ std::unordered_map<instruction_ref, std::string> module::print( ...@@ -627,8 +627,9 @@ std::unordered_map<instruction_ref, std::string> module::print(
var_name = this->name(); var_name = this->name();
var_name.append((this->name().empty() ? "@" : ":@")); var_name.append((this->name().empty() ? "@" : ":@"));
var_name.append(std::to_string(count)); var_name.append(std::to_string(count));
count++;
} }
// make instruction index to be the line num in the printed module
count++;
names.emplace(ins, var_name); names.emplace(ins, var_name);
print_func(ins, names); print_func(ins, names);
......
...@@ -168,7 +168,7 @@ void program::compile(const target& t, compile_options options) ...@@ -168,7 +168,7 @@ void program::compile(const target& t, compile_options options)
{ {
auto index = std::distance(mod->begin(), dangling); auto index = std::distance(mod->begin(), dangling);
MIGRAPHX_THROW("Dangling reference in module " + mod->name() + " from instruction " + MIGRAPHX_THROW("Dangling reference in module " + mod->name() + " from instruction " +
std::to_string(index)); std::to_string(index) + ", (" + dangling->name() + ")");
} }
mod->finalize(this->impl->ctx); mod->finalize(this->impl->ctx);
} }
......
...@@ -81,15 +81,20 @@ struct miopen_apply ...@@ -81,15 +81,20 @@ struct miopen_apply
if(this->last->name() == "@return") if(this->last->name() == "@return")
{ {
const auto& prog_outputs = last->inputs(); const auto& prog_outputs = last->inputs();
std::vector<instruction_ref> outputs_alias(prog_outputs.size()); std::vector<instruction_ref> outputs(prog_outputs.size());
std::transform(prog_outputs.begin(), std::transform(prog_outputs.begin(),
prog_outputs.end(), prog_outputs.end(),
outputs_alias.begin(), outputs.begin(),
[](const auto& i) { return instruction::get_output_alias(i); }); [](const auto& i) {
auto alias_ins = instruction::get_output_alias(i);
auto alias_s = alias_ins->get_shape();
return (alias_s.type() == shape::tuple_type or alias_s.elements() != i->get_shape().elements()) ? i : alias_ins;
}
);
std::size_t index = 0; std::size_t index = 0;
for(auto ins : outputs_alias) for(auto ins : outputs)
{ {
prog_output_names[ins] = mod->name() + ":#output_" + std::to_string(index++); prog_output_names[ins] = mod->name() + ":#output_" + std::to_string(index++);
} }
...@@ -265,10 +270,28 @@ struct miopen_apply ...@@ -265,10 +270,28 @@ struct miopen_apply
} }
auto ins_alias = instruction::get_output_alias(ins); auto ins_alias = instruction::get_output_alias(ins);
if(last->name() == "@return" and tag.empty() and prog_output_names.count(ins_alias) > 0) if(last->name() == "@return" and tag.empty())
{
auto alias_s = ins_alias->get_shape();
if(alias_s.type() == shape::tuple_type or alias_s.elements() != ins->get_shape().elements())
{
if(prog_output_names.count(ins) > 0)
{
auto out_ins = mod->add_parameter(prog_output_names[ins], s);
mod->insert_instruction(std::next(ins), make_op("contiguous"), ins, out_ins);
mod->replace_instruction(ins, out_ins);
return out_ins;
}
}
else
{
if(prog_output_names.count(ins_alias) > 0)
{ {
return mod->add_parameter(prog_output_names[ins_alias], s); return mod->add_parameter(prog_output_names[ins_alias], s);
} }
}
}
else if(ins == last and tag.empty()) else if(ins == last and tag.empty())
{ {
return mod->add_parameter("output", s); return mod->add_parameter("output", s);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment