digraph JIT {

    subgraph top {
        rank=same;
        block0 [label = "..."]
        block0s [label = "..."]
        block0s1 [label = "..."]
    }
    subgraph bottom {
        rank=same;
        block2 [label = "inputargs: v4\n...", shape=box]
        block3 [label = "inputargs: v5\n...", shape=box]
        block2s [label = "inputargs: v4\n...", shape=box]
        block3s [label = "inputargs: v5\n...", shape=box]
        block2s1 [label = "inputargs: v4\n...", shape=box]
        block3s1 [label = "inputargs: v5\n...", shape=box]
    }
    block1 [label = "inputargs: struct_1\n\nv1 = getfield(struct_1, ('co'))\nv2 = int_add(v1, (1))            \nv3 = cast_int_to_bool(v2)    \n\nexitswitch: v2", shape=octagon]
    block0 -> block1
    block1 -> block2 [label="True: v2"]
    block1 -> block3 [label="False: v2"]
    
    block0_5s [label = "inputargs: struct_1\n\nv1 = ptr_eq(struct_1, (const_struct_a))\n\nexitswitch: v1", shape=octagon]
    block1s [label = "inputargs: struct_1\n\nv1 = getfield(struct_1, ('co'))\nv2 = int_add(v1, (1))            \nv3 = cast_int_to_bool(v2)    \n\nexitswitch: v2", shape=octagon]
    block1a [label = "inputargs: struct_1\n\nv1 = getfield((const_struct_a), ('co'))\nv2 = int_add(v1, (1))                       \nv3 = cast_int_to_bool(v2)                \n\nexitswitch: v2", shape=octagon]
    block0s -> block0_5s
    block0_5s -> block1s [label="False: struct_1"]
    block0_5s -> block1a [label="True: "]
    block1s -> block2s [label="True: v2"]
    block1s -> block3s [label="False: v2"] 
    block1a -> block2s [label="True: v2"]
    block1a -> block3s [label="False: v2"]

    block0_5s1 [label = "inputargs: struct_1\n\nv1 = ptr_eq(struct_1, (const_struct_a))\n\nexitswitch: v1", shape=octagon]
    block1s1 [label = "inputargs: struct_1\n\nv1 = getfield(struct_1, ('co'))\nv2 = int_add(v1, (1))            \nv3 = cast_int_to_bool(v2)    \n\nexitswitch: v2", shape=octagon]
    block1a1 [label = "inputargs: \n\nv2 = int_add((2), (1))            \nv3 = cast_int_to_bool(v2)    \n\nexitswitch: v2", shape=octagon]
    block0s1 -> block0_5s1
    block0_5s1 -> block1s1 [label="False: struct_1"]
    block0_5s1 -> block1a1 [label="True: "]
    block1s1 -> block2s1 [label="True: v2"]
    block1s1 -> block3s1 [label="False: v2"] 
    block1a1 -> block2s1 [label="True: v2"]
    block1a1 -> block3s1 [label="False: v2"]

    block0s2 [label = "..."]
    block0_5s2 [label = "inputargs: struct_1\n\nv1 = ptr_eq(struct_1, (const_struct_a))\n\nexitswitch: v1", shape=octagon]
    block1s2 [label = "inputargs: struct_1\n\nv1 = getfield(struct_1, ('co'))\nv2 = int_add(v1, (1))            \nv3 = cast_int_to_bool(v2)    \n\nexitswitch: v2", shape=octagon]
    block2s2 [label = "inputargs: v4\n...", shape=box]
    block3s2 [label = "inputargs: v5\n...", shape=box]
    block0s2 -> block0_5s2
    block0_5s2 -> block1s2 [label="False: struct_1"]
    block0_5s2 -> block2s2 [label="True: (3)"]
    block1s2 -> block2s2 [label="True: v3"]
    block1s2 -> block3s2 [label="False: v3"] 

}
