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,
std::vector<size_t> new_pads(kdims_it, kdims_it + kdims);
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()};
new_inputs.front() = input->inputs().front();
......
......@@ -259,6 +259,8 @@ value to_value_op(const T& x)
template <class T>
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);
}
......
......@@ -38,7 +38,7 @@ create_conv(migraphx::instruction_ref& l_img,
return mm->add_instruction(op, l_img, l_weights);
}
TEST_CASE(rewrite_test)
TEST_CASE(rewrite_pad)
{
migraphx::program p;
auto* mm = p.get_main_module();
......@@ -56,12 +56,26 @@ TEST_CASE(rewrite_test)
auto l2 = mm->add_instruction(migraphx::op::pooling{"max"}, padded_img);
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);
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(
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;
......@@ -75,7 +89,14 @@ TEST_CASE(rewrite_test_asymmetric)
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);
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);
EXPECT(std::any_of(
......
......@@ -259,6 +259,8 @@ value to_value_op(const T& x)
template <class T>
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);
}
......
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