onnx_test.cpp 37.9 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);
}

Khalique's avatar
Khalique committed
123
TEST_CASE(cast_test)
Khalique's avatar
Khalique committed
124
{
Paul's avatar
Paul committed
125
    migraphx::program p;
Khalique's avatar
Khalique committed
126
127
    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
128

Shucai Xiao's avatar
Shucai Xiao committed
129
    auto prog = optimize_onnx("cast_test.onnx");
Khalique's avatar
Khalique committed
130
131
132
    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
133
134
135
136
137
138
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
139
    auto prog = optimize_onnx("ceil_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
140
141
142
143

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
144
TEST_CASE(clip_test)
Khalique's avatar
Khalique committed
145
146
{
    migraphx::program p;
Khalique's avatar
Khalique committed
147
148
    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
149
    auto prog = optimize_onnx("clip_test.onnx");
Khalique's avatar
Khalique committed
150

151
152
153
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
154
TEST_CASE(concat_test)
Shucai Xiao's avatar
Shucai Xiao committed
155
156
{
    migraphx::program p;
Khalique's avatar
Khalique committed
157
158
159
    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
160
    auto prog = optimize_onnx("concat_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
161
162
163
164

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
165
TEST_CASE(constant_test)
Shucai Xiao's avatar
Shucai Xiao committed
166
167
{
    migraphx::program p;
Khalique's avatar
Khalique committed
168
    p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type, {3}}, {0, 1, 2}});
Shucai Xiao's avatar
Shucai Xiao committed
169
    auto prog = optimize_onnx("constant_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
170
171
172
173

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
174
TEST_CASE(constant_fill_test)
Shucai Xiao's avatar
Shucai Xiao committed
175
{
Khalique's avatar
Khalique committed
176
177
178
179
180

    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
181
    auto prog = optimize_onnx("constant_fill_test.onnx");
Khalique's avatar
Khalique committed
182
183
184
185
186
187
188
189
190
191
192
193
194
195

    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
196
    auto prog = optimize_onnx("constant_fill_input_as_shape_test.onnx");
Khalique's avatar
Khalique committed
197
198

    EXPECT(p == prog);
Shucai Xiao's avatar
Shucai Xiao committed
199
200
}

Khalique's avatar
Khalique committed
201
TEST_CASE(constant_scalar_test)
202
203
{
    migraphx::program p;
Khalique's avatar
Khalique committed
204
    p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::int32_type, {1}}, {1}});
Shucai Xiao's avatar
Shucai Xiao committed
205
    auto prog = optimize_onnx("constant_scalar_test.onnx");
206
207
208
209

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
210
TEST_CASE(const_of_shape_empty_input_test)
Shucai Xiao's avatar
Shucai Xiao committed
211
212
{
    migraphx::program p;
Khalique's avatar
Khalique committed
213
214
215
216
    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
217

Shucai Xiao's avatar
Shucai Xiao committed
218
    auto prog = optimize_onnx("const_of_shape_empty_input_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
219
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
220
221
}

Khalique's avatar
Khalique committed
222
TEST_CASE(const_of_shape_float_test)
223
224
{
    migraphx::program p;
Khalique's avatar
Khalique committed
225
226
227
228
229
    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));
230

Shucai Xiao's avatar
Shucai Xiao committed
231
    auto prog = optimize_onnx("const_of_shape_float_test.onnx");
232
233
234
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
235
TEST_CASE(const_of_shape_int64_test)
236
237
{
    migraphx::program p;
Khalique's avatar
Khalique committed
238
239
240
241
242
    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));
243

Shucai Xiao's avatar
Shucai Xiao committed
244
    auto prog = optimize_onnx("const_of_shape_int64_test.onnx");
245
246
247
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
248
TEST_CASE(const_of_shape_no_value_attr_test)
249
250
{
    migraphx::program p;
Khalique's avatar
Khalique committed
251
252
253
254
255
    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));
256

Shucai Xiao's avatar
Shucai Xiao committed
257
    auto prog = optimize_onnx("const_of_shape_no_value_attr_test.onnx");
258
259
260
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
261
TEST_CASE(conv_autopad_fail_test)
262
{
Shucai Xiao's avatar
Shucai Xiao committed
263
    EXPECT(test::throws([&] { optimize_onnx("conv_autopad_fail_test.onnx"); }));
Khalique's avatar
Khalique committed
264
}
265

Khalique's avatar
Khalique committed
266
267
268
269
270
271
272
273
274
275
276
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
277
    auto prog = optimize_onnx("conv_bias_test.onnx");
Khalique's avatar
Khalique committed
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
    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
300
    auto prog = optimize_onnx("conv_bn_relu_maxpool_test.onnx");
Khalique's avatar
Khalique committed
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
    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
317
    auto prog = optimize_onnx("conv_relu_maxpool_test.onnx");
Khalique's avatar
Khalique committed
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
    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
342
    auto prog = optimize_onnx("conv_relu_maxpool_x2_test.onnx");
Khalique's avatar
Khalique committed
343
344
345
346

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
347
TEST_CASE(cos_test)
348
349
350
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
Khalique's avatar
Khalique committed
351
    p.add_instruction(migraphx::op::cos{}, input);
352

Shucai Xiao's avatar
Shucai Xiao committed
353
    auto prog = optimize_onnx("cos_test.onnx");
354
355
356
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
357
TEST_CASE(cosh_test)
358
359
360
361
362
{
    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
363
    auto prog = optimize_onnx("cosh_test.onnx");
364
365
366
367

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
368
TEST_CASE(dropout_test)
Shucai Xiao's avatar
Shucai Xiao committed
369
370
{
    migraphx::program p;
Khalique's avatar
Khalique committed
371
372
    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
373

Shucai Xiao's avatar
Shucai Xiao committed
374
    auto prog = optimize_onnx("dropout_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
375
376
377
378

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
379
380
381
382
383
384
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
385
    auto prog = optimize_onnx("elu_test.onnx");
Khalique's avatar
Khalique committed
386
387
388
389

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
390
TEST_CASE(erf_test)
391
392
{
    migraphx::program p;
Khalique's avatar
Khalique committed
393
394
    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
395

Shucai Xiao's avatar
Shucai Xiao committed
396
    auto prog = optimize_onnx("erf_test.onnx");
Khalique's avatar
Khalique committed
397
398
399
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
400
TEST_CASE(exp_test)
401
402
403
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
Khalique's avatar
Khalique committed
404
    p.add_instruction(migraphx::op::exp{}, input);
Khalique's avatar
Khalique committed
405

Shucai Xiao's avatar
Shucai Xiao committed
406
    auto prog = optimize_onnx("exp_test.onnx");
Khalique's avatar
Khalique committed
407
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
408
409
}

Khalique's avatar
Khalique committed
410
TEST_CASE(expand_test)
411
412
{
    migraphx::program p;
Khalique's avatar
Khalique committed
413
414
415
416
417
    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
418

Shucai Xiao's avatar
Shucai Xiao committed
419
    auto prog = optimize_onnx("expand_test.onnx");
Khalique's avatar
Khalique committed
420
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
421
422
}

Khalique's avatar
Khalique committed
423
TEST_CASE(flatten_test)
424
425
426
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
427
428
    p.add_instruction(migraphx::op::flatten{2}, l0);
    p.add_instruction(migraphx::op::flatten{1}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
429
    auto prog = optimize_onnx("flatten_test.onnx");
430
431
432
433

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
434
435
436
437
438
439
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
440
    auto prog = optimize_onnx("floor_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
441
442
443
444

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
445
TEST_CASE(gather_test)
446
447
{
    migraphx::program p;
Khalique's avatar
Khalique committed
448
449
450
451
    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
452
    auto prog = optimize_onnx("gather_test.onnx");
453
454
455
456

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
457
TEST_CASE(gemm_test)
458
459
{
    migraphx::program p;
460
461
462
    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
463
464
    auto t0    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l0);
    auto t1    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l1);
465
    auto bl2   = p.add_instruction(migraphx::op::multibroadcast{{7, 11}}, l2);
Khalique's avatar
Khalique committed
466
467
    auto alpha = 2.f;
    auto beta  = 2.0f;
468
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, t1, bl2);
Shucai Xiao's avatar
Shucai Xiao committed
469
    auto prog = optimize_onnx("gemm_test.onnx");
470
471
472
473

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
474
TEST_CASE(gemm_ex_test)
475
476
{
    migraphx::program p;
Khalique's avatar
Khalique committed
477
478
479
480
481
482
483
    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
484
    auto prog = optimize_onnx("gemm_ex_test.onnx");
485
486
487
488

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
489
TEST_CASE(gemm_ex_brcst_test)
490
491
{
    migraphx::program p;
Khalique's avatar
Khalique committed
492
493
494
495
496
497
498
499
500
    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
501
    auto prog = optimize_onnx("gemm_ex_brcst_test.onnx");
502
503
504
505

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
506
TEST_CASE(globalavgpool_test)
507
508
{
    migraphx::program p;
Khalique's avatar
Khalique committed
509
510
511
512
513
514
    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
515
    auto prog = optimize_onnx("globalavgpool_test.onnx");
516
517
518
519

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
520
TEST_CASE(globalmaxpool_test)
Khalique's avatar
Khalique committed
521
522
{
    migraphx::program p;
Khalique's avatar
Khalique committed
523
524
525
526
527
528
    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
529
    auto prog = optimize_onnx("globalmaxpool_test.onnx");
Khalique's avatar
Khalique committed
530
531
532
533

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
534
TEST_CASE(group_conv_test)
535
536
{
    migraphx::program p;
Khalique's avatar
Khalique committed
537
538
539
540
541
    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
542
    auto prog = optimize_onnx("group_conv_test.onnx");
543
544
545
546

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
547
TEST_CASE(imagescaler_test)
548
549
{
    migraphx::program p;
Khalique's avatar
Khalique committed
550
551
552
553
554
555
556
557
558
559
    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
560
    auto prog = optimize_onnx("imagescaler_test.onnx");
561
562
563
564

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
565
TEST_CASE(implicit_add_bcast_test)
566
567
{
    migraphx::program p;
Khalique's avatar
Khalique committed
568
569
570
    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);
571
    p.add_instruction(migraphx::op::add{}, l0, l3);
Khalique's avatar
Khalique committed
572

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
578
TEST_CASE(implicit_pow_bcast_test)
579
580
{
    migraphx::program p;
Khalique's avatar
Khalique committed
581
582
583
    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);
584
    p.add_instruction(migraphx::op::pow{}, l0, l3);
Khalique's avatar
Khalique committed
585

Shucai Xiao's avatar
Shucai Xiao committed
586
    auto prog = optimize_onnx("implicit_pow_bcast_test.onnx");
587
588
589
590

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
591
TEST_CASE(implicit_sub_bcast_test)
592
593
594
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
595
596
    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);
597
    p.add_instruction(migraphx::op::sub{}, l0, l3);
Khalique's avatar
Khalique committed
598

Shucai Xiao's avatar
Shucai Xiao committed
599
    auto prog = optimize_onnx("implicit_sub_bcast_test.onnx");
600
601
602
603

    EXPECT(p == prog);
}

604
605
606
607
608
609
610
611
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
612
    auto prog = optimize_onnx("initializer_not_an_input.onnx");
613
614
615
616

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
617
TEST_CASE(leaky_relu_test)
618
619
{
    migraphx::program p;
Khalique's avatar
Khalique committed
620
621
622
623
    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
624
    auto prog = optimize_onnx("leaky_relu_test.onnx");
625
626
627
628

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
629
TEST_CASE(log_test)
630
631
{
    migraphx::program p;
Khalique's avatar
Khalique committed
632
633
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::log{}, input);
634

Shucai Xiao's avatar
Shucai Xiao committed
635
    auto prog = optimize_onnx("log_test.onnx");
636
637
638
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
639
TEST_CASE(logsoftmax_test)
640
641
{
    migraphx::program p;
Khalique's avatar
Khalique committed
642
643
644
    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
645
    auto prog = optimize_onnx("logsoftmax_test.onnx");
646
647
648
649

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
650
TEST_CASE(lrn_test)
651
652
{
    migraphx::program p;
Khalique's avatar
Khalique committed
653
654
655
656
657
658
659
    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
660
    auto prog = optimize_onnx("lrn_test.onnx");
661
662
663
664

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
665
TEST_CASE(matmul_bmbm_test)
666
667
{
    migraphx::program p;
Khalique's avatar
Khalique committed
668
669
670
671
672
673
    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
674
    auto prog = optimize_onnx("matmul_bmbm_test.onnx");
675
676
677
678

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
679
TEST_CASE(matmul_bmv_test)
680
{
Khalique's avatar
Khalique committed
681
682
683
684
685
686
687
    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);
688

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

Khalique's avatar
Khalique committed
691
    EXPECT(p == prog);
692
693
}

Khalique's avatar
Khalique committed
694
TEST_CASE(matmul_mv_test)
695
696
{
    migraphx::program p;
Khalique's avatar
Khalique committed
697
698
699
700
701
702
    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
703
    auto prog = optimize_onnx("matmul_mv_test.onnx");
704
705
706
707

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
708
TEST_CASE(matmul_vbm_test)
709
710
{
    migraphx::program p;
Khalique's avatar
Khalique committed
711
712
713
714
715
716
717
718
719
    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
720
    auto prog = optimize_onnx("matmul_vbm_test.onnx");
721
722
723
724

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
725
TEST_CASE(matmul_vm_test)
726
727
{
    migraphx::program p;
Khalique's avatar
Khalique committed
728
729
730
731
732
733
    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
734
    auto prog = optimize_onnx("matmul_vm_test.onnx");
735
736
737
738

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
739
TEST_CASE(matmul_vv_test)
740
741
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
742
743
    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}});
744
745
746
747
748
749
    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
750
    auto prog = optimize_onnx("matmul_vv_test.onnx");
751
752
753
754

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
755
TEST_CASE(max_test)
756
757
{
    migraphx::program p;
Khalique's avatar
Khalique committed
758
759
760
761
762
    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);
763

Shucai Xiao's avatar
Shucai Xiao committed
764
    optimize_onnx("max_test.onnx");
Khalique's avatar
Khalique committed
765
}
766

Khalique's avatar
Khalique committed
767
768
769
770
771
772
773
774
775
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
776
    optimize_onnx("min_test.onnx");
777
778
}

Khalique's avatar
Khalique committed
779
TEST_CASE(no_pad_test)
780
781
{
    migraphx::program p;
Khalique's avatar
Khalique committed
782
783
    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
784
    auto prog = optimize_onnx("no_pad_test.onnx");
785

Khalique's avatar
Khalique committed
786
787
788
789
790
791
792
793
    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
794
    auto prog = optimize_onnx("pad_test.onnx");
795
796
797
798

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
799
TEST_CASE(pow_test)
800
801
{
    migraphx::program p;
Khalique's avatar
Khalique committed
802
803
804
    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);
805

Shucai Xiao's avatar
Shucai Xiao committed
806
    auto prog = optimize_onnx("pow_test.onnx");
807
808
809
810

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
811
812
813
814
815
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
816
    auto prog = optimize_onnx("reducemax_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
817
818
819
820

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
821
TEST_CASE(reducemean_test)
822
823
{
    migraphx::program p;
Khalique's avatar
Khalique committed
824
825
826
    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
827
    auto prog = optimize_onnx("reducemean_test.onnx");
828
829
830
831

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
832
TEST_CASE(reducemean_keepdims_test)
833
834
{
    migraphx::program p;
Khalique's avatar
Khalique committed
835
836
    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
837
    auto prog = optimize_onnx("reducemean_keepdims_test.onnx");
838
839
840
841

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
842
843
844
845
846
847
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
848
    auto prog = optimize_onnx("reducemin_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
849
850
851
852

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
853
TEST_CASE(reducesum_test)
Khalique's avatar
Khalique committed
854
855
{
    migraphx::program p;
Khalique's avatar
Khalique committed
856
857
858
    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
859
    auto prog = optimize_onnx("reducesum_test.onnx");
860
861

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
862
863
}

Khalique's avatar
Khalique committed
864
TEST_CASE(reducesum_multiaxis_test)
Khalique's avatar
Khalique committed
865
866
{
    migraphx::program p;
Khalique's avatar
Khalique committed
867
868
869
    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
870
    auto prog = optimize_onnx("reducesum_multiaxis_test.onnx");
871
872

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
873
874
}

Khalique's avatar
Khalique committed
875
TEST_CASE(reducesum_keepdims_test)
Khalique's avatar
Khalique committed
876
877
{
    migraphx::program p;
Khalique's avatar
Khalique committed
878
879
    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
880
    auto prog = optimize_onnx("reducesum_keepdims_test.onnx");
881
882
883
884

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
885
TEST_CASE(reshape_test)
886
{
Khalique's avatar
Khalique committed
887
    migraphx::program p;
Khalique's avatar
Khalique committed
888
889
890
891
    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});
892
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {4, 2, 3}});
Khalique's avatar
Khalique committed
893
894
895
    op.dims = reshape_dims;
    p.add_instruction(op, l0);
    p.add_instruction(op, l0);
Shucai Xiao's avatar
Shucai Xiao committed
896
    auto prog = optimize_onnx("reshape_test.onnx");
897
898

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
899
900
}

Khalique's avatar
Khalique committed
901
TEST_CASE(reshape_non_standard_test)
902
903
{
    migraphx::program p;
Khalique's avatar
Khalique committed
904
905
906
907
908
909
910
    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
911
    auto prog = optimize_onnx("reshape_non_standard_test.onnx");
912
913
914
915

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
916
917
918
919
920
921
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
922
    auto prog = optimize_onnx("round_test.onnx");
Khalique's avatar
Khalique committed
923
924
925
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
926
TEST_CASE(shape_test)
927
928
{
    migraphx::program p;
Khalique's avatar
Khalique committed
929
930
931
932
    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
933
    auto prog = optimize_onnx("shape_test.onnx");
934
935
936
937

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
938
TEST_CASE(shape_gather_test)
939
940
{
    migraphx::program p;
Khalique's avatar
Khalique committed
941
942
943
944
945
946
947
    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
948
    auto prog = optimize_onnx("shape_gather_test.onnx");
949
950
951
952

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
953
TEST_CASE(sign_test)
Khalique's avatar
Khalique committed
954
955
{
    migraphx::program p;
Khalique's avatar
Khalique committed
956
957
    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
958

Shucai Xiao's avatar
Shucai Xiao committed
959
    auto prog = optimize_onnx("sign_test.onnx");
Khalique's avatar
Khalique committed
960
961
962
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
963
TEST_CASE(sin_test)
964
965
{
    migraphx::program p;
Khalique's avatar
Khalique committed
966
967
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::sin{}, input);
968

Shucai Xiao's avatar
Shucai Xiao committed
969
    auto prog = optimize_onnx("sin_test.onnx");
970
971
972
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
973
TEST_CASE(sinh_test)
974
975
{
    migraphx::program p;
Khalique's avatar
Khalique committed
976
977
978
    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
979
    auto prog = optimize_onnx("sinh_test.onnx");
980
981
982
983

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
984
TEST_CASE(slice_test)
985
986
{
    migraphx::program p;
Khalique's avatar
Khalique committed
987
988
    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
989
    auto prog = optimize_onnx("slice_test.onnx");
990
991
992
993

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
994
TEST_CASE(softmax_test)
Shucai Xiao's avatar
Shucai Xiao committed
995
996
{
    migraphx::program p;
Khalique's avatar
Khalique committed
997
998
    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
999
    auto prog = optimize_onnx("softmax_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1000
1001
1002
1003

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1004
TEST_CASE(sqrt_test)
Shucai Xiao's avatar
Shucai Xiao committed
1005
1006
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1007
1008
    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
1009

Shucai Xiao's avatar
Shucai Xiao committed
1010
    auto prog = optimize_onnx("sqrt_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1011
1012
1013
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1014
TEST_CASE(squeeze_unsqueeze_test)
Khalique's avatar
Khalique committed
1015
1016
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1017
1018
1019
1020
1021
1022
    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
1023
    auto prog = optimize_onnx("squeeze_unsqueeze_test.onnx");
Khalique's avatar
Khalique committed
1024
1025
1026
1027

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1028
TEST_CASE(sub_bcast_test)
Shucai Xiao's avatar
Shucai Xiao committed
1029
1030
1031
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
1032
1033
1034
    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
1035

Shucai Xiao's avatar
Shucai Xiao committed
1036
    auto prog = optimize_onnx("sub_bcast_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1037
1038
1039
1040

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1041
TEST_CASE(sub_scalar_test)
Shucai Xiao's avatar
Shucai Xiao committed
1042
1043
1044
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
1045
1046
1047
    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);
1048
    p.add_instruction(migraphx::op::sub{}, l0, m1);
Shucai Xiao's avatar
Shucai Xiao committed
1049
    auto prog = optimize_onnx("sub_scalar_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1050
1051
1052
1053

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1054
TEST_CASE(sum_test)
1055
1056
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1057
1058
1059
1060
1061
    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);
1062

Shucai Xiao's avatar
Shucai Xiao committed
1063
    auto prog = optimize_onnx("sum_test.onnx");
1064
1065
1066
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1067
TEST_CASE(tan_test)
1068
1069
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1070
1071
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::tan{}, input);
1072

Shucai Xiao's avatar
Shucai Xiao committed
1073
    auto prog = optimize_onnx("tan_test.onnx");
1074
1075
1076
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1077
TEST_CASE(tanh_test)
1078
1079
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1080
1081
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::tanh{}, input);
1082

Shucai Xiao's avatar
Shucai Xiao committed
1083
    auto prog = optimize_onnx("tanh_test.onnx");
1084
1085
1086
1087

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1088
TEST_CASE(transpose_test)
1089
1090
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1091
1092
1093
1094
    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
1095
    auto prog = optimize_onnx("transpose_test.onnx");
1096
1097
1098
1099

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1100
TEST_CASE(transpose_gather_test)
1101
1102
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
    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
1121
    auto prog = optimize_onnx("transpose_gather_test.onnx");
1122
1123
1124
1125

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1126
TEST_CASE(unknown_test)
1127
1128
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1129
1130
1131
1132
    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
1133
    auto prog = optimize_onnx("unknown_test.onnx");
1134
1135
1136
1137

    EXPECT(p == prog);
}

1138
1139
1140
1141
1142
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
1143
    auto prog = optimize_onnx("variable_batch_test.onnx");
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153

    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
1154
    auto prog = optimize_onnx("variable_batch_leq_zero_test.onnx");
1155
1156
1157
1158

    EXPECT(p == prog);
}

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