code: def dense_u8u8i32_vrmpy_schedule(outs):
      """Schedule for vrmpy dense"""
      s = te.create_schedule([x.op for x in outs])
      # O: The output of the fused op
      O = outs[0]
  
      def _schedule_dense(s, C, O):
          (a_k,) = C.op.reduce_axis
          a_y = C.op.axis[-2]
          a_yo, a_yi = s[C].split(a_y, factor=32)
          a_xo, a_xi = s[C].split(C.op.axis[-1], factor=32)
          a_ko, a_ki = s[C].split(a_k, factor=4)
  
          s[C].reorder(a_yo, a_xo, a_yi, a_ko, a_xi, a_ki)
  
          pc = dot_vrmpy("uint8", "uint8")
          s[C].tensorize(a_xi, pc)
          s[C].parallel(s[C].fuse(a_yo, a_xo))
  
          if C != O:
              a_y = O.op.axis[-2]
              a_yo, a_yi = s[O].split(a_y, factor=32)
              a_xo, a_xi = s[O].split(O.op.axis[-1], factor=32)
  
              s[O].reorder(a_yo, a_xo, a_yi, a_xi)
              s[O].vectorize(a_xi)
              s[C].compute_at(s[O], a_yi)
              s[O].parallel(s[O].fuse(a_yo, a_xo))
  
      def _callback(op):
          if "u8u8i32_vrmpy" in op.tag:
              # C: The output of GEMM
              C = op.output(0)
              _schedule_dense(s, C, O)
  
      traverse_inline(s, outs[0].op, _callback)
  
      return s
  
file_path: tvm/python/tvm/topi/hexagon/dense.py
imports: import tvm
  from tvm.topi.utils import traverse_inline
  from tvm import te
  from ..None import tag
  from .tensor_intrin import dot_vrmpy
label_desc: Use image node_id 3 for calling a global function with example usage: dense_u8u8i32_vrmpy_schedule(outs) and returns: s