onnx_test.cpp 43.1 KB
Newer Older
Scott Thornton's avatar
Scott Thornton committed
1
2
#include <iostream>
#include <vector>
Paul's avatar
Paul committed
3
4
5
6
#include <migraphx/literal.hpp>
#include <migraphx/operators.hpp>
#include <migraphx/program.hpp>
#include <migraphx/instruction.hpp>
Shucai Xiao's avatar
Shucai Xiao committed
7
#include <migraphx/instruction_ref.hpp>
Shucai Xiao's avatar
Shucai Xiao committed
8
9
10
#include <migraphx/pass_manager.hpp>
#include <migraphx/dead_code_elimination.hpp>
#include <migraphx/eliminate_identity.hpp>
Paul's avatar
Paul committed
11
#include <migraphx/onnx.hpp>
Scott Thornton's avatar
Scott Thornton committed
12
13
#include "test.hpp"

Shucai Xiao's avatar
Shucai Xiao committed
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
migraphx::program optimize_onnx(const std::string& name, bool eliminate_deadcode = false)
{
    auto prog = migraphx::parse_onnx(name);
    if(eliminate_deadcode)
        migraphx::run_passes(prog, {migraphx::dead_code_elimination{}});

    // remove the last identity instruction
    auto last_ins = std::prev(prog.end());
    if(last_ins->name() == "identity")
    {
        prog.remove_instruction(last_ins);
    }

    return prog;
}

Khalique's avatar
Khalique committed
30
TEST_CASE(acos_test)
Scott Thornton's avatar
Scott Thornton committed
31
{
Paul's avatar
Paul committed
32
    migraphx::program p;
Khalique's avatar
Khalique committed
33
34
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::acos{}, input);
Scott Thornton's avatar
Scott Thornton committed
35

Shucai Xiao's avatar
Shucai Xiao committed
36
    auto prog = optimize_onnx("acos_test.onnx");
Scott Thornton's avatar
Scott Thornton committed
37
38
39
40

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
41
TEST_CASE(add_bcast_test)
42
{
Paul's avatar
Paul committed
43
    migraphx::program p;
Khalique's avatar
Khalique committed
44
45
46
47
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4}});
    auto l2 = p.add_instruction(migraphx::op::broadcast{1, l0->get_shape().lens()}, l1);
    p.add_instruction(migraphx::op::add{}, l0, l2);
Paul's avatar
Paul committed
48

Shucai Xiao's avatar
Shucai Xiao committed
49
    auto prog = optimize_onnx("add_bcast_test.onnx");
Paul's avatar
Paul committed
50

51
52
53
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
54
TEST_CASE(add_fp16_test)
Scott Thornton's avatar
Scott Thornton committed
55
{
Paul's avatar
Paul committed
56
    migraphx::program p;
Khalique's avatar
Khalique committed
57
58
59
60
61
    auto l0 =
        p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::half_type, {1}}, {1.5}});
    auto l1 =
        p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::half_type, {1}}, {2.5}});
    p.add_instruction(migraphx::op::add{}, l0, l1);
Shucai Xiao's avatar
Shucai Xiao committed
62
    auto prog = optimize_onnx("add_fp16_test.onnx");
Scott Thornton's avatar
Scott Thornton committed
63
64
65
66

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
67
TEST_CASE(add_scalar_test)
68
{
Paul's avatar
Paul committed
69
    migraphx::program p;
Khalique's avatar
Khalique committed
70
    auto l1 = p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type}, {1}});
71
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
72
    auto m1 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
73
    p.add_instruction(migraphx::op::add{}, l0, m1);
Shucai Xiao's avatar
Shucai Xiao committed
74
    auto prog = optimize_onnx("add_scalar_test.onnx");
75
76
77
78

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
79
TEST_CASE(argmax_test)
Khalique's avatar
Khalique committed
80
{
Paul's avatar
Paul committed
81
    migraphx::program p;
Khalique's avatar
Khalique committed
82
83
84
    auto l0  = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto ins = p.add_instruction(migraphx::op::argmax{2}, l0);
    p.add_instruction(migraphx::op::squeeze{{2}}, ins);
Shucai Xiao's avatar
Shucai Xiao committed
85
    auto prog = optimize_onnx("argmax_test.onnx");
Khalique's avatar
Khalique committed
86
87
88
89

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
90
TEST_CASE(argmin_test)
91
{
Paul's avatar
Paul committed
92
    migraphx::program p;
Khalique's avatar
Khalique committed
93
94
95
    auto l0  = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto ins = p.add_instruction(migraphx::op::argmin{3}, l0);
    p.add_instruction(migraphx::op::squeeze{{3}}, ins);
Shucai Xiao's avatar
Shucai Xiao committed
96
    auto prog = optimize_onnx("argmin_test.onnx");
97
98
99
100

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
101
TEST_CASE(asin_test)
102
{
Paul's avatar
Paul committed
103
    migraphx::program p;
Khalique's avatar
Khalique committed
104
105
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::asin{}, input);
106

Shucai Xiao's avatar
Shucai Xiao committed
107
    auto prog = optimize_onnx("asin_test.onnx");
108
109
110
111

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
112
TEST_CASE(atan_test)
Khalique's avatar
Khalique committed
113
{
Paul's avatar
Paul committed
114
    migraphx::program p;
Khalique's avatar
Khalique committed
115
116
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::atan{}, input);
Khalique's avatar
Khalique committed
117

Shucai Xiao's avatar
Shucai Xiao committed
118
    auto prog = optimize_onnx("atan_test.onnx");
Khalique's avatar
Khalique committed
119
120
121
122

    EXPECT(p == prog);
}

123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
TEST_CASE(averagepool_notset_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 5}});
    std::vector<int64_t> pads = {0, 0, 0, 0, 0, 0, 1, 1};
    auto ins_pad              = p.add_instruction(migraphx::op::pad{pads}, input);
    p.add_instruction(migraphx::op::pooling{"average", {0, 0}, {2, 2}, {6, 6}}, ins_pad);

    auto prog = optimize_onnx("averagepool_notset_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(averagepool_same_lower_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 5}});
    std::vector<int64_t> pads = {0, 0, 1, 1, 0, 0, 0, 0};
    auto ins_pad              = p.add_instruction(migraphx::op::pad{pads}, input);
    p.add_instruction(
        migraphx::op::pooling{
            "average", {0, 0}, {1, 1}, {2, 2}, migraphx::op::padding_mode_t::same},
        ins_pad);

    auto prog = optimize_onnx("averagepool_same_lower_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(averagepool_same_upper_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 5}});
    std::vector<int64_t> pads = {0, 0, 0, 0, 0, 0, 1, 1};
    auto ins_pad              = p.add_instruction(migraphx::op::pad{pads}, input);
    p.add_instruction(
        migraphx::op::pooling{
            "average", {0, 0}, {1, 1}, {2, 2}, migraphx::op::padding_mode_t::same},
        ins_pad);

    auto prog = optimize_onnx("averagepool_same_upper_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
168
TEST_CASE(cast_test)
Khalique's avatar
Khalique committed
169
{
Paul's avatar
Paul committed
170
    migraphx::program p;
Khalique's avatar
Khalique committed
171
172
    auto l = p.add_parameter("x", migraphx::shape{migraphx::shape::half_type, {10}});
    p.add_instruction(migraphx::op::convert{migraphx::shape::float_type}, l);
Khalique's avatar
Khalique committed
173

Shucai Xiao's avatar
Shucai Xiao committed
174
    auto prog = optimize_onnx("cast_test.onnx");
Khalique's avatar
Khalique committed
175
176
177
    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
178
179
180
181
182
183
TEST_CASE(ceil_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::ceil{}, input);

Shucai Xiao's avatar
Shucai Xiao committed
184
    auto prog = optimize_onnx("ceil_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
185
186
187
188

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
189
TEST_CASE(clip_test)
Khalique's avatar
Khalique committed
190
191
{
    migraphx::program p;
Khalique's avatar
Khalique committed
192
193
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    p.add_instruction(migraphx::op::clip{6.0, 0.0}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
194
    auto prog = optimize_onnx("clip_test.onnx");
Khalique's avatar
Khalique committed
195

196
197
198
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
199
TEST_CASE(concat_test)
Shucai Xiao's avatar
Shucai Xiao committed
200
201
{
    migraphx::program p;
Khalique's avatar
Khalique committed
202
203
204
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 4, 3}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {7, 4, 3}});
    p.add_instruction(migraphx::op::concat{0}, l0, l1);
Shucai Xiao's avatar
Shucai Xiao committed
205
    auto prog = optimize_onnx("concat_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
206
207
208
209

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
210
TEST_CASE(constant_test)
Shucai Xiao's avatar
Shucai Xiao committed
211
212
{
    migraphx::program p;
Khalique's avatar
Khalique committed
213
    p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type, {3}}, {0, 1, 2}});
Shucai Xiao's avatar
Shucai Xiao committed
214
    auto prog = optimize_onnx("constant_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
215
216
217
218

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
219
TEST_CASE(constant_fill_test)
Shucai Xiao's avatar
Shucai Xiao committed
220
{
Khalique's avatar
Khalique committed
221
222
223
224
225

    migraphx::program p;
    migraphx::shape s{migraphx::shape::float_type, {2, 3}};
    std::vector<float> value(s.elements(), 1.0);
    p.add_literal(migraphx::literal{s, value});
Shucai Xiao's avatar
Shucai Xiao committed
226
    auto prog = optimize_onnx("constant_fill_test.onnx");
Khalique's avatar
Khalique committed
227
228
229
230
231
232
233
234
235
236
237
238
239
240

    EXPECT(p == prog);
}

TEST_CASE(constant_fill_input_as_shape_test)
{
    migraphx::program p;
    auto l0 = p.add_literal(migraphx::literal{{migraphx::shape::int32_type, {2}}, {2, 3}});
    std::vector<std::size_t> dims(l0->get_shape().elements());
    migraphx::literal ls = l0->get_literal();
    ls.visit([&](auto s) { dims.assign(s.begin(), s.end()); });
    migraphx::shape s{migraphx::shape::float_type, dims};
    std::vector<float> value(s.elements(), 1.0);
    p.add_literal(migraphx::literal{s, value});
Shucai Xiao's avatar
Shucai Xiao committed
241
    auto prog = optimize_onnx("constant_fill_input_as_shape_test.onnx");
Khalique's avatar
Khalique committed
242
243

    EXPECT(p == prog);
Shucai Xiao's avatar
Shucai Xiao committed
244
245
}

Khalique's avatar
Khalique committed
246
TEST_CASE(constant_scalar_test)
247
248
{
    migraphx::program p;
Khalique's avatar
Khalique committed
249
    p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::int32_type, {1}}, {1}});
Shucai Xiao's avatar
Shucai Xiao committed
250
    auto prog = optimize_onnx("constant_scalar_test.onnx");
251
252
253
254

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
255
TEST_CASE(const_of_shape_empty_input_test)
Shucai Xiao's avatar
Shucai Xiao committed
256
257
{
    migraphx::program p;
Khalique's avatar
Khalique committed
258
259
260
261
    p.add_literal(migraphx::literal());
    migraphx::shape s(migraphx::shape::int64_type, {1}, {0});
    std::vector<int64_t> vec(s.elements(), 10);
    p.add_literal(migraphx::literal(s, vec));
Shucai Xiao's avatar
Shucai Xiao committed
262

Shucai Xiao's avatar
Shucai Xiao committed
263
    auto prog = optimize_onnx("const_of_shape_empty_input_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
264
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
265
266
}

Khalique's avatar
Khalique committed
267
TEST_CASE(const_of_shape_float_test)
268
269
{
    migraphx::program p;
Khalique's avatar
Khalique committed
270
271
272
273
274
    migraphx::shape ss(migraphx::shape::int32_type, {3});
    p.add_literal(migraphx::literal(ss, {2, 3, 4}));
    migraphx::shape s(migraphx::shape::float_type, {2, 3, 4});
    std::vector<float> vec(s.elements(), 10.0f);
    p.add_literal(migraphx::literal(s, vec));
275

Shucai Xiao's avatar
Shucai Xiao committed
276
    auto prog = optimize_onnx("const_of_shape_float_test.onnx");
277
278
279
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
280
TEST_CASE(const_of_shape_int64_test)
281
282
{
    migraphx::program p;
Khalique's avatar
Khalique committed
283
284
285
286
287
    migraphx::shape ss(migraphx::shape::int32_type, {3});
    p.add_literal(migraphx::literal(ss, {2, 3, 4}));
    migraphx::shape s(migraphx::shape::int64_type, {2, 3, 4});
    std::vector<int64_t> vec(s.elements(), 10);
    p.add_literal(migraphx::literal(s, vec));
288

Shucai Xiao's avatar
Shucai Xiao committed
289
    auto prog = optimize_onnx("const_of_shape_int64_test.onnx");
290
291
292
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
293
TEST_CASE(const_of_shape_no_value_attr_test)
294
295
{
    migraphx::program p;
Khalique's avatar
Khalique committed
296
297
298
299
300
    migraphx::shape ss(migraphx::shape::int32_type, {3});
    p.add_literal(migraphx::literal(ss, {2, 3, 4}));
    migraphx::shape s(migraphx::shape::float_type, {2, 3, 4});
    std::vector<float> vec(s.elements(), 0.0f);
    p.add_literal(migraphx::literal(s, vec));
301

Shucai Xiao's avatar
Shucai Xiao committed
302
    auto prog = optimize_onnx("const_of_shape_no_value_attr_test.onnx");
303
304
305
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
306
TEST_CASE(conv_autopad_fail_test)
307
{
Shucai Xiao's avatar
Shucai Xiao committed
308
    EXPECT(test::throws([&] { optimize_onnx("conv_autopad_fail_test.onnx"); }));
Khalique's avatar
Khalique committed
309
}
310

Khalique's avatar
Khalique committed
311
312
313
314
315
316
317
318
319
320
321
TEST_CASE(conv_bias_test)
{
    migraphx::program p;
    auto l0       = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1       = p.add_parameter("1", {migraphx::shape::float_type, {1, 3, 5, 5}});
    auto l2       = p.add_parameter("2", {migraphx::shape::float_type, {1}});
    uint64_t axis = 1;
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
    p.add_instruction(migraphx::op::add{}, l3, l4);

Shucai Xiao's avatar
Shucai Xiao committed
322
    auto prog = optimize_onnx("conv_bias_test.onnx");
Khalique's avatar
Khalique committed
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
    EXPECT(p == prog);
}

TEST_CASE(conv_bn_relu_maxpool_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1 = p.add_parameter("1", {migraphx::shape::float_type, {1, 3, 5, 5}});
    auto l2 = p.add_parameter("2", {migraphx::shape::float_type, {1}});

    auto p3       = p.add_parameter("3", {migraphx::shape::float_type, {1}});
    auto p4       = p.add_parameter("4", {migraphx::shape::float_type, {1}});
    auto p5       = p.add_parameter("5", {migraphx::shape::float_type, {1}});
    auto p6       = p.add_parameter("6", {migraphx::shape::float_type, {1}});
    uint64_t axis = 1;
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
    auto l5       = p.add_instruction(migraphx::op::add{}, l3, l4);
    auto l6 = p.add_instruction(migraphx::op::batch_norm_inference{1.0e-5f}, l5, p3, p4, p5, p6);
    auto l7 = p.add_instruction(migraphx::op::relu{}, l6);
    p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l7);

Shucai Xiao's avatar
Shucai Xiao committed
345
    auto prog = optimize_onnx("conv_bn_relu_maxpool_test.onnx");
Khalique's avatar
Khalique committed
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
    EXPECT(p == prog);
}

TEST_CASE(conv_relu_maxpool_test)
{
    migraphx::program p;
    auto l0       = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1       = p.add_parameter("1", {migraphx::shape::float_type, {1, 3, 5, 5}});
    auto l2       = p.add_parameter("2", {migraphx::shape::float_type, {1}});
    uint64_t axis = 1;
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
    auto l5       = p.add_instruction(migraphx::op::add{}, l3, l4);
    auto l6       = p.add_instruction(migraphx::op::relu{}, l5);
    p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l6);

Shucai Xiao's avatar
Shucai Xiao committed
362
    auto prog = optimize_onnx("conv_relu_maxpool_test.onnx");
Khalique's avatar
Khalique committed
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
    EXPECT(p == prog);
}

TEST_CASE(conv_relu_maxpool_x2_test)
{
    migraphx::program p;
    auto l0       = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1       = p.add_parameter("1", {migraphx::shape::float_type, {5, 3, 5, 5}});
    auto l2       = p.add_parameter("2", {migraphx::shape::float_type, {5}});
    uint64_t axis = 1;
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
    auto l5       = p.add_instruction(migraphx::op::add{}, l3, l4);
    auto l6       = p.add_instruction(migraphx::op::relu{}, l5);
    auto l7 = p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l6);

    auto l8  = p.add_parameter("3", {migraphx::shape::float_type, {1, 5, 5, 5}});
    auto l9  = p.add_parameter("4", {migraphx::shape::float_type, {1}});
    auto l10 = p.add_instruction(migraphx::op::convolution{}, l7, l8);
    auto l11 = p.add_instruction(migraphx::op::broadcast{axis, l10->get_shape().lens()}, l9);
    auto l12 = p.add_instruction(migraphx::op::add{}, l10, l11);
    auto l13 = p.add_instruction(migraphx::op::relu{}, l12);
    p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l13);

Shucai Xiao's avatar
Shucai Xiao committed
387
    auto prog = optimize_onnx("conv_relu_maxpool_x2_test.onnx");
Khalique's avatar
Khalique committed
388
389
390
391

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
392
TEST_CASE(cos_test)
393
394
395
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
Khalique's avatar
Khalique committed
396
    p.add_instruction(migraphx::op::cos{}, input);
397

Shucai Xiao's avatar
Shucai Xiao committed
398
    auto prog = optimize_onnx("cos_test.onnx");
399
400
401
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
402
TEST_CASE(cosh_test)
403
404
405
406
407
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::cosh{}, input);

Shucai Xiao's avatar
Shucai Xiao committed
408
    auto prog = optimize_onnx("cosh_test.onnx");
409
410
411
412

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
413
TEST_CASE(dropout_test)
Shucai Xiao's avatar
Shucai Xiao committed
414
415
{
    migraphx::program p;
Khalique's avatar
Khalique committed
416
417
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 2, 2}});
    p.add_instruction(migraphx::op::identity{}, input);
Shucai Xiao's avatar
Shucai Xiao committed
418

Shucai Xiao's avatar
Shucai Xiao committed
419
    auto prog = optimize_onnx("dropout_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
420
421
422
423

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
424
425
426
427
428
429
TEST_CASE(elu_test)
{
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    p.add_instruction(migraphx::op::elu{0.01}, input);

Shucai Xiao's avatar
Shucai Xiao committed
430
    auto prog = optimize_onnx("elu_test.onnx");
Khalique's avatar
Khalique committed
431
432
433
434

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
435
TEST_CASE(erf_test)
436
437
{
    migraphx::program p;
Khalique's avatar
Khalique committed
438
439
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10, 15}});
    p.add_instruction(migraphx::op::erf{}, input);
Khalique's avatar
Khalique committed
440

Shucai Xiao's avatar
Shucai Xiao committed
441
    auto prog = optimize_onnx("erf_test.onnx");
Khalique's avatar
Khalique committed
442
443
444
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
445
TEST_CASE(exp_test)
446
447
448
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
Khalique's avatar
Khalique committed
449
    p.add_instruction(migraphx::op::exp{}, input);
Khalique's avatar
Khalique committed
450

Shucai Xiao's avatar
Shucai Xiao committed
451
    auto prog = optimize_onnx("exp_test.onnx");
Khalique's avatar
Khalique committed
452
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
453
454
}

Khalique's avatar
Khalique committed
455
TEST_CASE(expand_test)
456
457
{
    migraphx::program p;
Khalique's avatar
Khalique committed
458
459
460
461
462
    migraphx::shape s(migraphx::shape::float_type, {3, 1, 1});
    auto param = p.add_parameter("x", s);
    migraphx::shape ss(migraphx::shape::int32_type, {4});
    p.add_literal(migraphx::literal(ss, {2, 3, 4, 5}));
    p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, param);
Khalique's avatar
Khalique committed
463

Shucai Xiao's avatar
Shucai Xiao committed
464
    auto prog = optimize_onnx("expand_test.onnx");
Khalique's avatar
Khalique committed
465
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
466
467
}

Khalique's avatar
Khalique committed
468
TEST_CASE(flatten_test)
469
470
471
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
472
473
    p.add_instruction(migraphx::op::flatten{2}, l0);
    p.add_instruction(migraphx::op::flatten{1}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
474
    auto prog = optimize_onnx("flatten_test.onnx");
475
476
477
478

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
479
480
481
482
483
484
TEST_CASE(floor_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::floor{}, input);

Shucai Xiao's avatar
Shucai Xiao committed
485
    auto prog = optimize_onnx("floor_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
486
487
488
489

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
490
TEST_CASE(gather_test)
491
492
{
    migraphx::program p;
Khalique's avatar
Khalique committed
493
494
495
496
    auto l0  = p.add_parameter("data", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1  = p.add_parameter("indices", migraphx::shape{migraphx::shape::int32_type, {2, 3}});
    int axis = 1;
    p.add_instruction(migraphx::op::gather{axis}, l0, l1);
Shucai Xiao's avatar
Shucai Xiao committed
497
    auto prog = optimize_onnx("gather_test.onnx");
498
499
500
501

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
502
TEST_CASE(gemm_test)
503
504
{
    migraphx::program p;
505
506
507
    auto l0    = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {5, 7}});
    auto l1    = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {11, 5}});
    auto l2    = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type});
Khalique's avatar
Khalique committed
508
509
    auto t0    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l0);
    auto t1    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l1);
510
    auto bl2   = p.add_instruction(migraphx::op::multibroadcast{{7, 11}}, l2);
Khalique's avatar
Khalique committed
511
512
    auto alpha = 2.f;
    auto beta  = 2.0f;
513
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, t1, bl2);
Shucai Xiao's avatar
Shucai Xiao committed
514
    auto prog = optimize_onnx("gemm_test.onnx");
515
516
517
518

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
519
TEST_CASE(gemm_ex_test)
520
521
{
    migraphx::program p;
Khalique's avatar
Khalique committed
522
523
524
525
526
527
528
    auto l0    = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 6}});
    auto l1    = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 7}});
    auto l2    = p.add_parameter("3", migraphx::shape{migraphx::shape::float_type, {1, 1, 6, 7}});
    auto t0    = p.add_instruction(migraphx::op::transpose{{0, 1, 3, 2}}, l0);
    auto alpha = 0.5f;
    auto beta  = 0.8f;
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, l1, l2);
Shucai Xiao's avatar
Shucai Xiao committed
529
    auto prog = optimize_onnx("gemm_ex_test.onnx");
530
531
532
533

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
534
TEST_CASE(gemm_ex_brcst_test)
535
536
{
    migraphx::program p;
Khalique's avatar
Khalique committed
537
538
539
540
541
542
543
544
545
    auto l0 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 6}});
    auto l1 = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 7}});
    auto l2 = p.add_parameter("3", migraphx::shape{migraphx::shape::float_type, {1, 1, 6, 1}});
    auto t0 = p.add_instruction(migraphx::op::transpose{{0, 1, 3, 2}}, l0);
    std::vector<std::size_t> out_lens{1, 1, 6, 7};
    auto t2    = p.add_instruction(migraphx::op::multibroadcast{out_lens}, l2);
    auto alpha = 0.5f;
    auto beta  = 0.8f;
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, l1, t2);
Shucai Xiao's avatar
Shucai Xiao committed
546
    auto prog = optimize_onnx("gemm_ex_brcst_test.onnx");
547
548
549
550

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
551
TEST_CASE(globalavgpool_test)
552
553
{
    migraphx::program p;
Khalique's avatar
Khalique committed
554
555
556
557
558
559
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    auto op    = migraphx::op::pooling{"average"};
    auto lens  = input->get_shape().lens();
    op.lengths = {lens[2], lens[3]};
    p.add_instruction(op, input);

Shucai Xiao's avatar
Shucai Xiao committed
560
    auto prog = optimize_onnx("globalavgpool_test.onnx");
561
562
563
564

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
565
TEST_CASE(globalmaxpool_test)
Khalique's avatar
Khalique committed
566
567
{
    migraphx::program p;
Khalique's avatar
Khalique committed
568
569
570
571
572
573
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    auto op    = migraphx::op::pooling{"max"};
    auto lens  = input->get_shape().lens();
    op.lengths = {lens[2], lens[3]};
    p.add_instruction(op, input);

Shucai Xiao's avatar
Shucai Xiao committed
574
    auto prog = optimize_onnx("globalmaxpool_test.onnx");
Khalique's avatar
Khalique committed
575
576
577
578

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
579
TEST_CASE(group_conv_test)
580
581
{
    migraphx::program p;
Khalique's avatar
Khalique committed
582
583
584
585
586
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 4, 16, 16}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {4, 1, 3, 3}});
    migraphx::op::convolution op;
    op.group = 4;
    p.add_instruction(op, l0, l1);
Shucai Xiao's avatar
Shucai Xiao committed
587
    auto prog = optimize_onnx("group_conv_test.onnx");
588
589
590
591

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
592
TEST_CASE(imagescaler_test)
593
594
{
    migraphx::program p;
Khalique's avatar
Khalique committed
595
596
597
598
599
600
601
602
603
604
    migraphx::shape s{migraphx::shape::float_type, {1, 3, 16, 16}};
    auto l0        = p.add_parameter("0", s);
    auto scale_val = p.add_literal(0.5f);
    auto bias_vals = p.add_literal(
        migraphx::literal{migraphx::shape{migraphx::shape::float_type, {3}}, {0.01, 0.02, 0.03}});
    auto scaled_tensor = p.add_instruction(migraphx::op::scalar{s.lens()}, scale_val);
    auto img_scaled    = p.add_instruction(migraphx::op::mul{}, l0, scaled_tensor);
    auto bias_bcast    = p.add_instruction(migraphx::op::broadcast{1, s.lens()}, bias_vals);
    p.add_instruction(migraphx::op::add{}, img_scaled, bias_bcast);

Shucai Xiao's avatar
Shucai Xiao committed
605
    auto prog = optimize_onnx("imagescaler_test.onnx");
606
607
608
609

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
610
TEST_CASE(implicit_add_bcast_test)
611
612
{
    migraphx::program p;
Khalique's avatar
Khalique committed
613
614
615
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4, 1}});
    auto l3 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
616
    p.add_instruction(migraphx::op::add{}, l0, l3);
Khalique's avatar
Khalique committed
617

Shucai Xiao's avatar
Shucai Xiao committed
618
    auto prog = optimize_onnx("implicit_add_bcast_test.onnx");
619
620
621
622

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
623
TEST_CASE(implicit_pow_bcast_test)
624
625
{
    migraphx::program p;
Khalique's avatar
Khalique committed
626
627
628
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4, 1}});
    auto l3 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
629
    p.add_instruction(migraphx::op::pow{}, l0, l3);
Khalique's avatar
Khalique committed
630

Shucai Xiao's avatar
Shucai Xiao committed
631
    auto prog = optimize_onnx("implicit_pow_bcast_test.onnx");
632
633
634
635

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
636
TEST_CASE(implicit_sub_bcast_test)
637
638
639
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
640
641
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {4, 5}});
    auto l3 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
642
    p.add_instruction(migraphx::op::sub{}, l0, l3);
Khalique's avatar
Khalique committed
643

Shucai Xiao's avatar
Shucai Xiao committed
644
    auto prog = optimize_onnx("implicit_sub_bcast_test.onnx");
645
646
647
648

    EXPECT(p == prog);
}

649
650
651
652
653
654
655
656
TEST_CASE(initializer_not_an_input)
{
    migraphx::program p;
    std::vector<float> w = {1, 2, 3, 4, 5, 6, 7, 8};
    auto l1 = p.add_literal(migraphx::literal({migraphx::shape::float_type, {2, 4}}, w));
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {5, 2}});
    p.add_instruction(migraphx::op::dot{}, l0, l1);

Shucai Xiao's avatar
Shucai Xiao committed
657
    auto prog = optimize_onnx("initializer_not_an_input.onnx");
658
659
660
661

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
662
TEST_CASE(leaky_relu_test)
663
664
{
    migraphx::program p;
Khalique's avatar
Khalique committed
665
666
667
668
    float alpha = 0.01f;
    auto l0     = p.add_parameter("0", {migraphx::shape::float_type, {3}});
    p.add_instruction(migraphx::op::leaky_relu{alpha}, l0);

Shucai Xiao's avatar
Shucai Xiao committed
669
    auto prog = optimize_onnx("leaky_relu_test.onnx");
670
671
672
673

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
674
TEST_CASE(log_test)
675
676
{
    migraphx::program p;
Khalique's avatar
Khalique committed
677
678
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::log{}, input);
679

Shucai Xiao's avatar
Shucai Xiao committed
680
    auto prog = optimize_onnx("log_test.onnx");
681
682
683
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
684
TEST_CASE(logsoftmax_test)
685
686
{
    migraphx::program p;
Khalique's avatar
Khalique committed
687
688
689
    auto l0  = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    int axis = 1;
    p.add_instruction(migraphx::op::logsoftmax{axis}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
690
    auto prog = optimize_onnx("logsoftmax_test.onnx");
691
692
693
694

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
695
TEST_CASE(lrn_test)
696
697
{
    migraphx::program p;
Khalique's avatar
Khalique committed
698
699
700
701
702
703
704
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 28, 24, 24}});
    migraphx::op::lrn op;
    op.size  = 5;
    op.alpha = 0.0001;
    op.beta  = 0.75;
    op.bias  = 1.0;
    p.add_instruction(op, l0);
Shucai Xiao's avatar
Shucai Xiao committed
705
    auto prog = optimize_onnx("lrn_test.onnx");
706
707
708
709

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
710
TEST_CASE(matmul_bmbm_test)
711
712
{
    migraphx::program p;
Khalique's avatar
Khalique committed
713
714
715
716
717
718
    auto l0  = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 6, 7}});
    auto l1  = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {5, 2, 1, 7, 8}});
    auto bl0 = p.add_instruction(migraphx::op::multibroadcast{{5, 2, 3, 6, 7}}, l0);
    auto bl1 = p.add_instruction(migraphx::op::multibroadcast{{5, 2, 3, 7, 8}}, l1);
    p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, bl0, bl1);

Shucai Xiao's avatar
Shucai Xiao committed
719
    auto prog = optimize_onnx("matmul_bmbm_test.onnx");
720
721
722
723

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
724
TEST_CASE(matmul_bmv_test)
725
{
Khalique's avatar
Khalique committed
726
727
728
729
730
731
732
    migraphx::program p;
    auto l0   = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 6, 7}});
    auto l1   = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {7}});
    auto sl1  = p.add_instruction(migraphx::op::unsqueeze{{1}}, l1);
    auto bsl1 = p.add_instruction(migraphx::op::multibroadcast{{3, 7, 1}}, sl1);
    auto res  = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, l0, bsl1);
    p.add_instruction(migraphx::op::squeeze{{2}}, res);
733

Shucai Xiao's avatar
Shucai Xiao committed
734
    auto prog = optimize_onnx("matmul_bmv_test.onnx");
735

Khalique's avatar
Khalique committed
736
    EXPECT(p == prog);
737
738
}

Khalique's avatar
Khalique committed
739
TEST_CASE(matmul_mv_test)
740
741
{
    migraphx::program p;
Khalique's avatar
Khalique committed
742
743
744
745
746
747
    auto l0  = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {6, 7}});
    auto l1  = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {7}});
    auto sl1 = p.add_instruction(migraphx::op::unsqueeze{{1}}, l1);
    auto res = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, l0, sl1);
    p.add_instruction(migraphx::op::squeeze{{1}}, res);

Shucai Xiao's avatar
Shucai Xiao committed
748
    auto prog = optimize_onnx("matmul_mv_test.onnx");
749
750
751
752

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
753
TEST_CASE(matmul_vbm_test)
754
755
{
    migraphx::program p;
Khalique's avatar
Khalique committed
756
757
758
759
760
761
762
763
764
    auto l0   = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {7}});
    auto l1   = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {5, 7, 8}});
    auto sl0  = p.add_instruction(migraphx::op::unsqueeze{{0}}, l0);
    auto bsl0 = p.add_instruction(migraphx::op::multibroadcast{{5, 1, 7}}, sl0);
    std::cout << "ONNX_TEST" << std::endl;
    auto res = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, bsl0, l1);
    std::cout << "After Dot" << std::endl;
    p.add_instruction(migraphx::op::squeeze{{1}}, res);

Shucai Xiao's avatar
Shucai Xiao committed
765
    auto prog = optimize_onnx("matmul_vbm_test.onnx");
766
767
768
769

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
770
TEST_CASE(matmul_vm_test)
771
772
{
    migraphx::program p;
Khalique's avatar
Khalique committed
773
774
775
776
777
778
    auto l0  = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {7}});
    auto l1  = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {7, 8}});
    auto sl0 = p.add_instruction(migraphx::op::unsqueeze{{0}}, l0);
    auto res = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, sl0, l1);
    p.add_instruction(migraphx::op::squeeze{{0}}, res);

Shucai Xiao's avatar
Shucai Xiao committed
779
    auto prog = optimize_onnx("matmul_vm_test.onnx");
780
781
782
783

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
784
TEST_CASE(matmul_vv_test)
785
786
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
787
788
    auto l0  = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {7}});
    auto l1  = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {7}});
789
790
791
792
793
794
    auto sl0 = p.add_instruction(migraphx::op::unsqueeze{{0}}, l0);
    auto sl1 = p.add_instruction(migraphx::op::unsqueeze{{1}}, l1);
    auto res = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, sl0, sl1);
    auto sr0 = p.add_instruction(migraphx::op::squeeze{{0}}, res);
    p.add_instruction(migraphx::op::squeeze{{0}}, sr0);

Shucai Xiao's avatar
Shucai Xiao committed
795
    auto prog = optimize_onnx("matmul_vv_test.onnx");
796
797
798
799

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
800
TEST_CASE(max_test)
801
802
{
    migraphx::program p;
Khalique's avatar
Khalique committed
803
804
805
806
807
    auto input0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input2 = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {3}});
    auto l0     = p.add_instruction(migraphx::op::max{}, input0, input1);
    p.add_instruction(migraphx::op::max{}, l0, input2);
808

Shucai Xiao's avatar
Shucai Xiao committed
809
    optimize_onnx("max_test.onnx");
Khalique's avatar
Khalique committed
810
}
811

812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
TEST_CASE(maxpool_notset_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 5}});
    std::vector<int64_t> pads = {0, 0, 0, 0, 0, 0, 1, 1};
    float val                 = std::numeric_limits<float>::lowest();
    auto ins_pad              = p.add_instruction(migraphx::op::pad{pads, val}, input);
    p.add_instruction(migraphx::op::pooling{"max", {0, 0}, {2, 2}, {6, 6}}, ins_pad);

    auto prog = optimize_onnx("maxpool_notset_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(maxpool_same_upper_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 5}});
    std::vector<int64_t> pads = {0, 0, 0, 0, 0, 0, 1, 1};
    float val                 = std::numeric_limits<float>::lowest();
    auto ins_pad              = p.add_instruction(migraphx::op::pad{pads, val}, input);
    p.add_instruction(
        migraphx::op::pooling{"max", {0, 0}, {1, 1}, {2, 2}, migraphx::op::padding_mode_t::same},
        ins_pad);

    auto prog = optimize_onnx("maxpool_same_upper_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
842
843
844
845
846
847
848
849
850
TEST_CASE(min_test)
{
    migraphx::program p;
    auto input0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input2 = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {3}});
    auto l0     = p.add_instruction(migraphx::op::min{}, input0, input1);
    p.add_instruction(migraphx::op::min{}, l0, input2);

Shucai Xiao's avatar
Shucai Xiao committed
851
    optimize_onnx("min_test.onnx");
852
853
}

Khalique's avatar
Khalique committed
854
TEST_CASE(no_pad_test)
855
856
{
    migraphx::program p;
Khalique's avatar
Khalique committed
857
858
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 2}});
    p.add_instruction(migraphx::op::identity{}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
859
    auto prog = optimize_onnx("no_pad_test.onnx");
860

Khalique's avatar
Khalique committed
861
862
863
864
865
866
867
868
    EXPECT(p == prog);
}

TEST_CASE(pad_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 2}});
    p.add_instruction(migraphx::op::pad{{1, 1, 1, 1}}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
869
    auto prog = optimize_onnx("pad_test.onnx");
870
871
872
873

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
874
TEST_CASE(pow_test)
875
876
{
    migraphx::program p;
Khalique's avatar
Khalique committed
877
878
879
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    p.add_instruction(migraphx::op::pow{}, l0, l1);
880

Shucai Xiao's avatar
Shucai Xiao committed
881
    auto prog = optimize_onnx("pow_test.onnx");
882
883
884
885

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
TEST_CASE(reducel1_test)
{
    migraphx::program p;
    auto l0     = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto abs_l0 = p.add_instruction(migraphx::op::abs{}, l0);
    auto sum_l0 = p.add_instruction(migraphx::op::reduce_sum{{-2}}, abs_l0);
    p.add_instruction(migraphx::op::squeeze{{-2}}, sum_l0);
    auto prog = optimize_onnx("reducel1_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(reducel2_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto square_l0 = p.add_instruction(migraphx::op::mul{}, l0, l0);
    auto sum_l0    = p.add_instruction(migraphx::op::reduce_sum{{-1}}, square_l0);
    auto squ_l0    = p.add_instruction(migraphx::op::squeeze{{-1}}, sum_l0);
    p.add_instruction(migraphx::op::sqrt{}, squ_l0);
    auto prog = optimize_onnx("reducel2_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(reduce_log_sum_test)
{
    migraphx::program p;
    auto l0     = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto sum_l0 = p.add_instruction(migraphx::op::reduce_sum{{-3}}, l0);
    p.add_instruction(migraphx::op::log{}, sum_l0);
    auto prog = optimize_onnx("reduce_log_sum_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(reduce_log_sum_exp_test)
{
    migraphx::program p;
    auto l0     = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto exp_l0 = p.add_instruction(migraphx::op::exp{}, l0);
    auto sum_l0 = p.add_instruction(migraphx::op::reduce_sum{{-4}}, exp_l0);
    p.add_instruction(migraphx::op::log{}, sum_l0);
    auto prog = optimize_onnx("reduce_log_sum_exp_test.onnx");

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
934
935
936
937
938
TEST_CASE(reducemax_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    p.add_instruction(migraphx::op::reduce_max{{2}}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
939
    auto prog = optimize_onnx("reducemax_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
940
941
942
943

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
944
TEST_CASE(reducemean_test)
945
946
{
    migraphx::program p;
Khalique's avatar
Khalique committed
947
948
949
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_mean{{2, 3}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2, 3}}, l1);
Shucai Xiao's avatar
Shucai Xiao committed
950
    auto prog = optimize_onnx("reducemean_test.onnx");
951
952
953
954

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
955
TEST_CASE(reducemean_keepdims_test)
956
957
{
    migraphx::program p;
Khalique's avatar
Khalique committed
958
959
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    p.add_instruction(migraphx::op::reduce_mean{{2}}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
960
    auto prog = optimize_onnx("reducemean_keepdims_test.onnx");
961
962
963
964

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
965
966
967
968
969
970
TEST_CASE(reducemin_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_min{{2, 3}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2, 3}}, l1);
Shucai Xiao's avatar
Shucai Xiao committed
971
    auto prog = optimize_onnx("reducemin_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
972
973
974
975

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
976
977
978
979
980
981
982
983
984
985
TEST_CASE(reduceprod_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    p.add_instruction(migraphx::op::reduce_prod{{2}}, l0);
    auto prog = optimize_onnx("reduceprod_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
986
TEST_CASE(reducesum_test)
Khalique's avatar
Khalique committed
987
988
{
    migraphx::program p;
Khalique's avatar
Khalique committed
989
990
991
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_sum{{2}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2}}, l1);
Shucai Xiao's avatar
Shucai Xiao committed
992
    auto prog = optimize_onnx("reducesum_test.onnx");
993
994

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
995
996
}

Khalique's avatar
Khalique committed
997
TEST_CASE(reducesum_multiaxis_test)
Khalique's avatar
Khalique committed
998
999
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1000
1001
1002
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_sum{{2, 3}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2, 3}}, l1);
Shucai Xiao's avatar
Shucai Xiao committed
1003
    auto prog = optimize_onnx("reducesum_multiaxis_test.onnx");
1004
1005

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
1006
1007
}

Khalique's avatar
Khalique committed
1008
TEST_CASE(reducesum_keepdims_test)
Khalique's avatar
Khalique committed
1009
1010
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1011
1012
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    p.add_instruction(migraphx::op::reduce_sum{{2, 3}}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
1013
    auto prog = optimize_onnx("reducesum_keepdims_test.onnx");
1014
1015
1016
1017

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
TEST_CASE(reducesum_square_test)
{
    migraphx::program p;
    auto l0     = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto squ_l0 = p.add_instruction(migraphx::op::mul{}, l0, l0);
    auto sum_l0 = p.add_instruction(migraphx::op::reduce_sum{{-2}}, squ_l0);
    p.add_instruction(migraphx::op::squeeze{{-2}}, sum_l0);
    auto prog = optimize_onnx("reducesum_square_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1030
TEST_CASE(reshape_test)
1031
{
Khalique's avatar
Khalique committed
1032
    migraphx::program p;
Khalique's avatar
Khalique committed
1033
1034
1035
1036
    migraphx::op::reshape op;
    std::vector<int64_t> reshape_dims{3, 8};
    p.add_literal(
        migraphx::literal{migraphx::shape{migraphx::shape::int64_type, {2}}, reshape_dims});
1037
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {4, 2, 3}});
Khalique's avatar
Khalique committed
1038
1039
1040
    op.dims = reshape_dims;
    p.add_instruction(op, l0);
    p.add_instruction(op, l0);
Shucai Xiao's avatar
Shucai Xiao committed
1041
    auto prog = optimize_onnx("reshape_test.onnx");
1042
1043

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
1044
1045
}

Khalique's avatar
Khalique committed
1046
TEST_CASE(reshape_non_standard_test)
1047
1048
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1049
1050
1051
1052
1053
1054
1055
    migraphx::op::reshape op;
    std::vector<int64_t> reshape_dims{4, 3, 2};
    migraphx::shape s{migraphx::shape::float_type, {2, 3, 4}};
    auto x      = p.add_parameter("x", s);
    auto tran_x = p.add_instruction(migraphx::op::transpose{{0, 2, 1}}, x);
    auto cont_x = p.add_instruction(migraphx::op::contiguous{}, tran_x);
    p.add_instruction(migraphx::op::reshape{{4, 3, 2}}, cont_x);
Shucai Xiao's avatar
Shucai Xiao committed
1056
    auto prog = optimize_onnx("reshape_non_standard_test.onnx");
1057
1058
1059
1060

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1061
1062
1063
1064
1065
1066
TEST_CASE(round_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::double_type, {10, 5}});
    p.add_instruction(migraphx::op::round{}, input);

Shucai Xiao's avatar
Shucai Xiao committed
1067
    auto prog = optimize_onnx("round_test.onnx");
Khalique's avatar
Khalique committed
1068
1069
1070
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1071
TEST_CASE(shape_test)
1072
1073
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1074
1075
1076
1077
    migraphx::shape s{migraphx::shape::float_type, {3, 4, 5, 6}};
    auto l0 = p.add_parameter("x", s);
    migraphx::shape s_shape{migraphx::shape::int64_type, {4}};
    p.add_literal(s_shape, l0->get_shape().lens());
Shucai Xiao's avatar
Shucai Xiao committed
1078
    auto prog = optimize_onnx("shape_test.onnx");
1079
1080
1081
1082

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1083
TEST_CASE(shape_gather_test)
1084
1085
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1086
1087
1088
1089
1090
1091
1092
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {7, 3, 10}});
    auto l1 =
        p.add_literal(migraphx::shape{migraphx::shape::int64_type, {3}}, l0->get_shape().lens());
    migraphx::shape const_shape{migraphx::shape::int32_type, {1}};
    auto l2  = p.add_literal(migraphx::literal{const_shape, {1}});
    int axis = 0;
    p.add_instruction(migraphx::op::gather{axis}, l1, l2);
Shucai Xiao's avatar
Shucai Xiao committed
1093
    auto prog = optimize_onnx("shape_gather_test.onnx");
1094
1095
1096
1097

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1098
TEST_CASE(sign_test)
Khalique's avatar
Khalique committed
1099
1100
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1101
1102
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::double_type, {10, 5}});
    p.add_instruction(migraphx::op::sign{}, input);
Khalique's avatar
Khalique committed
1103

Shucai Xiao's avatar
Shucai Xiao committed
1104
    auto prog = optimize_onnx("sign_test.onnx");
Khalique's avatar
Khalique committed
1105
1106
1107
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1108
TEST_CASE(sin_test)
1109
1110
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1111
1112
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::sin{}, input);
1113

Shucai Xiao's avatar
Shucai Xiao committed
1114
    auto prog = optimize_onnx("sin_test.onnx");
1115
1116
1117
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1118
TEST_CASE(sinh_test)
1119
1120
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1121
1122
1123
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::sinh{}, input);

Shucai Xiao's avatar
Shucai Xiao committed
1124
    auto prog = optimize_onnx("sinh_test.onnx");
1125
1126
1127
1128

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1129
TEST_CASE(slice_test)
1130
1131
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1132
1133
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3, 2}});
    p.add_instruction(migraphx::op::slice{{0, 1}, {1, 0}, {2, 2}}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
1134
    auto prog = optimize_onnx("slice_test.onnx");
1135
1136
1137
1138

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1139
TEST_CASE(softmax_test)
Shucai Xiao's avatar
Shucai Xiao committed
1140
1141
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1142
1143
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3}});
    p.add_instruction(migraphx::op::softmax{1}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
1144
    auto prog = optimize_onnx("softmax_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1145
1146
1147
1148

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1149
TEST_CASE(sqrt_test)
Shucai Xiao's avatar
Shucai Xiao committed
1150
1151
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1152
1153
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10, 15}});
    p.add_instruction(migraphx::op::sqrt{}, input);
Shucai Xiao's avatar
Shucai Xiao committed
1154

Shucai Xiao's avatar
Shucai Xiao committed
1155
    auto prog = optimize_onnx("sqrt_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1156
1157
1158
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1159
TEST_CASE(squeeze_unsqueeze_test)
Khalique's avatar
Khalique committed
1160
1161
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1162
1163
1164
1165
1166
1167
    std::vector<int64_t> squeeze_axes{0, 2, 3, 5};
    std::vector<int64_t> unsqueeze_axes{0, 1, 3, 5};
    auto l0 =
        p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 1, 1, 2, 1}});
    auto l1 = p.add_instruction(migraphx::op::squeeze{squeeze_axes}, l0);
    p.add_instruction(migraphx::op::unsqueeze{unsqueeze_axes}, l1);
Shucai Xiao's avatar
Shucai Xiao committed
1168
    auto prog = optimize_onnx("squeeze_unsqueeze_test.onnx");
Khalique's avatar
Khalique committed
1169
1170
1171
1172

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1173
TEST_CASE(sub_bcast_test)
Shucai Xiao's avatar
Shucai Xiao committed
1174
1175
1176
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
1177
1178
1179
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4}});
    auto l2 = p.add_instruction(migraphx::op::broadcast{1, l0->get_shape().lens()}, l1);
    p.add_instruction(migraphx::op::sub{}, l0, l2);
Shucai Xiao's avatar
Shucai Xiao committed
1180

Shucai Xiao's avatar
Shucai Xiao committed
1181
    auto prog = optimize_onnx("sub_bcast_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1182
1183
1184
1185

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1186
TEST_CASE(sub_scalar_test)
Shucai Xiao's avatar
Shucai Xiao committed
1187
1188
1189
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
1190
1191
1192
    auto l1 =
        p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type, {1}}, {1}});
    auto m1 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
1193
    p.add_instruction(migraphx::op::sub{}, l0, m1);
Shucai Xiao's avatar
Shucai Xiao committed
1194
    auto prog = optimize_onnx("sub_scalar_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1195
1196
1197
1198

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1199
TEST_CASE(sum_test)
1200
1201
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1202
1203
1204
1205
1206
    auto input0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input2 = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {3}});
    auto l0     = p.add_instruction(migraphx::op::add{}, input0, input1);
    p.add_instruction(migraphx::op::add{}, l0, input2);
1207

Shucai Xiao's avatar
Shucai Xiao committed
1208
    auto prog = optimize_onnx("sum_test.onnx");
1209
1210
1211
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1212
TEST_CASE(tan_test)
1213
1214
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1215
1216
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::tan{}, input);
1217

Shucai Xiao's avatar
Shucai Xiao committed
1218
    auto prog = optimize_onnx("tan_test.onnx");
1219
1220
1221
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1222
TEST_CASE(tanh_test)
1223
1224
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1225
1226
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::tanh{}, input);
1227

Shucai Xiao's avatar
Shucai Xiao committed
1228
    auto prog = optimize_onnx("tanh_test.onnx");
1229
1230
1231
1232

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1233
TEST_CASE(transpose_test)
1234
1235
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1236
1237
1238
1239
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 2, 2, 3}});
    std::vector<int64_t> perm{0, 3, 1, 2};
    p.add_instruction(migraphx::op::transpose{perm}, input);

Shucai Xiao's avatar
Shucai Xiao committed
1240
    auto prog = optimize_onnx("transpose_test.onnx");
1241
1242
1243
1244

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1245
TEST_CASE(transpose_gather_test)
1246
1247
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
    auto make_contiguous = [&p](migraphx::instruction_ref ins) {
        if(ins->get_shape().standard())
        {
            return ins;
        }

        return p.add_instruction(migraphx::op::contiguous{}, ins);
    };

    auto data = p.add_parameter("data", migraphx::shape{migraphx::shape::float_type, {3, 5, 4, 6}});
    auto ind =
        p.add_parameter("indices", migraphx::shape{migraphx::shape::int32_type, {2, 4, 3, 5}});
    auto tr_data = p.add_instruction(migraphx::op::transpose{{0, 2, 1, 3}}, data);
    auto tr_ind  = p.add_instruction(migraphx::op::transpose{{0, 2, 1, 3}}, ind);
    int axis     = 1;
    p.add_instruction(
        migraphx::op::gather{axis}, make_contiguous(tr_data), make_contiguous(tr_ind));

Shucai Xiao's avatar
Shucai Xiao committed
1266
    auto prog = optimize_onnx("transpose_gather_test.onnx");
1267
1268
1269
1270

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1271
TEST_CASE(unknown_test)
1272
1273
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1274
1275
1276
1277
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4}});
    auto l2 = p.add_instruction(migraphx::op::unknown{"Unknown"}, l0, l1);
    p.add_instruction(migraphx::op::unknown{"Unknown"}, l2);
Shucai Xiao's avatar
Shucai Xiao committed
1278
    auto prog = optimize_onnx("unknown_test.onnx");
1279
1280
1281
1282

    EXPECT(p == prog);
}

1283
1284
1285
1286
1287
TEST_CASE(variable_batch_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    p.add_instruction(migraphx::op::identity{}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
1288
    auto prog = optimize_onnx("variable_batch_test.onnx");
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298

    EXPECT(p == prog);
}

TEST_CASE(variable_batch_leq_zero_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    p.add_instruction(migraphx::op::add{}, l0, l1);
Shucai Xiao's avatar
Shucai Xiao committed
1299
    auto prog = optimize_onnx("variable_batch_leq_zero_test.onnx");
1300
1301
1302
1303

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1304
int main(int argc, const char* argv[]) { test::run(argc, argv); }