Why your pattern has a tuple node? It seems to me that it tries to match
%0 = nn.conv2d(%p0, %p1, padding=[1, 1, 1, 1], groups=32, channels=32, kernel_size=[3, 3], data_layout="NHWC", kernel_layout="HWIO") /* ty=Tensor[(1, 112, 112, 32), float32] */;
%1 = multiply(%0, %p2);
%2 = add(%1, %p3);
%3 = %2.0; /* This looks incorrect? */
nn.relu(%3)