Parsed function:fci_rt_db_match_criterion.part.0
Parsed function:fci_rt_db_drop_all
Parsed function:fci_rt_db_get_next
Parsed function:fci_rt_db_get_first
Parsed function:fci_rt_db_remove
Parsed function:fci_rt_db_add
Parsed function:fci_rt_db_init
Parsed function:fci_rt_db_match_criterion
Dump after hash based groups
Congruence classes: 8 (unique hash values: 8), with total: 8 items
Class size histogram [num of members]: number of classe number of classess
[1]: 8 classes


Dump after WPA based types groups
Congruence classes: 8 (unique hash values: 8), with total: 8 items
Class size histogram [num of members]: number of classe number of classess
[1]: 8 classes


Worklist has been filled with: 3
Address reference subdivision created: 0 new classes.
Dump after callgraph-based congruence reduction
Congruence classes: 8 (unique hash values: 8), with total: 8 items
Class size histogram [num of members]: number of classe number of classess
[1]: 8 classes


Init called for 0 items (0.00%).
Dump after full equality comparison of groups
Congruence classes: 8 (unique hash values: 8), with total: 8 items
Class size histogram [num of members]: number of classe number of classess
[1]: 8 classes


Worklist has been filled with: 3
Address reference subdivision created: 0 new classes.
Congruence classes: 8 (unique hash values: 8), with total: 8 items
Class size histogram [num of members]: number of classe number of classess
[1]: 8 classes



Item count: 8
Congruent classes before: 8, after: 8
Average class size before: 1.00, after: 1.00
Average non-singular class size: 0.00, count: 0
Equal symbols: 0
Fraction of visited symbols: 0.00%

fci_rt_db_match_criterion.part.0 (struct fci_rt_db_t * db, const struct fci_rt_db_entry_t * entry)
{
  bool_t match;
  char_t[16] * _2;
  struct pfe_phy_if_t * _4;
  char_t * _5;
  int _6;
  _Bool _7;

  <bb 4> [local count: 1073741824]:

  <bb 2> [local count: 1073741824]:
<L0>:
  # DEBUG BEGIN_STMT
  _2 = &db_1(D)->cur_crit_arg.outif_name;
  _4 = entry_3(D)->iface;
  _5 = pfe_phy_if_get_name (_4);
  _6 = strcmp (_2, _5);
  _7 = _6 == 0;
  match_8 = (bool_t) _7;
  # DEBUG match => match_8
  # DEBUG BEGIN_STMT

  <bb 3> [local count: 1073741824]:
  # match_9 = PHI <match_8(2)>
<L1>:
  # DEBUG match => match_9
  # DEBUG BEGIN_STMT
  return match_9;

}


fci_rt_db_drop_all (struct fci_rt_db_t * db)
{
  struct fci_rt_db_entry_t * entry;
  struct LLIST_t * aux;
  struct LLIST_t * item;
  int _1;
  struct LLIST_Struct * _2;
  struct LLIST_Struct * _3;
  struct LLIST_Struct * _4;
  struct LLIST_t * _5;

  <bb 2> [local count: 118111600]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  item_11 = db_10(D)->theList.prNext;
  # DEBUG item => item_11
  aux_12 = item_11->prNext;
  # DEBUG aux => aux_12
  goto <bb 4>; [100.00%]

  <bb 3> [local count: 955630223]:
  # DEBUG BEGIN_STMT
  _1 = item_6 - 48B;
  entry_13 = (struct fci_rt_db_entry_t *) _1;
  # DEBUG entry => entry_13
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _2 = item_6->prPrev;
  _3 = item_6->prNext;
  _2->prNext = _3;
  # DEBUG BEGIN_STMT
  _4 = item_6->prNext;
  _4->prPrev = _2;
  # DEBUG BEGIN_STMT
  item_6->prPrev = 0B;
  # DEBUG BEGIN_STMT
  item_6->prNext = 0B;
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  oal_mm_free (entry_13);
  # DEBUG BEGIN_STMT
  # DEBUG item => aux_7
  aux_19 = aux_7->prNext;
  # DEBUG aux => aux_19

  <bb 4> [local count: 1073741824]:
  # item_6 = PHI <item_11(2), aux_7(3)>
  # aux_7 = PHI <aux_12(2), aux_19(3)>
  # DEBUG aux => aux_7
  # DEBUG item => item_6
  # DEBUG BEGIN_STMT
  _5 = &db_10(D)->theList;
  if (_5 != item_6)
    goto <bb 3>; [89.00%]
  else
    goto <bb 5>; [11.00%]

  <bb 5> [local count: 118111601]:
  # DEBUG BEGIN_STMT
  return 0;

}


fci_rt_db_get_next (struct fci_rt_db_t * db)
{
  bool_t match;
  struct fci_rt_db_entry_t * entry;
  struct LLIST_Struct * _1;
  struct LLIST_t * _2;
  struct LLIST_t * _3;
  int _4;
  struct LLIST_Struct * _5;
  unsigned char _6;
  struct LLIST_t * _7;

  <bb 2> [local count: 135488924]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG match => 0
  # DEBUG BEGIN_STMT
  _1 = db_15(D)->theList.prNext;
  _2 = &db_15(D)->theList;
  if (_1 != _2)
    goto <bb 3>; [85.10%]
  else
    goto <bb 10>; [14.90%]

  <bb 3> [local count: 115301074]:
  # DEBUG BEGIN_STMT
  _3 = db_15(D)->cur_item;
  if (_2 == _3)
    goto <bb 10>; [14.90%]
  else
    goto <bb 11>; [85.10%]

  <bb 11> [local count: 98121214]:
  goto <bb 7>; [100.00%]

  <bb 4> [local count: 1014686024]:
  # DEBUG BEGIN_STMT
  _4 = _7 - 48B;
  entry_17 = (struct fci_rt_db_entry_t *) _4;
  # DEBUG entry => entry_17
  # DEBUG BEGIN_STMT
  _5 = _7->prNext;
  db_15(D)->cur_item = _5;
  # DEBUG BEGIN_STMT
  if (_7 != 48B)
    goto <bb 5>; [70.00%]
  else
    goto <bb 6>; [30.00%]

  <bb 5> [local count: 710280217]:
  # DEBUG BEGIN_STMT
  _6 = fci_rt_db_match_criterion (db_15(D), entry_17);
  if (_6 == 1)
    goto <bb 8>; [5.50%]
  else
    goto <bb 6>; [94.50%]

  <bb 6> [local count: 975620611]:
  # entry_19 = PHI <entry_17(4), entry_17(5)>

  <bb 7> [local count: 1073741824]:
  # entry_8 = PHI <entry_19(6), entry_16(D)(11)>
  # DEBUG entry => entry_8
  # DEBUG BEGIN_STMT
  _7 = db_15(D)->cur_item;
  if (_2 != _7)
    goto <bb 4>; [94.50%]
  else
    goto <bb 8>; [5.50%]

  <bb 8> [local count: 98121212]:
  # entry_9 = PHI <entry_8(7), entry_17(5)>
  # match_11 = PHI <0(7), 1(5)>
  # DEBUG match => match_11
  # DEBUG entry => entry_9
  # DEBUG BEGIN_STMT
  if (match_11 != 1)
    goto <bb 9>; [44.22%]
  else
    goto <bb 10>; [55.78%]

  <bb 9> [local count: 43389200]:

  <bb 10> [local count: 135488922]:
  # entry_10 = PHI <entry_9(8), 0B(2), 0B(9), 0B(3)>
  # DEBUG match => NULL
  # DEBUG entry => entry_10
  # DEBUG BEGIN_STMT
  return entry_10;

}


fci_rt_db_get_first (struct fci_rt_db_t * db, fci_rt_db_get_criterion_t crit, const void * arg)
{
  bool_t match;
  struct LLIST_t * item;
  struct fci_rt_db_entry_t * entry;
  char_t[16] * _1;
  struct pfe_ip_addr_t * _2;
  uint8_t[6] * _3;
  struct LLIST_Struct * _4;
  struct LLIST_t * _5;
  int _6;
  struct LLIST_Struct * _7;
  unsigned char _8;
  unsigned int _21;

  <bb 2> [local count: 134477577]:
  # DEBUG BEGIN_STMT
  # DEBUG entry => 0B
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG match => 0
  # DEBUG BEGIN_STMT
  # DEBUG is_unknown_crit => 0
  # DEBUG BEGIN_STMT
  db_17(D)->cur_crit = crit_18(D);
  # DEBUG BEGIN_STMT
  switch (crit_18(D)) <default: <L25> [14.29%], case 0: <L26> [14.29%], case 1: <L1> [14.29%], case 2: <L2> [14.29%], case 3: <L3> [14.29%], case 4: <L4> [14.29%], case 5: <L5> [14.29%]>

  <bb 3> [local count: 19216846]:
<L1>:
  # DEBUG BEGIN_STMT
  db_17(D)->cur_crit_arg.iface = arg_20(D);
  # DEBUG BEGIN_STMT
  # DEBUG is_unknown_crit => 0
  # DEBUG BEGIN_STMT
  goto <bb 8>; [100.00%]

  <bb 4> [local count: 19216846]:
<L2>:
  # DEBUG BEGIN_STMT
  _1 = &db_17(D)->cur_crit_arg.outif_name;
  memset (_1, 0, 16);
  # DEBUG BEGIN_STMT
  strncpy (_1, arg_20(D), 15);
  # DEBUG BEGIN_STMT
  # DEBUG is_unknown_crit => 0
  # DEBUG BEGIN_STMT
  goto <bb 8>; [100.00%]

  <bb 5> [local count: 19216846]:
<L3>:
  # DEBUG BEGIN_STMT
  _2 = &db_17(D)->cur_crit_arg.dst_ip;
  memcpy (_2, arg_20(D), 22);
  # DEBUG BEGIN_STMT
  # DEBUG is_unknown_crit => 0
  # DEBUG BEGIN_STMT
  goto <bb 8>; [100.00%]

  <bb 6> [local count: 19216846]:
<L4>:
  # DEBUG BEGIN_STMT
  _3 = &db_17(D)->cur_crit_arg.dst_mac;
  memcpy (_3, arg_20(D), 6);
  # DEBUG BEGIN_STMT
  # DEBUG is_unknown_crit => 0
  # DEBUG BEGIN_STMT
  goto <bb 8>; [100.00%]

  <bb 7> [local count: 19216846]:
<L5>:
  # DEBUG BEGIN_STMT
  _21 = MEM[(char * {ref-all})arg_20(D)];
  MEM[(char * {ref-all})db_17(D) + 16B] = _21;
  # DEBUG BEGIN_STMT
  # DEBUG is_unknown_crit => 0
  # DEBUG BEGIN_STMT

  <bb 8> [local count: 115301074]:
<L26>:
  # DEBUG is_unknown_crit => NULL
  # DEBUG BEGIN_STMT
  _4 = db_17(D)->theList.prNext;
  _5 = &db_17(D)->theList;
  if (_4 != _5)
    goto <bb 16>; [85.10%]
  else
    goto <bb 15>; [14.90%]

  <bb 16> [local count: 98121214]:
  goto <bb 12>; [100.00%]

  <bb 9> [local count: 1014686025]:
  # DEBUG BEGIN_STMT
  _6 = item_12 - 48B;
  entry_28 = (struct fci_rt_db_entry_t *) _6;
  # DEBUG entry => entry_28
  # DEBUG BEGIN_STMT
  _7 = item_12->prNext;
  db_17(D)->cur_item = _7;
  # DEBUG BEGIN_STMT
  if (item_12 != 48B)
    goto <bb 10>; [70.00%]
  else
    goto <bb 11>; [30.00%]

  <bb 10> [local count: 710280217]:
  # DEBUG BEGIN_STMT
  _8 = fci_rt_db_match_criterion (db_17(D), entry_28);
  if (_8 == 1)
    goto <bb 13>; [5.50%]
  else
    goto <bb 11>; [94.50%]

  <bb 11> [local count: 975620613]:
  # DEBUG BEGIN_STMT
  item_30 = item_12->prNext;
  # DEBUG item => item_30

  <bb 12> [local count: 1073741824]:
  # entry_9 = PHI <entry_28(11), 0B(16)>
  # item_12 = PHI <item_30(11), _4(16)>
  # DEBUG item => item_12
  # DEBUG entry => entry_9
  # DEBUG BEGIN_STMT
  if (_5 != item_12)
    goto <bb 9>; [94.50%]
  else
    goto <bb 13>; [5.50%]

  <bb 13> [local count: 98121212]:
  # entry_10 = PHI <entry_28(10), entry_9(12)>
  # match_13 = PHI <1(10), 0(12)>
  # DEBUG match => match_13
  # DEBUG entry => entry_10
  # DEBUG BEGIN_STMT
  if (match_13 != 1)
    goto <bb 14>; [44.22%]
  else
    goto <bb 15>; [55.78%]

  <bb 14> [local count: 43389200]:

  <bb 15> [local count: 134517918]:
  # entry_11 = PHI <entry_10(13), 0B(8), 0B(14), 0B(2)>
<L25>:
  # DEBUG is_unknown_crit => NULL
  # DEBUG match => NULL
  # DEBUG entry => entry_11
  # DEBUG BEGIN_STMT
  return entry_11;

}


fci_rt_db_remove (struct fci_rt_db_t * db, struct fci_rt_db_entry_t * entry)
{
  struct LLIST_t * _1;
  struct LLIST_t * _2;
  struct LLIST_Struct * _3;
  struct LLIST_Struct * _4;
  struct LLIST_Struct * _5;
  struct LLIST_Struct * _6;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  _1 = &entry_8(D)->list_member;
  _2 = db_10(D)->cur_item;
  if (_1 == _2)
    goto <bb 3>; [30.00%]
  else
    goto <bb 4>; [70.00%]

  <bb 3> [local count: 322122547]:
  # DEBUG BEGIN_STMT
  _3 = _2->prNext;
  db_10(D)->cur_item = _3;

  <bb 4> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _4 = entry_8(D)->list_member.prPrev;
  _5 = entry_8(D)->list_member.prNext;
  _4->prNext = _5;
  # DEBUG BEGIN_STMT
  _6 = entry_8(D)->list_member.prNext;
  _6->prPrev = _4;
  # DEBUG BEGIN_STMT
  entry_8(D)->list_member.prPrev = 0B;
  # DEBUG BEGIN_STMT
  entry_8(D)->list_member.prNext = 0B;
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  oal_mm_free (entry_8(D));
  # DEBUG BEGIN_STMT
  return 0;

}


fci_rt_db_add (struct fci_rt_db_t * db, struct pfe_ip_addr_t * dst_ip, uint8_t[6] * src_mac, uint8_t[6] * dst_mac, struct pfe_phy_if_t * iface, uint32_t id, void * refptr, bool_t overwrite)
{
  errno_t ret;
  bool_t is_new;
  struct fci_rt_db_entry_t * new_entry;
  struct pfe_ip_addr_t * _1;
  uint8_t[6] * _2;
  uint8_t[6] * _3;
  long unsigned int id.0_4;
  struct LLIST_Struct * _5;
  struct LLIST_t * _6;
  struct LLIST_t * _7;

  <bb 2> [local count: 1073741821]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG is_new => 0
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  new_entry_16 = fci_rt_db_get_first (db_14(D), 5, &id);
  # DEBUG new_entry => new_entry_16
  # DEBUG BEGIN_STMT
  if (new_entry_16 == 0B)
    goto <bb 3>; [17.43%]
  else
    goto <bb 5>; [82.57%]

  <bb 3> [local count: 187153199]:
  # DEBUG BEGIN_STMT
  new_entry_19 = oal_mm_malloc (56);
  # DEBUG new_entry => new_entry_19
  # DEBUG BEGIN_STMT
  # DEBUG is_new => 1
  # DEBUG BEGIN_STMT
  if (new_entry_19 == 0B)
    goto <bb 7>; [31.91%]
  else
    goto <bb 4>; [68.09%]

  <bb 4> [local count: 127432613]:
  # DEBUG BEGIN_STMT
  memset (new_entry_19, 0, 56);
  goto <bb 7>; [100.00%]

  <bb 5> [local count: 886588622]:
  # DEBUG BEGIN_STMT
  # DEBUG is_new => 0
  # DEBUG BEGIN_STMT
  if (overwrite_17(D) == 0)
    goto <bb 6>; [35.00%]
  else
    goto <bb 7>; [65.00%]

  <bb 6> [local count: 310306018]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 115

  <bb 7> [local count: 1073741823]:
  # new_entry_8 = PHI <new_entry_19(4), new_entry_16(5), new_entry_16(6), new_entry_19(3)>
  # is_new_9 = PHI <1(4), 0(5), 0(6), 1(3)>
  # ret_10 = PHI <0(4), 0(5), 115(6), 11(3)>
  # DEBUG ret => ret_10
  # DEBUG is_new => is_new_9
  # DEBUG new_entry => new_entry_8
  # DEBUG BEGIN_STMT
  if (ret_10 == 0)
    goto <bb 8>; [33.00%]
  else
    goto <bb 10>; [67.00%]

  <bb 8> [local count: 354334801]:
  # DEBUG BEGIN_STMT
  _1 = &new_entry_8->dst_ip;
  memcpy (_1, dst_ip_21(D), 22);
  # DEBUG BEGIN_STMT
  _2 = &new_entry_8->src_mac;
  memcpy (_2, src_mac_23(D), 6);
  # DEBUG BEGIN_STMT
  _3 = &new_entry_8->dst_mac;
  memcpy (_3, dst_mac_25(D), 6);
  # DEBUG BEGIN_STMT
  new_entry_8->iface = iface_27(D);
  # DEBUG BEGIN_STMT
  id.0_4 = id;
  new_entry_8->id = id.0_4;
  # DEBUG BEGIN_STMT
  new_entry_8->mtu = 0;
  # DEBUG BEGIN_STMT
  new_entry_8->refptr = refptr_31(D);
  # DEBUG BEGIN_STMT
  if (is_new_9 == 1)
    goto <bb 9>; [34.00%]
  else
    goto <bb 10>; [66.00%]

  <bb 9> [local count: 120473832]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _5 = db_14(D)->theList.prPrev;
  new_entry_8->list_member.prPrev = _5;
  # DEBUG BEGIN_STMT
  _6 = &db_14(D)->theList;
  new_entry_8->list_member.prNext = _6;
  # DEBUG BEGIN_STMT
  _7 = &new_entry_8->list_member;
  _5->prNext = _7;
  # DEBUG BEGIN_STMT
  db_14(D)->theList.prPrev = _7;

  <bb 10> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  return ret_10;

}


fci_rt_db_init (struct fci_rt_db_t * db)
{
  struct LLIST_t * _1;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = &db_2(D)->theList;
  db_2(D)->theList.prNext = _1;
  # DEBUG BEGIN_STMT
  db_2(D)->theList.prPrev = _1;
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  db_2(D)->cur_item = _1;
  return;

}


fci_rt_db_match_criterion (struct fci_rt_db_t * db, const struct fci_rt_db_entry_t * entry)
{
  bool_t match;
  <unnamed type> _1;
  struct pfe_phy_if_t * _3;
  const struct pfe_phy_if_t * _4;
  _Bool _5;
  struct pfe_ip_addr_t * _6;
  const struct pfe_ip_addr_t * _7;
  int _8;
  _Bool _9;
  uint8_t[6] * _10;
  const uint8_t[6] * _11;
  int _12;
  _Bool _13;
  long unsigned int _14;
  long unsigned int _15;
  _Bool _16;

  <bb 2> [local count: 1073419798]:
  # DEBUG BEGIN_STMT
  # DEBUG match => 0
  # DEBUG BEGIN_STMT
  _1 = db_19(D)->cur_crit;
  switch (_1) <default: <L6> [14.29%], case 0: <L9> [14.29%], case 1: <L1> [14.29%], case 2: <L2> [14.29%], case 3: <L3> [14.29%], case 4: <L4> [14.29%], case 5: <L5> [14.29%]>

  <bb 3> [local count: 153391689]:
<L1>:
  # DEBUG BEGIN_STMT
  _3 = entry_20(D)->iface;
  _4 = db_19(D)->cur_crit_arg.iface;
  _5 = _3 == _4;
  match_24 = (bool_t) _5;
  # DEBUG match => match_24
  # DEBUG BEGIN_STMT
  goto <bb 9>; [100.00%]

  <bb 4> [local count: 153345684]:
<L2>:
  match_2 = fci_rt_db_match_criterion.part.0 (db_19(D), entry_20(D));
  goto <bb 9>; [100.00%]

  <bb 5> [local count: 153391689]:
<L3>:
  # DEBUG BEGIN_STMT
  _6 = &db_19(D)->cur_crit_arg.dst_ip;
  _7 = &entry_20(D)->dst_ip;
  _8 = memcmp (_6, _7, 22);
  _9 = _8 == 0;
  match_23 = (bool_t) _9;
  # DEBUG match => match_23
  # DEBUG BEGIN_STMT
  goto <bb 9>; [100.00%]

  <bb 6> [local count: 153391689]:
<L4>:
  # DEBUG BEGIN_STMT
  _10 = &db_19(D)->cur_crit_arg.dst_mac;
  _11 = &entry_20(D)->dst_mac;
  _12 = memcmp (_10, _11, 6);
  _13 = _12 == 0;
  match_22 = (bool_t) _13;
  # DEBUG match => match_22
  # DEBUG BEGIN_STMT
  goto <bb 9>; [100.00%]

  <bb 7> [local count: 153391689]:
<L5>:
  # DEBUG BEGIN_STMT
  _14 = db_19(D)->cur_crit_arg.id;
  _15 = entry_20(D)->id;
  _16 = _14 == _15;
  match_21 = (bool_t) _16;
  # DEBUG match => match_21
  # DEBUG BEGIN_STMT
  goto <bb 9>; [100.00%]

  <bb 8> [local count: 153391689]:
<L6>:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG match => 0
  # DEBUG BEGIN_STMT

  <bb 9> [local count: 1073741824]:
  # match_17 = PHI <1(2), match_24(3), match_2(4), match_23(5), match_22(6), match_21(7), 0(8)>
<L9>:
  # DEBUG match => match_17
  # DEBUG BEGIN_STMT
  return match_17;

}


