Unverified Commit 2d2e2bfe authored by Paul Fultz II's avatar Paul Fultz II Committed by GitHub
Browse files

Fix bug in setting padding in eliminate_pad (#694)

parent e09d54fe
...@@ -42,7 +42,7 @@ void eliminate_pad::update_op(const instruction_ref& input, ...@@ -42,7 +42,7 @@ void eliminate_pad::update_op(const instruction_ref& input,
std::vector<size_t> new_pads(kdims_it, kdims_it + kdims); std::vector<size_t> new_pads(kdims_it, kdims_it + kdims);
auto op = ins->get_operator(); auto op = ins->get_operator();
op.from_value({"padding", new_pads}); op.from_value({{"padding", new_pads}});
std::vector<instruction_ref> new_inputs{ins->inputs()}; std::vector<instruction_ref> new_inputs{ins->inputs()};
new_inputs.front() = input->inputs().front(); new_inputs.front() = input->inputs().front();
......
...@@ -259,6 +259,8 @@ value to_value_op(const T& x) ...@@ -259,6 +259,8 @@ value to_value_op(const T& x)
template <class T> template <class T>
void from_value_op(T& x, const value& v) void from_value_op(T& x, const value& v)
{ {
if(not(v.is_object() or (v.empty() and v.is_array())))
MIGRAPHX_THROW("Value is not an object");
return migraphx::from_value(v, x); return migraphx::from_value(v, x);
} }
......
...@@ -38,7 +38,7 @@ create_conv(migraphx::instruction_ref& l_img, ...@@ -38,7 +38,7 @@ create_conv(migraphx::instruction_ref& l_img,
return mm->add_instruction(op, l_img, l_weights); return mm->add_instruction(op, l_img, l_weights);
} }
TEST_CASE(rewrite_test) TEST_CASE(rewrite_pad)
{ {
migraphx::program p; migraphx::program p;
auto* mm = p.get_main_module(); auto* mm = p.get_main_module();
...@@ -56,12 +56,26 @@ TEST_CASE(rewrite_test) ...@@ -56,12 +56,26 @@ TEST_CASE(rewrite_test)
auto l2 = mm->add_instruction(migraphx::op::pooling{"max"}, padded_img); auto l2 = mm->add_instruction(migraphx::op::pooling{"max"}, padded_img);
mm->add_instruction(migraphx::op::identity{}, l0, l1, l2); mm->add_instruction(migraphx::op::identity{}, l0, l1, l2);
auto s0 = l0->get_shape();
auto s1 = l1->get_shape();
auto s2 = l2->get_shape();
run_pass(p); run_pass(p);
EXPECT(l0->get_shape() == s0);
EXPECT(l1->get_shape() == s1);
EXPECT(l2->get_shape() == s2);
auto op0 = l0->get_operator().to_value();
auto op1 = l1->get_operator().to_value();
auto op2 = l2->get_operator().to_value();
EXPECT(op0["padding"].to_vector<std::size_t>() == std::vector<std::size_t>{1, 1});
EXPECT(op1["padding"].to_vector<std::size_t>() == std::vector<std::size_t>{1, 1});
EXPECT(op2["padding"].to_vector<std::size_t>() == std::vector<std::size_t>{1, 1});
EXPECT(std::none_of( EXPECT(std::none_of(
p.begin(), p.end(), [](const migraphx::instruction& ins) { return ins.name() == "pad"; })); p.begin(), p.end(), [](const migraphx::instruction& ins) { return ins.name() == "pad"; }));
} }
TEST_CASE(rewrite_test_asymmetric) TEST_CASE(rewrite_pad_im2col_asymmetric)
{ {
migraphx::program p; migraphx::program p;
...@@ -75,7 +89,14 @@ TEST_CASE(rewrite_test_asymmetric) ...@@ -75,7 +89,14 @@ TEST_CASE(rewrite_test_asymmetric)
auto l_img = mm->add_literal(migraphx::literal{s_img, input}); auto l_img = mm->add_literal(migraphx::literal{s_img, input});
auto padded_img = mm->add_instruction(migraphx::op::pad{{0, 0, 0, 0, 0, 0, 2, 2}}, l_img); auto padded_img = mm->add_instruction(migraphx::op::pad{{0, 0, 0, 0, 0, 0, 2, 2}}, l_img);
create_im2col(padded_img, channels, p); auto l0 = create_im2col(padded_img, channels, p);
auto s0 = l0->get_shape();
run_pass(p);
EXPECT(l0->get_shape() == s0);
auto op0 = l0->get_operator().to_value();
EXPECT(op0["padding"].to_vector<std::size_t>() == std::vector<std::size_t>{0, 0});
run_pass(p); run_pass(p);
EXPECT(std::any_of( EXPECT(std::any_of(
......
...@@ -259,6 +259,8 @@ value to_value_op(const T& x) ...@@ -259,6 +259,8 @@ value to_value_op(const T& x)
template <class T> template <class T>
void from_value_op(T& x, const value& v) void from_value_op(T& x, const value& v)
{ {
if(not(v.is_object() or (v.empty() and v.is_array())))
MIGRAPHX_THROW("Value is not an object");
return migraphx::from_value(v, x); return migraphx::from_value(v, x);
} }
......
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