@@ -183,7 +183,7 @@ TEST_F(TestIndexExpr, IndexExpr_3) {
183
183
EXPECT_EQ (q14.as_index ().Normalize (), ir::IndexExpr (S4 + S5));
184
184
EXPECT_EQ (q15.as_index ().Normalize (),
185
185
ir::IndexExpr ((S4 * 256 + S5 + S6 * 1024 )) % 25088 );
186
- EXPECT_EQ (q16.as_index ().Normalize (ir::IndexExpr::OptLevel::Level2 ),
186
+ EXPECT_EQ (q16.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel2 ),
187
187
ir::IndexExpr (S4 * 256 + S5));
188
188
EXPECT_EQ (q17.as_index ().Normalize (), ir::IndexExpr (S4 / S5));
189
189
EXPECT_EQ (q18.as_index ().Normalize (),
@@ -301,18 +301,19 @@ TEST_F(TestIndexExpr, Test_dynamic) {
301
301
(f % (S5 * S6)));
302
302
303
303
EXPECT_EQ (
304
- q.as_index ().Normalize (ir::IndexExpr::OptLevel::Level2 ),
304
+ q.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel2 ),
305
305
((((((((S7 * 1024 ) + S8) + (S9 * 4096 )) / ((S5 * S6) * 640 )) * S5) * S6) *
306
306
S4) +
307
307
(((((S7 * 1024 ) + S8) + (S9 * 4096 )) % ((S5 * S6) * 640 )) %
308
308
((S5 * S6) * S4))));
309
- EXPECT_EQ (q1.as_index ().Normalize (ir::IndexExpr::OptLevel::Level2 ),
309
+ EXPECT_EQ (q1.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel2 ),
310
310
((f % ((S5 * S6) * 640 )) % ((S5 * S6) * S4)));
311
- EXPECT_EQ (q2.as_index ().Normalize (ir::IndexExpr::OptLevel::Level2 ),
311
+ EXPECT_EQ (q2.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel2 ),
312
312
f % (S5 * S6));
313
- EXPECT_EQ (q3.as_index ().Normalize (ir::IndexExpr::OptLevel::Level2), Expr (S4));
314
- EXPECT_EQ (q4.as_index ().Normalize (ir::IndexExpr::OptLevel::Level2), Expr (0 ));
315
- EXPECT_EQ (q5.as_index ().Normalize (ir::IndexExpr::OptLevel::Level2),
313
+ EXPECT_EQ (q3.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel2 ),
314
+ Expr (S4));
315
+ EXPECT_EQ (q4.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel2 ), Expr (0 ));
316
+ EXPECT_EQ (q5.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel2 ),
316
317
(((((f / ((S5 * S6) * 640 )) * S4) * S5) * S6) +
317
318
((f % ((S5 * S6) * 640 )) % ((S5 * S6) * S4))));
318
319
}
@@ -492,12 +493,12 @@ TEST_F(TestIndexExpr, CommonFactor) {
492
493
((S2 * S3) * S13)) +
493
494
((S2 * S3) * S1))));
494
495
495
- EXPECT_EQ (q.as_index ().Normalize (ir::IndexExpr::OptLevel::Level2 ),
496
+ EXPECT_EQ (q.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel2 ),
496
497
(((((((S1 + S13) + S17) + S21) + S5) + S9) * S2) * S3));
497
- EXPECT_EQ (q1.as_index ().Normalize (ir::IndexExpr::OptLevel::Level2 ),
498
+ EXPECT_EQ (q1.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel2 ),
498
499
(((((((S5 + S9) + S21) + S17) + S13) + S1) * S2) * S3));
499
500
EXPECT_EQ (
500
- q2.as_index ().Normalize (ir::IndexExpr::OptLevel::Level2 ),
501
+ q2.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel2 ),
501
502
((((f * 1024 ) + tx) + (bx * 4096 )) %
502
503
((((((((((((((((S5 + S9) + S21) + S17) + S13) + S1) * S2) * S3) * S0) /
503
504
4096 ) *
@@ -642,5 +643,44 @@ TEST_F(TestIndexExpr, MatchPattern) {
642
643
EXPECT_EQ (result9->at (" x" ), x);
643
644
EXPECT_EQ (result9->at (" y" ), y);
644
645
}
646
+ TEST_F (TestIndexExpr, BoundSimplify) {
647
+ ir::Var S0 = ir::Var (" S0" );
648
+ ir::Var i = ir::Var (ir::Expr (0 ), ir::Expr (5 ), " i" );
649
+ ir::Var j = ir::Var (ir::Expr (0 ), S0, " j" );
650
+
651
+ ir::Expr q0 = i / Expr (5 );
652
+ ir::Expr q1 = i / Expr (4 );
653
+ ir::Expr q2 = i / Expr (6 );
654
+ ir::Expr q3 = j / S0;
655
+ ir::Expr q4 = j / (S0 - 1 );
656
+ ir::Expr q5 = j / (S0 + 1 );
657
+
658
+ ir::Expr q6 = i % Expr (5 );
659
+ ir::Expr q7 = i % Expr (4 );
660
+ ir::Expr q8 = i % Expr (6 );
661
+ ir::Expr q9 = j % S0;
662
+ ir::Expr q10 = j % (S0 - 1 );
663
+ ir::Expr q11 = j % (S0 + 1 );
664
+ EXPECT_EQ (q0.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ),
665
+ ir::Expr (0 ));
666
+ EXPECT_EQ (q1.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ),
667
+ i / Expr (4 ));
668
+ EXPECT_EQ (q2.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ),
669
+ ir::Expr (0 ));
670
+ EXPECT_EQ (q3.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ),
671
+ ir::Expr (0 ));
672
+ EXPECT_EQ (q4.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ),
673
+ j / (S0 + ir::Expr (-1 )));
674
+ EXPECT_EQ (q5.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ),
675
+ ir::Expr (0 ));
676
+ EXPECT_EQ (q6.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ), i);
677
+ EXPECT_EQ (q7.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ),
678
+ i % Expr (4 ));
679
+ EXPECT_EQ (q8.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ), i);
680
+ EXPECT_EQ (q9.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ), j);
681
+ EXPECT_EQ (q10.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ),
682
+ j % (S0 + ir::Expr (-1 )));
683
+ EXPECT_EQ (q11.as_index ().Normalize (ir::IndexExpr::OptLevel::kLevel3 ), j);
684
+ }
645
685
} // namespace common
646
686
} // namespace cinn
0 commit comments