Subgraph with multiple outputs failing in dnnl codegen


I 'm trying subgraph with multiple outputs using dnnl . Just tried with simple example and it is failing. Following is the error

TVMError: Check failed: call: DNNL expects a single convolution or dense op.

Below is the code i have used.

dtype = 'float32'
ishape = (1, 32, 14, 14)
w1shape = (32, 1, 3, 3)
w2shape = (64, 32, 3, 3)
data = relay.var("data", shape=(ishape), dtype=dtype)
weight1 = relay.var("weight1", shape=(w1shape), dtype=dtype)
weight2 = relay.var("weight2", shape=(w2shape), dtype=dtype)
depthwise_conv2d_1 = relay.nn.conv2d(data,weight1,kernel_size=(3, 3),padding=(1, 1),groups=32)
depthwise_conv2d_2 = relay.nn.conv2d(depthwise_conv2d_1,weight1,kernel_size=(3, 3),padding=(1, 1),groups=32)
conv2d_3 = relay.nn.conv2d(depthwise_conv2d_1,weight2,kernel_size=(3, 3),padding=(1, 1),groups=1)
func=relay.Function([data, weight1, weight2], relay.Tuple((conv2d_3,depthwise_conv2d_2)))
mod = tvm.IRModule()
mod["main"] = func
mod = relay.transform.AnnotateTarget("dnnl")(mod)
mod = relay.transform.MergeCompilerRegions()(mod)
mod = transform.PartitionGraph()(mod)
graph, lib, params =, 'llvm', params={})

We haven’t fully supported multiple outputs for subgraphs in DNNL codegen. See the discussion in for details.

I checked again and did find something missed. Could you use the PR to try if it works or not? Sorry for the confusion.