code: def _conv2d_infer_layout(workload, cfg):
      (
          _,
          data,
          kernel,
          strides,
          padding,
          dilation,
          layout,
          dtype,
      ) = workload
      batch_size, in_channel, in_height, in_width = data[1]
      out_channel, _, k_height, k_width = kernel[1]
      out_height = (in_height + 2 * padding[0] - k_height) // strides[
          0
      ] + 1
      out_width = (in_width + 2 * padding[1] - k_width) // strides[
          1
      ] + 1
      tile_ic, tile_oc = (
          cfg["tile_ic"].size[-1],
          cfg["tile_oc"].size[-1],
      )
      in_shape = (
          batch_size,
          in_channel // tile_ic,
          in_height,
          in_width,
          tile_ic,
      )
      in_layout = f"NCHW{tile_ic}c"
      out_shape = (
          batch_size,
          out_channel // tile_oc,
          out_height,
          out_width,
          tile_oc,
      )
      out_layout = f"NCHW{tile_oc}c"
      return ((in_shape, in_layout),), ((out_shape, out_layout),)
  
file_path: tvm/python/tvm/topi/intel_graphics/conv2d_alter_op.py
imports: import tvm
  from tvm import te
  from tvm import relay
  from tvm import autotvm
  from ..utils import get_const_tuple
  from ..nn import conv2d_alter_layout, conv2d_infer_layout
  from .conv2d import _get_default_config
label_desc: Use image node_id 2 for calling a global function with example usage: _conv2d_infer_layout(workload, cfg) and returns: in_shape,  in_layout,  out_shape,  out_layout