code: def _depthwise_conv2d_infer_layout(workload, cfg):
      (
          _,
          data,
          kernel,
          strides,
          padding,
          dilation,
          _,
          _,
          dtype,
      ) = workload
      batch_size, in_channel, in_height, in_width = data[1]
      filter_channel, channel_multiplier, k_height, k_width = kernel[1]
      out_channel = filter_channel * channel_multiplier
      out_height = (
          in_height + padding[0] + padding[2] - k_height
      ) // strides[0] + 1
      out_width = (
          in_width + padding[1] + padding[3] - 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/x86/depthwise_conv2d.py
imports: import tvm
  from tvm import autotvm, te
  from tvm.autotvm.task.space import OtherOptionEntity, SplitEntity
  from tvm.target.x86 import get_simd_32bit_lanes
  from ..nn.conv2d import unpack_NCHWc_to_nchw
  from ..nn.depthwise_conv2d import _get_workload, depthwise_conv2d_infer_layout
  from ..nn.pad import pad
  from ..nn.utils import get_pad_tuple
  from ..utils import get_const_tuple, traverse_inline
label_desc: Use image node_id 8 for calling a global function with example usage: _depthwise_conv2d_infer_layout(workload, cfg) and returns: in_shape,  in_layout,  out_shape,  out_layout