"docs/zh_CN/autotune_ref.md" did not exist on "bc9eab33642f6d059092c5f19d0a21bd11e06992"
onnx_test.cpp 47.5 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);
}

kahmed10's avatar
kahmed10 committed
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
TEST_CASE(deconv_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", {migraphx::shape::float_type, {1, 1, 3, 3}});
    auto l1 = p.add_parameter("w", {migraphx::shape::float_type, {1, 1, 3, 3}});
    p.add_instruction(migraphx::op::deconvolution{}, l0, l1);

    auto prog = optimize_onnx("deconv_test.onnx");
    EXPECT(p == prog);
}

TEST_CASE(deconv_bias_test)
{
    migraphx::program p;
    auto l0       = p.add_parameter("x", {migraphx::shape::float_type, {1, 1, 3, 3}});
    auto l1       = p.add_parameter("w", {migraphx::shape::float_type, {1, 1, 3, 3}});
    auto l2       = p.add_parameter("b", {migraphx::shape::float_type, {1}});
    uint64_t axis = 1;
    auto l3       = p.add_instruction(migraphx::op::deconvolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
    p.add_instruction(migraphx::op::add{}, l3, l4);

    auto prog = optimize_onnx("deconv_bias_test.onnx");
    EXPECT(p == prog);
}

TEST_CASE(deconv_input_pads_strides_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", {migraphx::shape::float_type, {1, 1, 3, 3}});
    auto l1 = p.add_parameter("w", {migraphx::shape::float_type, {1, 2, 3, 3}});
    p.add_instruction(migraphx::op::deconvolution{{1, 1}, {3, 2}}, l0, l1);

    auto prog = optimize_onnx("deconv_input_pads_strides_test.onnx");
    EXPECT(p == prog);
}

TEST_CASE(deconv_input_pads_asymm_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", {migraphx::shape::float_type, {1, 1, 3, 3}});
    auto l1 = p.add_parameter("w", {migraphx::shape::float_type, {1, 2, 3, 3}});
    auto l2 = p.add_instruction(migraphx::op::deconvolution{{0, 0}, {3, 2}}, l0, l1);
    p.add_instruction(migraphx::op::slice{{0, 1, 2, 3}, {0, 0, 0, 0}, {1, 2, 8, 6}}, l2);

    auto prog = optimize_onnx("deconv_input_pads_asymm_test.onnx");
    EXPECT(p == prog);
}

TEST_CASE(deconv_output_shape_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", {migraphx::shape::float_type, {1, 1, 3, 3}});
    auto l1 = p.add_parameter("w", {migraphx::shape::float_type, {1, 2, 3, 3}});
    auto l2 = p.add_instruction(migraphx::op::deconvolution{{0, 0}, {3, 2}}, l0, l1);
    p.add_instruction(migraphx::op::pad{{0, 0, 0, 0, 0, 0, 1, 1}}, l2);

    auto prog = optimize_onnx("deconv_output_shape_test.onnx");
    EXPECT(p == prog);
}

TEST_CASE(deconv_output_padding_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", {migraphx::shape::float_type, {1, 1, 3, 3}});
    auto l1 = p.add_parameter("w", {migraphx::shape::float_type, {1, 2, 3, 3}});
    auto l2 = p.add_instruction(migraphx::op::deconvolution{{0, 0}, {3, 2}}, l0, l1);
    p.add_instruction(migraphx::op::pad{{0, 0, 0, 0, 0, 0, 1, 1}}, l2);

    auto prog = optimize_onnx("deconv_output_padding_test.onnx");
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
486
TEST_CASE(dropout_test)
Shucai Xiao's avatar
Shucai Xiao committed
487
488
{
    migraphx::program p;
Khalique's avatar
Khalique committed
489
490
    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
491

Shucai Xiao's avatar
Shucai Xiao committed
492
    auto prog = optimize_onnx("dropout_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
493
494
495
496

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
497
498
499
500
501
502
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
503
    auto prog = optimize_onnx("elu_test.onnx");
Khalique's avatar
Khalique committed
504
505
506
507

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
508
TEST_CASE(erf_test)
509
510
{
    migraphx::program p;
Khalique's avatar
Khalique committed
511
512
    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
513

Shucai Xiao's avatar
Shucai Xiao committed
514
    auto prog = optimize_onnx("erf_test.onnx");
Khalique's avatar
Khalique committed
515
516
517
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
518
TEST_CASE(exp_test)
519
520
521
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
Khalique's avatar
Khalique committed
522
    p.add_instruction(migraphx::op::exp{}, input);
Khalique's avatar
Khalique committed
523

Shucai Xiao's avatar
Shucai Xiao committed
524
    auto prog = optimize_onnx("exp_test.onnx");
Khalique's avatar
Khalique committed
525
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
526
527
}

Khalique's avatar
Khalique committed
528
TEST_CASE(expand_test)
529
530
{
    migraphx::program p;
Khalique's avatar
Khalique committed
531
532
533
534
535
    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
536

Shucai Xiao's avatar
Shucai Xiao committed
537
    auto prog = optimize_onnx("expand_test.onnx");
Khalique's avatar
Khalique committed
538
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
539
540
}

Khalique's avatar
Khalique committed
541
TEST_CASE(flatten_test)
542
543
544
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
545
546
    p.add_instruction(migraphx::op::flatten{2}, l0);
    p.add_instruction(migraphx::op::flatten{1}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
547
    auto prog = optimize_onnx("flatten_test.onnx");
548
549
550
551

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
552
553
554
555
556
557
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
558
    auto prog = optimize_onnx("floor_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
559
560
561
562

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
563
TEST_CASE(gather_test)
564
565
{
    migraphx::program p;
Khalique's avatar
Khalique committed
566
567
568
569
    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
570
    auto prog = optimize_onnx("gather_test.onnx");
571
572
573
574

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
575
TEST_CASE(gemm_test)
576
577
{
    migraphx::program p;
578
579
580
    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
581
582
    auto t0    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l0);
    auto t1    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l1);
583
    auto bl2   = p.add_instruction(migraphx::op::multibroadcast{{7, 11}}, l2);
Khalique's avatar
Khalique committed
584
585
    auto alpha = 2.f;
    auto beta  = 2.0f;
586
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, t1, bl2);
Shucai Xiao's avatar
Shucai Xiao committed
587
    auto prog = optimize_onnx("gemm_test.onnx");
588
589
590
591

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
592
TEST_CASE(gemm_ex_test)
593
594
{
    migraphx::program p;
Khalique's avatar
Khalique committed
595
596
597
598
599
600
601
    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
602
    auto prog = optimize_onnx("gemm_ex_test.onnx");
603
604
605
606

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
607
TEST_CASE(gemm_ex_brcst_test)
608
609
{
    migraphx::program p;
Khalique's avatar
Khalique committed
610
611
612
613
614
615
616
617
618
    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
619
    auto prog = optimize_onnx("gemm_ex_brcst_test.onnx");
620
621
622
623

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
624
TEST_CASE(globalavgpool_test)
625
626
{
    migraphx::program p;
Khalique's avatar
Khalique committed
627
628
629
630
631
632
    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
633
    auto prog = optimize_onnx("globalavgpool_test.onnx");
634
635
636
637

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
683
TEST_CASE(implicit_add_bcast_test)
684
685
{
    migraphx::program p;
Khalique's avatar
Khalique committed
686
687
688
    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);
689
    p.add_instruction(migraphx::op::add{}, l0, l3);
Khalique's avatar
Khalique committed
690

Shucai Xiao's avatar
Shucai Xiao committed
691
    auto prog = optimize_onnx("implicit_add_bcast_test.onnx");
692
693
694
695

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
696
TEST_CASE(implicit_pow_bcast_test)
697
698
{
    migraphx::program p;
Khalique's avatar
Khalique committed
699
700
701
    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);
702
    p.add_instruction(migraphx::op::pow{}, l0, l3);
Khalique's avatar
Khalique committed
703

Shucai Xiao's avatar
Shucai Xiao committed
704
    auto prog = optimize_onnx("implicit_pow_bcast_test.onnx");
705
706
707
708

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
709
TEST_CASE(implicit_sub_bcast_test)
710
711
712
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
713
714
    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);
715
    p.add_instruction(migraphx::op::sub{}, l0, l3);
Khalique's avatar
Khalique committed
716

Shucai Xiao's avatar
Shucai Xiao committed
717
    auto prog = optimize_onnx("implicit_sub_bcast_test.onnx");
718
719
720
721

    EXPECT(p == prog);
}

722
723
724
725
726
727
728
729
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
730
    auto prog = optimize_onnx("initializer_not_an_input.onnx");
kahmed10's avatar
kahmed10 committed
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762

    EXPECT(p == prog);
}

TEST_CASE(instance_norm_test)
{
    std::vector<size_t> dims{1, 2, 3, 3};
    migraphx::shape s1{migraphx::shape::float_type, dims};
    migraphx::shape s2{migraphx::shape::float_type, {2}};

    migraphx::program p;
    auto x     = p.add_parameter("0", s1);
    auto scale = p.add_parameter("1", s2);
    auto bias  = p.add_parameter("2", s2);

    auto mean            = p.add_instruction(migraphx::op::reduce_mean{{2, 3}}, x);
    auto mean_bcast      = p.add_instruction(migraphx::op::multibroadcast{dims}, mean);
    auto l0              = p.add_instruction(migraphx::op::sqdiff{}, x, mean_bcast);
    auto variance        = p.add_instruction(migraphx::op::reduce_mean{{2, 3}}, l0);
    auto l1              = p.add_instruction(migraphx::op::sub{}, x, mean_bcast);
    auto epsilon_literal = p.add_literal(1e-5f);
    auto epsilon_bcast   = p.add_instruction(migraphx::op::multibroadcast{dims}, epsilon_literal);
    auto variance_bcast  = p.add_instruction(migraphx::op::multibroadcast{dims}, variance);
    auto l2              = p.add_instruction(migraphx::op::add{}, variance_bcast, epsilon_bcast);
    auto l3              = p.add_instruction(migraphx::op::rsqrt{}, l2);
    auto l4              = p.add_instruction(migraphx::op::mul{}, l1, l3);
    auto scale_bcast     = p.add_instruction(migraphx::op::broadcast{1, dims}, scale);
    auto bias_bcast      = p.add_instruction(migraphx::op::broadcast{1, dims}, bias);
    auto l5              = p.add_instruction(migraphx::op::mul{}, l4, scale_bcast);
    p.add_instruction(migraphx::op::add{}, l5, bias_bcast);

    auto prog = optimize_onnx("instance_norm_test.onnx");
763
764
765
766

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
767
TEST_CASE(leaky_relu_test)
768
769
{
    migraphx::program p;
Khalique's avatar
Khalique committed
770
771
772
773
    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
774
    auto prog = optimize_onnx("leaky_relu_test.onnx");
775
776
777
778

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
779
TEST_CASE(log_test)
780
781
{
    migraphx::program p;
Khalique's avatar
Khalique committed
782
783
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::log{}, input);
784

Shucai Xiao's avatar
Shucai Xiao committed
785
    auto prog = optimize_onnx("log_test.onnx");
786
787
788
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
789
TEST_CASE(logsoftmax_test)
790
791
{
    migraphx::program p;
Khalique's avatar
Khalique committed
792
793
794
    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
795
    auto prog = optimize_onnx("logsoftmax_test.onnx");
796
797
798
799

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
800
TEST_CASE(lrn_test)
801
802
{
    migraphx::program p;
Khalique's avatar
Khalique committed
803
804
805
806
807
808
809
    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
810
    auto prog = optimize_onnx("lrn_test.onnx");
811
812
813
814

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
815
TEST_CASE(matmul_bmbm_test)
816
817
{
    migraphx::program p;
Khalique's avatar
Khalique committed
818
819
820
821
822
823
    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
824
    auto prog = optimize_onnx("matmul_bmbm_test.onnx");
825
826
827
828

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
829
TEST_CASE(matmul_bmv_test)
830
{
Khalique's avatar
Khalique committed
831
832
833
834
835
836
837
    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);
838

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

Khalique's avatar
Khalique committed
841
    EXPECT(p == prog);
842
843
}

Khalique's avatar
Khalique committed
844
TEST_CASE(matmul_mv_test)
845
846
{
    migraphx::program p;
Khalique's avatar
Khalique committed
847
848
849
850
851
852
    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
853
    auto prog = optimize_onnx("matmul_mv_test.onnx");
854
855
856
857

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
858
TEST_CASE(matmul_vbm_test)
859
860
{
    migraphx::program p;
Khalique's avatar
Khalique committed
861
862
863
864
865
866
867
868
869
    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
870
    auto prog = optimize_onnx("matmul_vbm_test.onnx");
871
872
873
874

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
889
TEST_CASE(matmul_vv_test)
890
891
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
892
893
    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}});
894
895
896
897
898
899
    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
900
    auto prog = optimize_onnx("matmul_vv_test.onnx");
901
902
903
904

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
905
TEST_CASE(max_test)
906
907
{
    migraphx::program p;
Khalique's avatar
Khalique committed
908
909
910
911
912
    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);
913

Shucai Xiao's avatar
Shucai Xiao committed
914
    optimize_onnx("max_test.onnx");
Khalique's avatar
Khalique committed
915
}
916

917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
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
947
948
949
950
951
952
953
954
955
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
956
    optimize_onnx("min_test.onnx");
957
958
}

Khalique's avatar
Khalique committed
959
TEST_CASE(no_pad_test)
960
961
{
    migraphx::program p;
Khalique's avatar
Khalique committed
962
963
    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
964
    auto prog = optimize_onnx("no_pad_test.onnx");
965

Khalique's avatar
Khalique committed
966
967
968
969
970
971
972
973
    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
974
    auto prog = optimize_onnx("pad_test.onnx");
975
976
977
978

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
979
TEST_CASE(pow_test)
980
981
{
    migraphx::program p;
Khalique's avatar
Khalique committed
982
983
984
    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);
985

Shucai Xiao's avatar
Shucai Xiao committed
986
    auto prog = optimize_onnx("pow_test.onnx");
987
988
989
990

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
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
1039
1040
1041
1042
1043
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
1044
    auto prog = optimize_onnx("reducemax_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1045
1046
1047
1048

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1049
TEST_CASE(reducemean_test)
1050
1051
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1052
1053
1054
    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
1055
    auto prog = optimize_onnx("reducemean_test.onnx");
1056
1057
1058
1059

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1060
TEST_CASE(reducemean_keepdims_test)
1061
1062
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1063
1064
    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
1065
    auto prog = optimize_onnx("reducemean_keepdims_test.onnx");
1066
1067
1068
1069

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
1070
1071
1072
1073
1074
1075
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
1076
    auto prog = optimize_onnx("reducemin_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1077
1078
1079
1080

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
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
1091
TEST_CASE(reducesum_test)
Khalique's avatar
Khalique committed
1092
1093
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1094
1095
1096
    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
1097
    auto prog = optimize_onnx("reducesum_test.onnx");
1098
1099

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
1100
1101
}

Khalique's avatar
Khalique committed
1102
TEST_CASE(reducesum_multiaxis_test)
Khalique's avatar
Khalique committed
1103
1104
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1105
1106
1107
    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
1108
    auto prog = optimize_onnx("reducesum_multiaxis_test.onnx");
1109
1110

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
1111
1112
}

Khalique's avatar
Khalique committed
1113
TEST_CASE(reducesum_keepdims_test)
Khalique's avatar
Khalique committed
1114
1115
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1116
1117
    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
1118
    auto prog = optimize_onnx("reducesum_keepdims_test.onnx");
1119
1120
1121
1122

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
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
1135
TEST_CASE(reshape_test)
1136
{
Khalique's avatar
Khalique committed
1137
    migraphx::program p;
Khalique's avatar
Khalique committed
1138
1139
1140
1141
    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});
1142
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {4, 2, 3}});
Khalique's avatar
Khalique committed
1143
1144
1145
    op.dims = reshape_dims;
    p.add_instruction(op, l0);
    p.add_instruction(op, l0);
Shucai Xiao's avatar
Shucai Xiao committed
1146
    auto prog = optimize_onnx("reshape_test.onnx");
1147
1148

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
1149
1150
}

Khalique's avatar
Khalique committed
1151
TEST_CASE(reshape_non_standard_test)
1152
1153
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1154
1155
1156
1157
1158
1159
1160
    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
1161
    auto prog = optimize_onnx("reshape_non_standard_test.onnx");
1162
1163
1164
1165

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1166
1167
1168
1169
1170
1171
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
1172
    auto prog = optimize_onnx("round_test.onnx");
Khalique's avatar
Khalique committed
1173
1174
1175
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1176
TEST_CASE(shape_test)
1177
1178
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1179
1180
1181
1182
    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
1183
    auto prog = optimize_onnx("shape_test.onnx");
1184
1185
1186
1187

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1188
TEST_CASE(shape_gather_test)
1189
1190
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1191
1192
1193
1194
1195
1196
1197
    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
1198
    auto prog = optimize_onnx("shape_gather_test.onnx");
1199
1200
1201
1202

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1203
TEST_CASE(sign_test)
Khalique's avatar
Khalique committed
1204
1205
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1206
1207
    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
1208

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

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

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

Khalique's avatar
Khalique committed
1223
TEST_CASE(sinh_test)
1224
1225
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1226
1227
1228
    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
1229
    auto prog = optimize_onnx("sinh_test.onnx");
1230
1231
1232
1233

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1234
TEST_CASE(slice_test)
1235
1236
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1237
1238
    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
1239
    auto prog = optimize_onnx("slice_test.onnx");
1240
1241
1242
1243

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1244
TEST_CASE(softmax_test)
Shucai Xiao's avatar
Shucai Xiao committed
1245
1246
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1247
1248
    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
1249
    auto prog = optimize_onnx("softmax_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1250
1251
1252
1253

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1254
TEST_CASE(sqrt_test)
Shucai Xiao's avatar
Shucai Xiao committed
1255
1256
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1257
1258
    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
1259

Shucai Xiao's avatar
Shucai Xiao committed
1260
    auto prog = optimize_onnx("sqrt_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1261
1262
1263
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1264
TEST_CASE(squeeze_unsqueeze_test)
Khalique's avatar
Khalique committed
1265
1266
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1267
1268
1269
1270
1271
1272
    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
1273
    auto prog = optimize_onnx("squeeze_unsqueeze_test.onnx");
Khalique's avatar
Khalique committed
1274
1275
1276
1277

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1278
TEST_CASE(sub_bcast_test)
Shucai Xiao's avatar
Shucai Xiao committed
1279
1280
1281
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
1282
1283
1284
    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
1285

Shucai Xiao's avatar
Shucai Xiao committed
1286
    auto prog = optimize_onnx("sub_bcast_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1287
1288
1289
1290

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1291
TEST_CASE(sub_scalar_test)
Shucai Xiao's avatar
Shucai Xiao committed
1292
1293
1294
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
1295
1296
1297
    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);
1298
    p.add_instruction(migraphx::op::sub{}, l0, m1);
Shucai Xiao's avatar
Shucai Xiao committed
1299
    auto prog = optimize_onnx("sub_scalar_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1300
1301
1302
1303

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1304
TEST_CASE(sum_test)
1305
1306
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1307
1308
1309
1310
1311
    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);
1312

Shucai Xiao's avatar
Shucai Xiao committed
1313
    auto prog = optimize_onnx("sum_test.onnx");
1314
1315
1316
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1317
TEST_CASE(tan_test)
1318
1319
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1320
1321
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::tan{}, input);
1322

Shucai Xiao's avatar
Shucai Xiao committed
1323
    auto prog = optimize_onnx("tan_test.onnx");
1324
1325
1326
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1327
TEST_CASE(tanh_test)
1328
1329
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1330
1331
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::tanh{}, input);
1332

Shucai Xiao's avatar
Shucai Xiao committed
1333
    auto prog = optimize_onnx("tanh_test.onnx");
1334
1335
1336
1337

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1338
TEST_CASE(transpose_test)
1339
1340
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1341
1342
1343
1344
    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
1345
    auto prog = optimize_onnx("transpose_test.onnx");
1346
1347
1348
1349

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1350
TEST_CASE(transpose_gather_test)
1351
1352
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
    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
1371
    auto prog = optimize_onnx("transpose_gather_test.onnx");
1372
1373
1374
1375

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1376
TEST_CASE(unknown_test)
1377
1378
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1379
1380
1381
1382
    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
1383
    auto prog = optimize_onnx("unknown_test.onnx");
1384
1385
1386
1387

    EXPECT(p == prog);
}

1388
1389
1390
1391
1392
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
1393
    auto prog = optimize_onnx("variable_batch_test.onnx");
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403

    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
1404
    auto prog = optimize_onnx("variable_batch_leq_zero_test.onnx");
1405
1406
1407
1408

    EXPECT(p == prog);
}

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