@triton.jit
def _ReLULinearAdd(input_ptr, weight_ptr, add_ptr, output_ptr,
    numel_no_channels, in_channels: tl.constexpr, out_channels: tl.
    constexpr, D_block: tl.constexpr, _ILP: tl.constexpr):
    pid = tl.program_id(0)
    input_ptr += pid * _ILP * in_channels * D_block
    add_ptr += pid * _ILP * out_channels * D_block
    output_ptr += pid * _ILP * out_channels * D_block
    in_channels_offset = tl.arange(0, in_channels)
    out_channels_offset = tl.arange(0, out_channels)
    d_offset = tl.arange(0, D_block)
    in_offset = d_offset[:, None] * in_channels + in_channels_offset[None, :]
    out_offset = d_offset[:, None] * out_channels + out_channels_offset[None, :
        ]
    weight_offset = in_channels_offset[:, None
        ] * out_channels + out_channels_offset[None, :]
    weight = tl.load(weight_ptr + weight_offset)
    for i in tl.static_range(0, _ILP):
        mask = d_offset[:, None] < numel_no_channels - (pid * _ILP + i
            ) * D_block
        x = tl.load(input_ptr + in_offset, mask=mask, other=0)
        add = tl.load(add_ptr + out_offset, mask=mask, other=0)
        x = tl.maximum(x, 0.0).to(tl.float16)
        output = tl.dot(x, weight, out_dtype=tl.float32, allow_tf32=True).to(tl
            .float16) + add
        tl.store(output_ptr + out_offset, output, mask=mask)
        input_ptr += in_channels * D_block
        output_ptr += out_channels * D_block
        add_ptr += out_channels * D_block
