Skip to content

Commit 0979f2d

Browse files
committed
Add string-based testing for IRGraphCXXPrinter.
1 parent c3e570a commit 0979f2d

File tree

1 file changed

+55
-43
lines changed

1 file changed

+55
-43
lines changed

src/IRGraphCXXPrinter.cpp

Lines changed: 55 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,8 @@ VISIT_NODE(Atomic, op->producer_name, op->mutex_name, op->body)
286286
#undef ENUM_TO_STR
287287

288288
void IRGraphCXXPrinter::test() {
289+
#define STR(X) #X "\n"
290+
#define CODE(X) X
289291
{
290292
// This:
291293
Expr e = Select::make(Mod::make(Ramp::make(10, 314, 8), Broadcast::make(10, 8)) < Variable::make(Int(32), "p"), Broadcast::make(40, 8) + Ramp::make(4, 8, 8), VectorReduce::make(VectorReduce::Add, Ramp::make(0, 1, 16), 8));
@@ -299,44 +301,49 @@ void IRGraphCXXPrinter::test() {
299301
IRGraphCXXPrinter p(ss);
300302
p.print(e);
301303

302-
std::cout << "Printed expr: " << e << "\n";
303-
std::cout << ss.str();
304-
std::cout << "\n";
305-
306304
// Prints:
307-
Expr expr_0 = IntImm::make(Type(Type::Int, 32, 1), 10);
308-
Expr expr_1 = IntImm::make(Type(Type::Int, 32, 1), 314);
309-
Expr expr_2 = Ramp::make(expr_0, expr_1, 8);
310-
Expr expr_3 = IntImm::make(Type(Type::Int, 32, 1), 10);
311-
Expr expr_4 = Broadcast::make(expr_3, 8);
312-
Expr expr_5 = Mod::make(expr_2, expr_4);
313-
Expr expr_6 = Variable::make(Type(Type::Int, 32, 1), "p");
314-
Expr expr_7 = Broadcast::make(expr_6, 8);
315-
Expr expr_8 = LT::make(expr_5, expr_7);
316-
Expr expr_9 = IntImm::make(Type(Type::Int, 32, 1), 40);
317-
Expr expr_10 = Broadcast::make(expr_9, 8);
318-
Expr expr_11 = IntImm::make(Type(Type::Int, 32, 1), 4);
319-
Expr expr_12 = IntImm::make(Type(Type::Int, 32, 1), 8);
320-
Expr expr_13 = Ramp::make(expr_11, expr_12, 8);
321-
Expr expr_14 = Add::make(expr_10, expr_13);
322-
Expr expr_15 = IntImm::make(Type(Type::Int, 32, 1), 0);
323-
Expr expr_16 = IntImm::make(Type(Type::Int, 32, 1), 1);
324-
Expr expr_17 = Ramp::make(expr_15, expr_16, 16);
325-
Expr expr_18 = VectorReduce::make(VectorReduce::Add, expr_17, 8);
326-
Expr expr_19 = Select::make(expr_8, expr_14, expr_18);
327-
Expr expr_20 = Mul::make(expr_19, expr_19);
328-
Expr expr_21 = Cast::make(Type(Type::Float, 32, 8), expr_20);
329-
Expr expr_22 = Reinterpret::make(Type(Type::Int, 32, 8), expr_21);
330-
Expr expr_23 = IntImm::make(Type(Type::Int, 32, 1), 3);
331-
Expr expr_24 = Broadcast::make(expr_23, 8);
332-
Expr expr_25 = Mul::make(expr_22, expr_24);
333-
Expr expr_26 = Shuffle::make({expr_22, expr_25}, {0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15});
334-
335-
// Now let's see if it matches:
305+
#define RESULT(X) \
306+
X(Expr expr_0 = IntImm::make(Type(Type::Int, 32, 1), 10);) \
307+
X(Expr expr_1 = IntImm::make(Type(Type::Int, 32, 1), 314);) \
308+
X(Expr expr_2 = Ramp::make(expr_0, expr_1, 8);) \
309+
X(Expr expr_3 = IntImm::make(Type(Type::Int, 32, 1), 10);) \
310+
X(Expr expr_4 = Broadcast::make(expr_3, 8);) \
311+
X(Expr expr_5 = Mod::make(expr_2, expr_4);) \
312+
X(Expr expr_6 = Variable::make(Type(Type::Int, 32, 1), "p");) \
313+
X(Expr expr_7 = Broadcast::make(expr_6, 8);) \
314+
X(Expr expr_8 = LT::make(expr_5, expr_7);) \
315+
X(Expr expr_9 = IntImm::make(Type(Type::Int, 32, 1), 40);) \
316+
X(Expr expr_10 = Broadcast::make(expr_9, 8);) \
317+
X(Expr expr_11 = IntImm::make(Type(Type::Int, 32, 1), 4);) \
318+
X(Expr expr_12 = IntImm::make(Type(Type::Int, 32, 1), 8);) \
319+
X(Expr expr_13 = Ramp::make(expr_11, expr_12, 8);) \
320+
X(Expr expr_14 = Add::make(expr_10, expr_13);) \
321+
X(Expr expr_15 = IntImm::make(Type(Type::Int, 32, 1), 0);) \
322+
X(Expr expr_16 = IntImm::make(Type(Type::Int, 32, 1), 1);) \
323+
X(Expr expr_17 = Ramp::make(expr_15, expr_16, 16);) \
324+
X(Expr expr_18 = VectorReduce::make(VectorReduce::Add, expr_17, 8);) \
325+
X(Expr expr_19 = Select::make(expr_8, expr_14, expr_18);) \
326+
X(Expr expr_20 = Mul::make(expr_19, expr_19);) \
327+
X(Expr expr_21 = Cast::make(Type(Type::Float, 32, 8), expr_20);) \
328+
X(Expr expr_22 = Reinterpret::make(Type(Type::Int, 32, 8), expr_21);) \
329+
X(Expr expr_23 = IntImm::make(Type(Type::Int, 32, 1), 3);) \
330+
X(Expr expr_24 = Broadcast::make(expr_23, 8);) \
331+
X(Expr expr_25 = Mul::make(expr_22, expr_24);) \
332+
X(Expr expr_26 = Shuffle::make({expr_22, expr_25}, {0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15});)
333+
334+
std::string expected = RESULT(STR);
335+
internal_assert(expected == ss.str()) << "Generated C++ code was not as expected."
336+
<< "Expected:\n"
337+
<< expected << "\n\nGenerated:\n"
338+
<< ss.str() << "\n";
339+
340+
// Now let's see if the IR it produces matches:
341+
RESULT(CODE);
336342
const Expr &printed = expr_26;
337343
internal_assert(equal(printed, e)) << "Expressions don't match:\n\n"
338344
<< e << "\n\n"
339345
<< printed << "\n";
346+
#undef RESULT
340347
}
341348

342349
{
@@ -352,23 +359,28 @@ void IRGraphCXXPrinter::test() {
352359
IRGraphCXXPrinter p(ss);
353360
p.print(test_cast);
354361

355-
std::cout << "Printed expr: " << test_cast << "\n";
356-
std::cout << ss.str();
357-
std::cout << "\n";
358-
359362
// Produces:
360-
Expr expr_0 = IntImm::make(Type(Type::Int, 16, 1), -32000);
361-
Expr expr_1 = Cast::make(Type(Type::UInt, 64, 1), expr_0);
362-
Expr expr_2 = UIntImm::make(Type(Type::UInt, 16, 1), 1);
363-
Expr expr_3 = Cast::make(Type(Type::UInt, 64, 1), expr_2);
364-
Expr expr_4 = Div::make(expr_1, expr_3);
365-
Expr expr_5 = Call::make(Type(Type::UInt, 64, 1), "bitwise_not", {expr_4}, Call::CallType::PureIntrinsic);
363+
#define RESULT(X) \
364+
X(Expr expr_0 = IntImm::make(Type(Type::Int, 16, 1), -32000);) \
365+
X(Expr expr_1 = Cast::make(Type(Type::UInt, 64, 1), expr_0);) \
366+
X(Expr expr_2 = UIntImm::make(Type(Type::UInt, 16, 1), 1);) \
367+
X(Expr expr_3 = Cast::make(Type(Type::UInt, 64, 1), expr_2);) \
368+
X(Expr expr_4 = Div::make(expr_1, expr_3);) \
369+
X(Expr expr_5 = Call::make(Type(Type::UInt, 64, 1), "bitwise_not", {expr_4}, Call::CallType::PureIntrinsic);)
370+
371+
std::string expected = RESULT(STR);
372+
internal_assert(expected == ss.str()) << "Generated C++ code was not as expected."
373+
<< "Expected:\n"
374+
<< expected << "\n\nGenerated:\n"
375+
<< ss.str() << "\n";
366376

367377
// Now let's see if it matches:
378+
RESULT(CODE);
368379
const Expr &printed = expr_5;
369380
internal_assert(equal(printed, test_cast)) << "Expressions don't match:\n\n"
370381
<< test_cast << "\n\n"
371382
<< printed << "\n";
383+
#undef RESULT
372384
}
373385
}
374386
} // namespace Internal

0 commit comments

Comments
 (0)