code: def _pad_conv2d_NHWC(
      db, di, do, data, kernel, out_channel, new_attrs, output_tensor
  ):
      # Pad batch size
      if db != 0:
          data = relay.nn.pad(
              data, pad_width=((0, db), (0, 0), (0, 0), (0, 0))
          )
  
      # Pad input channel
      if di != 0:
          data = relay.nn.pad(
              data, pad_width=((0, 0), (0, 0), (0, 0), (0, di))
          )
          kernel = relay.nn.pad(
              kernel, pad_width=((0, 0), (0, 0), (0, di), (0, 0))
          )
  
      # Pad output channel
      if do != 0:
          kernel = relay.nn.pad(
              kernel, pad_width=((0, 0), (0, 0), (0, 0), (0, do))
          )
  
      if do != 0:
          new_out_channel = out_channel + do
          new_attrs["channels"] = new_out_channel
  
      out = relay.nn.conv2d(data, kernel, **new_attrs)
  
      if db != 0 or do != 0:
          original_out_shape = [x.value for x in output_tensor.shape]
          out = relay.strided_slice(
              out, begin=[0, 0, 0, 0], end=original_out_shape
          )
  
      return out
  
file_path: tvm/python/tvm/topi/cuda/conv2d_alter_op.py
imports: import logging
  import tvm
  from tvm import autotvm, relay, te
  from ..None import nn
  from ..nn import conv2d_legalize
  from ..utils import get_const_tuple, is_target
  from .conv2d_winograd import _infer_tile_size
  from .tensorcore_alter_op import pad_to_tensorcore
label_desc: Use image node_id 3 for calling a global function with example usage: _pad_conv2d_NHWC(db, di, do, data, kernel, out_channel, new_attrs, output_tensor) and returns: out