let get_subgraph v =
      let mk_subgraph name attrib =
        let attrib = (`Style `Filled) :: attrib in
        Some { Graph.Graphviz.DotAttributes.sg_name= name;
               Graph.Graphviz.DotAttributes.sg_attributes = attrib }
      in
      match Node.elem_key v with
      | PdgIndex.Key.CallStmt call | PdgIndex.Key.SigCallKey (call, _) ->
        let call_stmt = PdgIndex.Key.call_from_id call in
        let name = "Call"^(string_of_int call_stmt.sid) in
        let call_txt =
          Pretty_utils.sfprintf "%a"
            (fun fmt ->
              Cil.defaultCilPrinter#pStmtKind call_stmt fmt
            )
            call_stmt.skind  in
        let call_txt = String.escaped call_txt in
        let attrib = [(`Label (name^" : "^call_txt))] in
        let attrib = (`Fillcolor 0xB38B4D) :: attrib in
        mk_subgraph name attrib
      | PdgIndex.Key.SigKey k ->
        let pack_inputs_outputs = false in
        if pack_inputs_outputs then
          begin
            let is_in =  match k with PdgIndex.Signature.In _ -> true | _ -> false in
            let name = if is_in then "Inputs" else "Outputs" in
            let color = if is_in then 0x90EE90 else 0x6495ED in
            let attrib = [] in
            let attrib = (`Fillcolor color) :: attrib in
            mk_subgraph name attrib
          end
        else
          None
      | _ -> None