@@ -286,6 +286,8 @@ VISIT_NODE(Atomic, op->producer_name, op->mutex_name, op->body)
286286#undef ENUM_TO_STR
287287
288288void 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\n Generated:\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\n Generated:\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