Why stop relax bound for compute at

this is before compute at

// attr [compute(AL1, 0x11eb670)] realize_scope = "local.L1"
realize AL1([0, 1], [0, 6], [0, 36], [0, 64], [0, 16]) {
  produce AL1 {
    for (j, 0, 6) {
      for (k, 0, 36) {
        for (l, 0, 64) {
          for (n, 0, 16) {
            if (likely((k < (32 - 0)))) {
              AL1(0, j, k, l, n) =im2col(A(0, j, k, (j/2), n), 5, 5, 2, 1, 1, 32, 1024, 128, 32, 6)
            }
          }
        }
      }
    }
  }

 // attr [compute(Res, 0x171d870)] realize_scope = ""
    realize Res([0, 8], [0, 64], [0, 16], [0, 16]) {
      produce Res {
        for (bo.inner.outer, 0, 8) {
          for (bo.outer, 0, 2) {
            // attr [compute(Res.local.UB.local.L0C, 0x1729950)] realize_scope = "local.L0C"
            realize Res.local.UB.local.L0C([0, 8], [(((bo.outer*8) + bo.inner.outer)*4), 4], [0, 16], [0, 16]) {
              produce Res.local.UB.local.L0C {
                for (co.c.c.init, 0, 8) {
                  for (bo.c.c.init, 0, 4) {
                    for (bi.c.c.init, 0, 16) {
                      for (ci.c.c.init, 0, 16) {
                        Res.local.UB.local.L0C(co.c.c.init, (bo.c.c.init + (((bo.outer*8) + bo.inner.outer)*4)), bi.c.c.init, ci.c.c.init) =0.000000h
                      }
                    }
                  }
                }

this is after s[AL1].compute_at(s[Res], xbo21)

  // attr [compute(Res, 0xf92190)] realize_scope = ""
  realize Res([0, 8], [0, 64], [0, 16], [0, 16]) {
    produce Res {
      for (bo.inner.outer, 0, 8) {
        // attr [compute(AL1, 0xf06f60)] realize_scope = "local.L1"
        realize AL1([(bo.inner.outer/16), ((((bo.inner.outer*64) + 1599)/1024) - (bo.inner.outer/16))], [0, 6], [0, 36], [(bo.inner.outer*4), 36], [0, 16]) {
          produce AL1 {
            for (i, 0, ((((bo.inner.outer*64) + 1599)/1024) - (bo.inner.outer/16))) {
              for (j, 0, 6) {
                for (k, 0, 36) {
                  for (l, 0, 36) {
                    for (n, 0, 16) {
                      if (likely(((i + (bo.inner.outer/16)) < (1 - 0)))) {
                        if (likely((k < (32 - 0)))) {
                          AL1((i + (bo.inner.outer/16)), j, k, (l + (bo.inner.outer*4)), n) =im2col(A((i + (bo.inner.outer/16)), j, k, (j/2), n), 5, 5, 2, 1, 1, 32, 1024, 128, 32, 6)
                        }
                      }
                    }
                  }
                }
              }
            }
          }

AL1 has variable shape after compute at, why tvm stop relaxing when has compute at?

@tqchen could you take a look, thanks

The relaxing logic means that compute_at need to find the producer consume related bound and satisfy all the regions consumer needs. So all the loops until the attach point need to be relaxed