@@ -1118,6 +1118,39 @@ TEST_F(PolyhedralMapperTest, EmptyMappingFilter) {
11181118 mscop->codegen (specializedName);
11191119}
11201120
1121+ TEST_F (PolyhedralMapperTest, ModulusConstantRHS) {
1122+ string tc = R"TC(
1123+ def fun(float(N) a) -> (b) { b(i) = a(i % 3) where i in 0:N }
1124+ )TC" ;
1125+ // This triggers tc2halide conversion and should not throw.
1126+ auto scop = Prepare (tc);
1127+ for (auto r : scop->reads .wrap ().get_set_list ()) {
1128+ auto read = r.unwrap ();
1129+ // skip irrelevant reads, if any
1130+ if (read.range ().get_tuple_name () != std::string (" a" )) {
1131+ continue ;
1132+ }
1133+ EXPECT_EQ (r.get_stride (0 ), 3 );
1134+ }
1135+ }
1136+
1137+ TEST_F (PolyhedralMapperTest, ModulusVariableRHS) {
1138+ string tc = R"TC(
1139+ def local_sparse_convolution(float(N, C, H, W) I, float(O, KC, KH, KW) W1) -> (O1) {
1140+ O1(n, o, h, w) +=! I(n, kc % c, h + kh, w + kw) * W1(o, kc, kh, kw) where c in 1:C
1141+ }
1142+ )TC" ;
1143+ // This triggers tc2halide conversion and should not throw.
1144+ auto scop = Prepare (tc);
1145+ for (auto r : scop->reads .range ().get_set_list ()) {
1146+ // skip irrelevant reads, if any
1147+ if (r.get_tuple_name () != std::string (" I" )) {
1148+ continue ;
1149+ }
1150+ EXPECT_TRUE (r.plain_is_universe ());
1151+ }
1152+ }
1153+
11211154int main (int argc, char ** argv) {
11221155 ::testing::InitGoogleTest (&argc, argv);
11231156 ::gflags::ParseCommandLineFlags (&argc, &argv, true );
0 commit comments