Histogram:
pfe_feature_mgr_set_val.part.0 (const char * feature_name, const uint8_t val)
{
  struct pfe_hw_feature_t * hw_feature;
  pfe_ct_feature_flags_t flags;
  errno_t ret_feature;
  errno_t ret;

  <bb 4> [local count: 1073741824]:

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  ret_3 = pfe_feature_mgr_handle_feature (&feature_mgr, feature_name_1(D), val_2(D));
  # DEBUG ret => ret_3

  <bb 3> [local count: 1073741824]:
  # ret_4 = PHI <ret_3(2)>
  # DEBUG ret => ret_4
  # DEBUG BEGIN_STMT
  hw_feature ={v} {CLOBBER};
  flags ={v} {CLOBBER};
  return ret_4;

}


pfe_feature_mgr_is_feature_present.isra.0 (struct pfe_fw_feature_t * fw_feature_class, bool_t * ISRA.48)
{
  unsigned char _2;

  <bb 6> [local count: 1073741824]:
  # DEBUG mgr_state s=> mgr_state

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  _2 = pfe_fw_feature_is_in_util (fw_feature_class_1(D));
  if (_2 != 0)
    goto <bb 3>; [50.00%]
  else
    goto <bb 4>; [50.00%]

  <bb 3> [local count: 536870913]:
  # DEBUG BEGIN_STMT
  *ISRA.48_9(D) = 0;
  goto <bb 5>; [100.00%]

  <bb 4> [local count: 536870913]:
  # DEBUG BEGIN_STMT
  *ISRA.48_9(D) = 1;

  <bb 5> [local count: 1073741824]:
  return;

}


pfe_feature_mgr_is_util_available.isra.0 (const char * feature_name, struct pfe_fw_feature_t * * fw_feature_util, bool_t * ISRA.46)
{
  errno_t ret;
  struct pfe_util_t * _1;
  struct pfe_fw_feature_t * _5;
  unsigned char _6;
  struct pfe_fw_feature_t * _7;
  unsigned char _8;

  <bb 9> [local count: 1073741824]:
  # DEBUG mgr_state s=> mgr_state

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.util;
  ret_4 = pfe_util_get_feature (_1, fw_feature_util_2(D), feature_name_3(D));
  # DEBUG ret => ret_4
  # DEBUG BEGIN_STMT
  if (ret_4 == 0)
    goto <bb 3>; [33.00%]
  else
    goto <bb 8>; [67.00%]

  <bb 3> [local count: 354334802]:
  # DEBUG BEGIN_STMT
  _5 = *fw_feature_util_2(D);
  _6 = pfe_fw_feature_is_in_util (_5);
  if (_6 == 1)
    goto <bb 4>; [20.24%]
  else
    goto <bb 7>; [79.76%]

  <bb 4> [local count: 71717364]:
  # DEBUG BEGIN_STMT
  _7 = *fw_feature_util_2(D);
  _8 = pfe_fw_feature_enabled (_7);
  if (_8 != 0)
    goto <bb 5>; [50.00%]
  else
    goto <bb 6>; [50.00%]

  <bb 5> [local count: 35858682]:
  # DEBUG BEGIN_STMT
  *ISRA.46_18(D) = 1;
  goto <bb 8>; [100.00%]

  <bb 6> [local count: 35858682]:
  # DEBUG BEGIN_STMT
  *ISRA.46_18(D) = 0;
  goto <bb 8>; [100.00%]

  <bb 7> [local count: 282617438]:
  # DEBUG BEGIN_STMT
  *ISRA.46_18(D) = 1;

  <bb 8> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  return ret_4;

}


pfe_feature_mgr_is_class_available.isra.0 (const char * feature_name, struct pfe_fw_feature_t * * fw_feature_class, bool_t * ISRA.44)
{
  errno_t ret;
  struct pfe_class_t * _1;
  struct pfe_fw_feature_t * _5;
  unsigned char _6;
  struct pfe_fw_feature_t * _7;
  unsigned char _8;

  <bb 9> [local count: 1073741824]:
  # DEBUG mgr_state s=> mgr_state

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.class;
  ret_4 = pfe_class_get_feature (_1, fw_feature_class_2(D), feature_name_3(D));
  # DEBUG ret => ret_4
  # DEBUG BEGIN_STMT
  if (ret_4 == 0)
    goto <bb 3>; [33.00%]
  else
    goto <bb 8>; [67.00%]

  <bb 3> [local count: 354334802]:
  # DEBUG BEGIN_STMT
  _5 = *fw_feature_class_2(D);
  _6 = pfe_fw_feature_is_in_class (_5);
  if (_6 == 1)
    goto <bb 4>; [20.24%]
  else
    goto <bb 7>; [79.76%]

  <bb 4> [local count: 71717364]:
  # DEBUG BEGIN_STMT
  _7 = *fw_feature_class_2(D);
  _8 = pfe_fw_feature_enabled (_7);
  if (_8 != 0)
    goto <bb 5>; [50.00%]
  else
    goto <bb 6>; [50.00%]

  <bb 5> [local count: 35858682]:
  # DEBUG BEGIN_STMT
  *ISRA.44_18(D) = 1;
  goto <bb 8>; [100.00%]

  <bb 6> [local count: 35858682]:
  # DEBUG BEGIN_STMT
  *ISRA.44_18(D) = 0;
  goto <bb 8>; [100.00%]

  <bb 7> [local count: 282617438]:
  # DEBUG BEGIN_STMT
  *ISRA.44_18(D) = 1;

  <bb 8> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  return ret_4;

}


pfe_feature_mgr_configure_driver (const char * feature_name, const uint8_t val)
{
  errno_t ret;
  int _1;
  struct pfe_tmu_t * _2;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  _1 = strcmp (feature_name_6(D), "err051211_workaround");
  if (_1 == 0)
    goto <bb 3>; [50.00%]
  else
    goto <bb 5>; [50.00%]

  <bb 3> [local count: 536870913]:
  # DEBUG BEGIN_STMT
  if (val_7(D) != 0)
    goto <bb 4>; [33.00%]
  else
    goto <bb 5>; [67.00%]

  <bb 4> [local count: 177167401]:
  # DEBUG BEGIN_STMT
  _2 = feature_mgr.tmu;
  ret_9 = pfe_tmu_queue_err051211_sync (_2);
  # DEBUG ret => ret_9

  <bb 5> [local count: 1073741824]:
  # ret_3 = PHI <0(2), 0(3), ret_9(4)>
  # DEBUG ret => ret_3
  # DEBUG BEGIN_STMT
  return ret_3;

}


pfe_hw_get_feature_next (struct pfe_feature_mgr_t * fmgr, struct pfe_hw_feature_t * * feature)
{
  errno_t ret;
  long unsigned int _1;
  long unsigned int _2;
  long unsigned int _3;
  struct pfe_hw_feature_t * _4;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 2
  # DEBUG BEGIN_STMT
  _1 = fmgr_8(D)->hw_features_count;
  if (_1 != 0)
    goto <bb 3>; [65.00%]
  else
    goto <bb 5>; [35.00%]

  <bb 3> [local count: 697932186]:
  # DEBUG BEGIN_STMT
  _2 = fmgr_8(D)->current_hw_feature;
  _3 = _2 + 1;
  if (_1 > _3)
    goto <bb 4>; [65.00%]
  else
    goto <bb 5>; [35.00%]

  <bb 4> [local count: 453655921]:
  # DEBUG BEGIN_STMT
  fmgr_8(D)->current_hw_feature = _3;
  # DEBUG BEGIN_STMT
  _4 = &fmgr_8(D)->hw_features[_3];
  *feature_10(D) = _4;
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0

  <bb 5> [local count: 1073741824]:
  # ret_5 = PHI <2(2), 2(3), 0(4)>
  # DEBUG ret => ret_5
  # DEBUG BEGIN_STMT
  return ret_5;

}


pfe_hw_get_feature (struct pfe_feature_mgr_t * fmgr, struct pfe_hw_feature_t * * feature, const char * name)
{
  errno_t ret_val;
  errno_t ret;
  const char * fname;
  uint32_t i;
  struct pfe_hw_feature_t * _1;
  const char * fname.3_2;
  int _3;
  struct pfe_hw_feature_t * _4;
  long unsigned int _5;

  <bb 2> [local count: 86959666]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG ret => 2
  # DEBUG BEGIN_STMT
  # DEBUG ret_val => 0
  # DEBUG BEGIN_STMT
  # DEBUG i => 0
  goto <bb 7>; [100.00%]

  <bb 3> [local count: 1014686025]:
  # DEBUG BEGIN_STMT
  _1 = &fmgr_11(D)->hw_features[i_6];
  ret_val_13 = pfe_hw_feature_get_name (_1, &fname);
  # DEBUG ret_val => ret_val_13
  # DEBUG BEGIN_STMT
  if (ret_val_13 == 0)
    goto <bb 4>; [50.00%]
  else
    goto <bb 6>; [50.00%]

  <bb 4> [local count: 507343012]:
  # DEBUG BEGIN_STMT
  fname.3_2 = fname;
  _3 = strcmp (fname.3_2, name_14(D));
  if (_3 == 0)
    goto <bb 5>; [5.50%]
  else
    goto <bb 6>; [94.50%]

  <bb 5> [local count: 27903866]:
  # _4 = PHI <_1(4)>
  # DEBUG BEGIN_STMT
  *feature_15(D) = _4;
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  goto <bb 8>; [100.00%]

  <bb 6> [local count: 986782159]:
  # DEBUG BEGIN_STMT
  i_17 = i_6 + 1;
  # DEBUG i => i_17

  <bb 7> [local count: 1073741824]:
  # i_6 = PHI <0(2), i_17(6)>
  # DEBUG i => i_6
  # DEBUG BEGIN_STMT
  _5 = fmgr_11(D)->hw_features_count;
  if (_5 > i_6)
    goto <bb 3>; [94.50%]
  else
    goto <bb 8>; [5.50%]

  <bb 8> [local count: 86959666]:
  # ret_7 = PHI <0(5), 2(7)>
  # DEBUG ret => ret_7
  # DEBUG BEGIN_STMT
  fname ={v} {CLOBBER};
  return ret_7;

}


pfe_feature_mgr_get_variant (const char * feature_name, uint8_t * val)
{
  pfe_ct_feature_flags_t tmp;
  errno_t ret;
  struct pfe_fw_feature_t * fw_feature_class;
  struct pfe_hw_feature_t * hw_feature;
  long unsigned int _1;
  int _2;
  struct pfe_hw_feature_t * hw_feature.36_3;
  <unnamed type> tmp.37_4;
  unsigned char _5;
  struct pfe_class_t * _6;
  struct pfe_fw_feature_t * fw_feature_class.38_7;
  <unnamed type> tmp.39_8;
  unsigned char _9;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.hw_features_count;
  if (_1 == 0)
    goto <bb 10>; [52.23%]
  else
    goto <bb 3>; [47.77%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  _2 = pfe_hw_get_feature (&feature_mgr, &hw_feature, feature_name_13(D));
  if (_2 == 0)
    goto <bb 4>; [33.00%]
  else
    goto <bb 6>; [67.00%]

  <bb 4> [local count: 169265735]:
  # DEBUG BEGIN_STMT
  hw_feature.36_3 = hw_feature;
  ret_22 = pfe_hw_feature_get_flags (hw_feature.36_3, &tmp);
  # DEBUG ret => ret_22
  # DEBUG BEGIN_STMT
  if (ret_22 == 0)
    goto <bb 5>; [50.00%]
  else
    goto <bb 10>; [50.00%]

  <bb 5> [local count: 84632867]:
  # DEBUG BEGIN_STMT
  tmp.37_4 = tmp;
  _5 = tmp.37_4 & 3;
  *val_19(D) = _5;
  goto <bb 10>; [100.00%]

  <bb 6> [local count: 343660734]:
  # DEBUG BEGIN_STMT
  _6 = feature_mgr.class;
  if (_6 == 0B)
    goto <bb 10>; [31.91%]
  else
    goto <bb 7>; [68.09%]

  <bb 7> [local count: 233998594]:
  # DEBUG BEGIN_STMT
  ret_16 = pfe_class_get_feature (_6, &fw_feature_class, feature_name_13(D));
  # DEBUG ret => ret_16
  # DEBUG BEGIN_STMT
  if (ret_16 == 0)
    goto <bb 8>; [33.00%]
  else
    goto <bb 10>; [67.00%]

  <bb 8> [local count: 77219536]:
  # DEBUG BEGIN_STMT
  fw_feature_class.38_7 = fw_feature_class;
  ret_18 = pfe_fw_feature_get_flags (fw_feature_class.38_7, &tmp);
  # DEBUG ret => ret_18
  # DEBUG BEGIN_STMT
  if (ret_18 == 0)
    goto <bb 9>; [50.00%]
  else
    goto <bb 10>; [50.00%]

  <bb 9> [local count: 38609768]:
  # DEBUG BEGIN_STMT
  tmp.39_8 = tmp;
  _9 = tmp.39_8 & 3;
  *val_19(D) = _9;

  <bb 10> [local count: 1073741824]:
  # ret_10 = PHI <22(2), 0(5), 22(6), ret_16(7), ret_18(8), 0(9), ret_22(4)>
  # DEBUG ret => ret_10
  # DEBUG BEGIN_STMT
  hw_feature ={v} {CLOBBER};
  fw_feature_class ={v} {CLOBBER};
  tmp ={v} {CLOBBER};
  return ret_10;

}


pfe_feature_mgr_get_desc (const char * feature_name, const char * * desc)
{
  errno_t ret;
  struct pfe_fw_feature_t * fw_feature_class;
  struct pfe_hw_feature_t * hw_feature;
  long unsigned int _1;
  int _2;
  struct pfe_hw_feature_t * hw_feature.34_3;
  struct pfe_class_t * _4;
  struct pfe_fw_feature_t * fw_feature_class.35_5;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.hw_features_count;
  if (_1 == 0)
    goto <bb 8>; [52.23%]
  else
    goto <bb 3>; [47.77%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  _2 = pfe_hw_get_feature (&feature_mgr, &hw_feature, feature_name_9(D));
  if (_2 == 0)
    goto <bb 4>; [33.00%]
  else
    goto <bb 5>; [67.00%]

  <bb 4> [local count: 169265735]:
  # DEBUG BEGIN_STMT
  hw_feature.34_3 = hw_feature;
  ret_17 = pfe_hw_feature_get_desc (hw_feature.34_3, desc_13(D));
  # DEBUG ret => ret_17
  goto <bb 8>; [100.00%]

  <bb 5> [local count: 343660734]:
  # DEBUG BEGIN_STMT
  _4 = feature_mgr.class;
  if (_4 == 0B)
    goto <bb 8>; [31.91%]
  else
    goto <bb 6>; [68.09%]

  <bb 6> [local count: 233998594]:
  # DEBUG BEGIN_STMT
  ret_12 = pfe_class_get_feature (_4, &fw_feature_class, feature_name_9(D));
  # DEBUG ret => ret_12
  # DEBUG BEGIN_STMT
  if (ret_12 == 0)
    goto <bb 7>; [33.00%]
  else
    goto <bb 8>; [67.00%]

  <bb 7> [local count: 77219536]:
  # DEBUG BEGIN_STMT
  fw_feature_class.35_5 = fw_feature_class;
  ret_15 = pfe_fw_feature_get_desc (fw_feature_class.35_5, desc_13(D));
  # DEBUG ret => ret_15

  <bb 8> [local count: 1073741824]:
  # ret_6 = PHI <22(2), ret_17(4), 22(5), ret_12(6), ret_15(7)>
  # DEBUG ret => ret_6
  # DEBUG BEGIN_STMT
  hw_feature ={v} {CLOBBER};
  fw_feature_class ={v} {CLOBBER};
  return ret_6;

}


pfe_feature_mgr_get_def_val (const char * feature_name, uint8_t * val)
{
  errno_t ret;
  struct pfe_fw_feature_t * fw_feature_class;
  struct pfe_hw_feature_t * hw_feature;
  long unsigned int _1;
  int _2;
  struct pfe_hw_feature_t * hw_feature.32_3;
  struct pfe_class_t * _4;
  struct pfe_fw_feature_t * fw_feature_class.33_5;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.hw_features_count;
  if (_1 == 0)
    goto <bb 8>; [52.23%]
  else
    goto <bb 3>; [47.77%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  _2 = pfe_hw_get_feature (&feature_mgr, &hw_feature, feature_name_9(D));
  if (_2 == 0)
    goto <bb 4>; [33.00%]
  else
    goto <bb 5>; [67.00%]

  <bb 4> [local count: 169265735]:
  # DEBUG BEGIN_STMT
  hw_feature.32_3 = hw_feature;
  ret_17 = pfe_hw_feature_get_def_val (hw_feature.32_3, val_13(D));
  # DEBUG ret => ret_17
  goto <bb 8>; [100.00%]

  <bb 5> [local count: 343660734]:
  # DEBUG BEGIN_STMT
  _4 = feature_mgr.class;
  if (_4 == 0B)
    goto <bb 8>; [31.91%]
  else
    goto <bb 6>; [68.09%]

  <bb 6> [local count: 233998594]:
  # DEBUG BEGIN_STMT
  ret_12 = pfe_class_get_feature (_4, &fw_feature_class, feature_name_9(D));
  # DEBUG ret => ret_12
  # DEBUG BEGIN_STMT
  if (ret_12 == 0)
    goto <bb 7>; [33.00%]
  else
    goto <bb 8>; [67.00%]

  <bb 7> [local count: 77219536]:
  # DEBUG BEGIN_STMT
  fw_feature_class.33_5 = fw_feature_class;
  ret_15 = pfe_fw_feature_get_def_val (fw_feature_class.33_5, val_13(D));
  # DEBUG ret => ret_15

  <bb 8> [local count: 1073741824]:
  # ret_6 = PHI <22(2), ret_17(4), 22(5), ret_12(6), ret_15(7)>
  # DEBUG ret => ret_6
  # DEBUG BEGIN_STMT
  hw_feature ={v} {CLOBBER};
  fw_feature_class ={v} {CLOBBER};
  return ret_6;

}


pfe_feature_mgr_get_next (const char * * feature_name)
{
  errno_t ret;
  struct pfe_fw_feature_t * fw_feature;
  struct pfe_hw_feature_t * hw_feature;
  long unsigned int _1;
  struct pfe_hw_feature_t * hw_feature.30_2;
  struct pfe_class_t * _3;
  unsigned char _4;
  struct pfe_fw_feature_t * fw_feature.31_5;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.hw_features_count;
  if (_1 == 0)
    goto <bb 12>; [52.23%]
  else
    goto <bb 3>; [47.77%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  ret_12 = pfe_hw_get_feature_next (&feature_mgr, &hw_feature);
  # DEBUG ret => ret_12
  # DEBUG BEGIN_STMT
  if (ret_12 == 0)
    goto <bb 4>; [33.00%]
  else
    goto <bb 5>; [67.00%]

  <bb 4> [local count: 169265735]:
  # DEBUG BEGIN_STMT
  hw_feature.30_2 = hw_feature;
  ret_22 = pfe_hw_feature_get_name (hw_feature.30_2, feature_name_18(D));
  # DEBUG ret => ret_22
  goto <bb 12>; [100.00%]

  <bb 5> [local count: 343660734]:
  # DEBUG BEGIN_STMT
  if (ret_12 == 2)
    goto <bb 6>; [34.00%]
  else
    goto <bb 12>; [66.00%]

  <bb 6> [local count: 116844650]:
  # DEBUG BEGIN_STMT
  _3 = feature_mgr.class;
  if (_3 == 0B)
    goto <bb 12>; [18.75%]
  else
    goto <bb 7>; [81.25%]

  <bb 7> [local count: 94936278]:
  # DEBUG BEGIN_STMT
  _4 = feature_mgr.rewind_flg;
  if (_4 == 1)
    goto <bb 8>; [34.00%]
  else
    goto <bb 9>; [66.00%]

  <bb 8> [local count: 32278334]:
  # DEBUG BEGIN_STMT
  ret_16 = pfe_class_get_feature_first (_3, &fw_feature);
  # DEBUG ret => ret_16
  # DEBUG BEGIN_STMT
  feature_mgr.rewind_flg = 0;
  goto <bb 10>; [100.00%]

  <bb 9> [local count: 62657943]:
  # DEBUG BEGIN_STMT
  ret_14 = pfe_class_get_feature_next (_3, &fw_feature);
  # DEBUG ret => ret_14

  <bb 10> [local count: 94936278]:
  # ret_6 = PHI <ret_16(8), ret_14(9)>
  # DEBUG ret => ret_6
  # DEBUG BEGIN_STMT
  if (ret_6 == 0)
    goto <bb 11>; [33.00%]
  else
    goto <bb 12>; [67.00%]

  <bb 11> [local count: 31328972]:
  # DEBUG BEGIN_STMT
  fw_feature.31_5 = fw_feature;
  ret_20 = pfe_fw_feature_get_name (fw_feature.31_5, feature_name_18(D));
  # DEBUG ret => ret_20

  <bb 12> [local count: 1073741824]:
  # ret_7 = PHI <22(2), ret_22(4), ret_12(5), ret_6(10), 22(6), ret_20(11)>
  # DEBUG ret => ret_7
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  hw_feature ={v} {CLOBBER};
  fw_feature ={v} {CLOBBER};
  return ret_7;

}


pfe_feature_mgr_get_first (const char * * feature_name)
{
  errno_t ret;
  long unsigned int _1;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.hw_features_count;
  if (_1 == 0)
    goto <bb 4>; [52.23%]
  else
    goto <bb 3>; [47.77%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  # DEBUG fmgr => &feature_mgr
  # DEBUG feature => &hw_feature
  # DEBUG INLINE_ENTRY pfe_hw_get_feature_first
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  feature_mgr.current_hw_feature = 0;
  # DEBUG BEGIN_STMT
  # DEBUG hw_feature => &feature_mgr.hw_features[0]
  # DEBUG BEGIN_STMT
  # DEBUG hw_feature => &feature_mgr.hw_features[0]
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  # DEBUG fmgr => NULL
  # DEBUG feature => NULL
  # DEBUG ret => NULL
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  ret_7 = pfe_hw_feature_get_name (&feature_mgr.hw_features[0], feature_name_5(D));
  # DEBUG ret => ret_7
  # DEBUG BEGIN_STMT
  feature_mgr.rewind_flg = 1;

  <bb 4> [local count: 1073741824]:
  # ret_2 = PHI <22(2), ret_7(3)>
  # DEBUG ret => ret_2
  # DEBUG BEGIN_STMT
  # DEBUG D#4 => {CLOBBER}
  # DEBUG hw_feature => D#4
  return ret_2;

}


pfe_feature_mgr_get_val (const char * feature_name, uint8_t * val)
{
  errno_t ret;
  errno_t ret_feature;
  struct pfe_hw_feature_t * hw_feature;
  long unsigned int _1;
  struct pfe_hw_feature_t * hw_feature.22_2;
  uint8_t * val.23_3;
  struct pfe_class_t * _4;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.hw_features_count;
  if (_1 == 0)
    goto <bb 7>; [52.23%]
  else
    goto <bb 3>; [47.77%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  ret_feature_10 = pfe_hw_get_feature (&feature_mgr, &hw_feature, feature_name_8(D));
  # DEBUG ret_feature => ret_feature_10
  # DEBUG BEGIN_STMT
  if (ret_feature_10 == 0)
    goto <bb 4>; [33.00%]
  else
    goto <bb 5>; [67.00%]

  <bb 4> [local count: 169265735]:
  # DEBUG BEGIN_STMT
  hw_feature.22_2 = hw_feature;
  val.23_3 = val;
  ret_14 = pfe_hw_feature_get_val (hw_feature.22_2, val.23_3);
  # DEBUG ret => ret_14
  goto <bb 7>; [100.00%]

  <bb 5> [local count: 343660734]:
  # DEBUG BEGIN_STMT
  _4 = feature_mgr.class;
  if (_4 == 0B)
    goto <bb 7>; [31.91%]
  else
    goto <bb 6>; [68.09%]

  <bb 6> [local count: 233998594]:
  # DEBUG BEGIN_STMT
  ret_12 = pfe_feature_mgr_get_val_class_util (feature_name_8(D), &val);
  # DEBUG ret => ret_12

  <bb 7> [local count: 1073741824]:
  # ret_5 = PHI <22(2), ret_14(4), 22(5), ret_12(6)>
  # DEBUG ret => ret_5
  # DEBUG BEGIN_STMT
  hw_feature ={v} {CLOBBER};
  return ret_5;

}


pfe_feature_mgr_get_val_class_util (const char * feature_name, uint8_t * * val)
{
  errno_t ret_val;
  struct pfe_fw_feature_t * fw_feature_class;
  struct pfe_fw_feature_t * fw_feature_util;
  errno_t ret;
  struct pfe_class_t * _1;
  struct pfe_util_t * _2;
  struct pfe_fw_feature_t * fw_feature_class.24_3;
  unsigned char _4;
  struct pfe_fw_feature_t * fw_feature_class.25_5;
  uint8_t * _6;
  struct pfe_util_t * _7;
  struct pfe_fw_feature_t * fw_feature_util.26_8;
  unsigned char _9;
  struct pfe_fw_feature_t * fw_feature_util.27_10;
  uint8_t * _11;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  fw_feature_util = 0B;
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.class;
  ret_val_18 = pfe_class_get_feature (_1, &fw_feature_class, feature_name_16(D));
  # DEBUG ret_val => ret_val_18
  # DEBUG BEGIN_STMT
  if (ret_val_18 != 0)
    goto <bb 13>; [35.00%]
  else
    goto <bb 3>; [65.00%]

  <bb 3> [local count: 697932186]:
  # DEBUG BEGIN_STMT
  _2 = feature_mgr.util;
  if (_2 != 0B)
    goto <bb 5>; [70.00%]
  else
    goto <bb 8>; [30.00%]

  <bb 5> [local count: 488552529]:
  # DEBUG BEGIN_STMT
  ret_val_20 = pfe_util_get_feature (_2, &fw_feature_util, feature_name_16(D));
  # DEBUG ret_val => ret_val_20
  # DEBUG BEGIN_STMT
  if (ret_val_20 != 0)
    goto <bb 13>; [35.00%]
  else
    goto <bb 8>; [65.00%]

  <bb 8> [local count: 526938800]:
  # DEBUG ret => NULL
  # DEBUG BEGIN_STMT
  fw_feature_class.24_3 = fw_feature_class;
  _4 = pfe_fw_feature_is_in_class (fw_feature_class.24_3);
  if (_4 == 1)
    goto <bb 9>; [20.24%]
  else
    goto <bb 10>; [79.76%]

  <bb 9> [local count: 106652413]:
  # DEBUG BEGIN_STMT
  fw_feature_class.25_5 = fw_feature_class;
  _6 = *val_23(D);
  ret_27 = pfe_fw_feature_get_val (fw_feature_class.25_5, _6);
  # DEBUG ret => ret_27
  goto <bb 13>; [100.00%]

  <bb 10> [local count: 420286387]:
  # DEBUG BEGIN_STMT
  _7 = feature_mgr.util;
  if (_7 != 0B)
    goto <bb 11>; [53.47%]
  else
    goto <bb 13>; [46.53%]

  <bb 11> [local count: 224727131]:
  # DEBUG BEGIN_STMT
  fw_feature_util.26_8 = fw_feature_util;
  _9 = pfe_fw_feature_is_in_util (fw_feature_util.26_8);
  if (_9 == 1)
    goto <bb 12>; [20.24%]
  else
    goto <bb 13>; [79.76%]

  <bb 12> [local count: 45484771]:
  # DEBUG BEGIN_STMT
  fw_feature_util.27_10 = fw_feature_util;
  _11 = *val_23(D);
  ret_25 = pfe_fw_feature_get_val (fw_feature_util.27_10, _11);
  # DEBUG ret => ret_25

  <bb 13> [local count: 1073741824]:
  # ret_12 = PHI <22(2), 22(5), ret_27(9), 0(10), ret_25(12), 0(11)>
  # DEBUG ret => ret_12
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  fw_feature_util ={v} {CLOBBER};
  fw_feature_class ={v} {CLOBBER};
  return ret_12;

}


pfe_feature_mgr_disable (const char * feature_name)
{
  errno_t ret;
  long unsigned int _1;
  struct pfe_class_t * _2;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 22
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.hw_features_count;
  if (_1 == 0)
    goto <bb 6>; [52.23%]
  else
    goto <bb 3>; [47.77%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  ret_8 = pfe_feature_mgr_disable_hw_feature (feature_name_6(D));
  # DEBUG ret => ret_8
  # DEBUG BEGIN_STMT
  if (ret_8 != 0)
    goto <bb 4>; [50.00%]
  else
    goto <bb 6>; [50.00%]

  <bb 4> [local count: 256463235]:
  # DEBUG BEGIN_STMT
  _2 = feature_mgr.class;
  if (_2 == 0B)
    goto <bb 6>; [31.91%]
  else
    goto <bb 5>; [68.09%]

  <bb 5> [local count: 174625816]:
  # DEBUG BEGIN_STMT
  ret_10 = pfe_feature_mgr_disable_class_feature (feature_name_6(D));
  # DEBUG ret => ret_10

  <bb 6> [local count: 1073741824]:
  # ret_3 = PHI <22(2), ret_8(3), 22(4), ret_10(5)>
  # DEBUG ret => ret_3
  # DEBUG BEGIN_STMT
  return ret_3;

}


pfe_feature_mgr_disable_class_feature (const char * feature_name)
{
  pfe_ct_feature_flags_t tmp;
  struct pfe_fw_feature_t * fw_feature_class;
  errno_t ret_val;
  errno_t ret;
  struct pfe_class_t * _1;
  struct pfe_fw_feature_t * fw_feature_class.19_2;
  <unnamed type> tmp.20_3;
  <unnamed type> _6;
  <unnamed type> _15;

  <bb 2> [local count: 1073741823]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 22
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.class;
  ret_val_10 = pfe_class_get_feature (_1, &fw_feature_class, feature_name_8(D));
  # DEBUG ret_val => ret_val_10
  # DEBUG BEGIN_STMT
  if (ret_val_10 == 0)
    goto <bb 3>; [47.77%]
  else
    goto <bb 7>; [52.23%]

  <bb 3> [local count: 512926468]:
  # DEBUG BEGIN_STMT
  fw_feature_class.19_2 = fw_feature_class;
  ret_val_12 = pfe_fw_feature_get_flags (fw_feature_class.19_2, &tmp);
  # DEBUG ret_val => ret_val_12
  # DEBUG BEGIN_STMT
  if (ret_val_12 == 0)
    goto <bb 4>; [65.00%]
  else
    goto <bb 7>; [35.00%]

  <bb 4> [local count: 333402205]:
  # DEBUG BEGIN_STMT
  tmp.20_3 = tmp;
  _6 = tmp.20_3 & 1;
  if (_6 == 0)
    goto <bb 7>; [50.00%]
  else
    goto <bb 5>; [50.00%]

  <bb 5> [local count: 166701102]:
  # DEBUG BEGIN_STMT
  _15 = tmp.20_3 & 2;
  if (_15 == 0)
    goto <bb 7>; [52.23%]
  else
    goto <bb 6>; [47.77%]

  <bb 6> [local count: 79633117]:
  # DEBUG BEGIN_STMT
  ret_14 = pfe_feature_mgr_set_val (feature_name_8(D), 0);
  # DEBUG ret => ret_14

  <bb 7> [local count: 1073741824]:
  # ret_4 = PHI <22(2), 22(3), 0(4), 22(5), ret_14(6)>
  # DEBUG ret => ret_4
  # DEBUG BEGIN_STMT
  fw_feature_class ={v} {CLOBBER};
  tmp ={v} {CLOBBER};
  return ret_4;

}


pfe_feature_mgr_disable_hw_feature (const char * feature_name)
{
  pfe_ct_feature_flags_t tmp;
  struct pfe_hw_feature_t * hw_feature;
  errno_t ret_val;
  errno_t ret;
  struct pfe_hw_feature_t * hw_feature.16_1;
  <unnamed type> tmp.17_2;
  <unnamed type> _5;
  <unnamed type> _14;

  <bb 2> [local count: 1073741823]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 22
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  ret_val_9 = pfe_hw_get_feature (&feature_mgr, &hw_feature, feature_name_7(D));
  # DEBUG ret_val => ret_val_9
  # DEBUG BEGIN_STMT
  if (ret_val_9 == 0)
    goto <bb 3>; [47.77%]
  else
    goto <bb 7>; [52.23%]

  <bb 3> [local count: 512926468]:
  # DEBUG BEGIN_STMT
  hw_feature.16_1 = hw_feature;
  ret_val_11 = pfe_hw_feature_get_flags (hw_feature.16_1, &tmp);
  # DEBUG ret_val => ret_val_11
  # DEBUG BEGIN_STMT
  if (ret_val_11 == 0)
    goto <bb 4>; [65.00%]
  else
    goto <bb 7>; [35.00%]

  <bb 4> [local count: 333402205]:
  # DEBUG BEGIN_STMT
  tmp.17_2 = tmp;
  _5 = tmp.17_2 & 1;
  if (_5 == 0)
    goto <bb 7>; [50.00%]
  else
    goto <bb 5>; [50.00%]

  <bb 5> [local count: 166701102]:
  # DEBUG BEGIN_STMT
  _14 = tmp.17_2 & 2;
  if (_14 == 0)
    goto <bb 7>; [52.23%]
  else
    goto <bb 6>; [47.77%]

  <bb 6> [local count: 79633117]:
  # DEBUG BEGIN_STMT
  ret_13 = pfe_feature_mgr_set_val (feature_name_7(D), 0);
  # DEBUG ret => ret_13

  <bb 7> [local count: 1073741824]:
  # ret_3 = PHI <22(2), 22(3), 0(4), 22(5), ret_13(6)>
  # DEBUG ret => ret_3
  # DEBUG BEGIN_STMT
  hw_feature ={v} {CLOBBER};
  tmp ={v} {CLOBBER};
  return ret_3;

}


pfe_feature_mgr_enable (const char * feature_name)
{
  errno_t ret;
  long unsigned int _1;
  struct pfe_class_t * _2;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 22
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.hw_features_count;
  if (_1 == 0)
    goto <bb 6>; [52.23%]
  else
    goto <bb 3>; [47.77%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  ret_8 = pfe_feature_mgr_enable_hw_feature (feature_name_6(D));
  # DEBUG ret => ret_8
  # DEBUG BEGIN_STMT
  if (ret_8 != 0)
    goto <bb 4>; [50.00%]
  else
    goto <bb 6>; [50.00%]

  <bb 4> [local count: 256463235]:
  # DEBUG BEGIN_STMT
  _2 = feature_mgr.class;
  if (_2 == 0B)
    goto <bb 6>; [31.91%]
  else
    goto <bb 5>; [68.09%]

  <bb 5> [local count: 174625816]:
  # DEBUG BEGIN_STMT
  ret_10 = pfe_feature_mgr_enable_class_feature (feature_name_6(D));
  # DEBUG ret => ret_10

  <bb 6> [local count: 1073741824]:
  # ret_3 = PHI <22(2), ret_8(3), 22(4), ret_10(5)>
  # DEBUG ret => ret_3
  # DEBUG BEGIN_STMT
  return ret_3;

}


pfe_feature_mgr_enable_class_feature (const char * feature_name)
{
  pfe_ct_feature_flags_t tmp;
  struct pfe_fw_feature_t * fw_feature_class;
  errno_t ret_val;
  errno_t ret;
  struct pfe_class_t * _1;
  struct pfe_fw_feature_t * fw_feature_class.13_2;
  <unnamed type> tmp.14_3;
  <unnamed type> _6;
  <unnamed type> _15;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 22
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.class;
  ret_val_10 = pfe_class_get_feature (_1, &fw_feature_class, feature_name_8(D));
  # DEBUG ret_val => ret_val_10
  # DEBUG BEGIN_STMT
  if (ret_val_10 == 0)
    goto <bb 3>; [47.77%]
  else
    goto <bb 7>; [52.23%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  fw_feature_class.13_2 = fw_feature_class;
  ret_val_12 = pfe_fw_feature_get_flags (fw_feature_class.13_2, &tmp);
  # DEBUG ret_val => ret_val_12
  # DEBUG BEGIN_STMT
  if (ret_val_12 == 0)
    goto <bb 4>; [65.00%]
  else
    goto <bb 7>; [35.00%]

  <bb 4> [local count: 333402205]:
  # DEBUG BEGIN_STMT
  tmp.14_3 = tmp;
  _6 = tmp.14_3 & 1;
  if (_6 == 0)
    goto <bb 7>; [35.00%]
  else
    goto <bb 5>; [65.00%]

  <bb 5> [local count: 216711433]:
  # DEBUG BEGIN_STMT
  _15 = tmp.14_3 & 2;
  if (_15 == 0)
    goto <bb 7>; [67.00%]
  else
    goto <bb 6>; [33.00%]

  <bb 6> [local count: 71514773]:
  # DEBUG BEGIN_STMT
  ret_14 = pfe_feature_mgr_set_val (feature_name_8(D), 1);
  # DEBUG ret => ret_14

  <bb 7> [local count: 1073741824]:
  # ret_4 = PHI <22(2), 22(3), 22(4), 0(5), ret_14(6)>
  # DEBUG ret => ret_4
  # DEBUG BEGIN_STMT
  fw_feature_class ={v} {CLOBBER};
  tmp ={v} {CLOBBER};
  return ret_4;

}


pfe_feature_mgr_enable_hw_feature (const char * feature_name)
{
  pfe_ct_feature_flags_t tmp;
  struct pfe_hw_feature_t * hw_feature;
  errno_t ret_val;
  errno_t ret;
  struct pfe_hw_feature_t * hw_feature.10_1;
  <unnamed type> tmp.11_2;
  <unnamed type> _5;
  <unnamed type> _14;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 22
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  ret_val_9 = pfe_hw_get_feature (&feature_mgr, &hw_feature, feature_name_7(D));
  # DEBUG ret_val => ret_val_9
  # DEBUG BEGIN_STMT
  if (ret_val_9 == 0)
    goto <bb 3>; [47.77%]
  else
    goto <bb 7>; [52.23%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  hw_feature.10_1 = hw_feature;
  ret_val_11 = pfe_hw_feature_get_flags (hw_feature.10_1, &tmp);
  # DEBUG ret_val => ret_val_11
  # DEBUG BEGIN_STMT
  if (ret_val_11 == 0)
    goto <bb 4>; [65.00%]
  else
    goto <bb 7>; [35.00%]

  <bb 4> [local count: 333402205]:
  # DEBUG BEGIN_STMT
  tmp.11_2 = tmp;
  _5 = tmp.11_2 & 1;
  if (_5 == 0)
    goto <bb 7>; [35.00%]
  else
    goto <bb 5>; [65.00%]

  <bb 5> [local count: 216711433]:
  # DEBUG BEGIN_STMT
  _14 = tmp.11_2 & 2;
  if (_14 == 0)
    goto <bb 7>; [67.00%]
  else
    goto <bb 6>; [33.00%]

  <bb 6> [local count: 71514773]:
  # DEBUG BEGIN_STMT
  ret_13 = pfe_feature_mgr_set_val (feature_name_7(D), 1);
  # DEBUG ret => ret_13

  <bb 7> [local count: 1073741824]:
  # ret_3 = PHI <22(2), 22(3), 22(4), 0(5), ret_13(6)>
  # DEBUG ret => ret_3
  # DEBUG BEGIN_STMT
  hw_feature ={v} {CLOBBER};
  tmp ={v} {CLOBBER};
  return ret_3;

}


pfe_feature_mgr_set_val (const char * feature_name, const uint8_t val)
{
  errno_t ret;
  errno_t ret_feature;
  pfe_ct_feature_flags_t flags;
  struct pfe_hw_feature_t * hw_feature;
  long unsigned int _1;
  struct pfe_hw_feature_t * hw_feature.4_2;
  <unnamed type> flags.5_3;
  struct pfe_hw_feature_t * hw_feature.6_6;
  struct pfe_class_t * _7;
  <unnamed type> _11;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  flags = 0;
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.hw_features_count;
  if (_1 == 0)
    goto <bb 8>; [52.23%]
  else
    goto <bb 3>; [47.77%]

  <bb 3> [local count: 512926469]:
  # DEBUG BEGIN_STMT
  ret_feature_14 = pfe_hw_get_feature (&feature_mgr, &hw_feature, feature_name_12(D));
  # DEBUG ret_feature => ret_feature_14
  # DEBUG BEGIN_STMT
  if (ret_feature_14 == 0)
    goto <bb 4>; [33.00%]
  else
    goto <bb 6>; [67.00%]

  <bb 4> [local count: 169265735]:
  # DEBUG BEGIN_STMT
  hw_feature.4_2 = hw_feature;
  pfe_hw_feature_get_flags (hw_feature.4_2, &flags);
  # DEBUG ret => NULL
  # DEBUG BEGIN_STMT
  flags.5_3 = flags;
  _11 = flags.5_3 & 2;
  if (_11 != 0)
    goto <bb 5>; [47.77%]
  else
    goto <bb 8>; [52.23%]

  <bb 5> [local count: 80858242]:
  # DEBUG BEGIN_STMT
  hw_feature.6_6 = hw_feature;
  ret_19 = pfe_hw_feature_set_val (hw_feature.6_6, val_15(D));
  # DEBUG ret => ret_19
  goto <bb 8>; [100.00%]

  <bb 6> [local count: 343660734]:
  # DEBUG BEGIN_STMT
  _7 = feature_mgr.class;
  if (_7 == 0B)
    goto <bb 8>; [31.91%]
  else
    goto <bb 7>; [68.09%]

  <bb 7> [local count: 233998594]:
  ret_17 = pfe_feature_mgr_set_val.part.0 (feature_name_12(D), val_15(D));

  <bb 8> [local count: 1073741824]:
  # ret_8 = PHI <22(2), 117(4), 22(6), ret_17(7), ret_19(5)>
  # DEBUG ret => ret_8
  # DEBUG BEGIN_STMT
  hw_feature ={v} {CLOBBER};
  flags ={v} {CLOBBER};
  return ret_8;

}


pfe_feature_mgr_handle_feature (const struct pfe_feature_mgr_t * fmgr, const char * feature_name, const uint8_t val)
{
  errno_t ret_util;
  errno_t ret_class;
  struct pfe_fw_feature_t * fw_feature_util;
  struct pfe_fw_feature_t * fw_feature_class;
  errno_t ret;
  struct pfe_class_t * _1;
  struct pfe_util_t * _2;
  struct pfe_fw_feature_t * fw_feature_class.7_3;
  struct pfe_fw_feature_t * fw_feature_util.8_4;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  fw_feature_class = 0B;
  # DEBUG BEGIN_STMT
  fw_feature_util = 0B;
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = fmgr_10(D)->class;
  ret_class_13 = pfe_class_get_feature (_1, &fw_feature_class, feature_name_11(D));
  # DEBUG ret_class => ret_class_13
  # DEBUG BEGIN_STMT
  if (ret_class_13 != 0)
    goto <bb 10>; [35.00%]
  else
    goto <bb 3>; [65.00%]

  <bb 3> [local count: 697932186]:
  # DEBUG BEGIN_STMT
  _2 = fmgr_10(D)->util;
  if (_2 != 0B)
    goto <bb 5>; [70.00%]
  else
    goto <bb 8>; [30.00%]

  <bb 5> [local count: 488552529]:
  # DEBUG BEGIN_STMT
  ret_util_15 = pfe_util_get_feature (_2, &fw_feature_util, feature_name_11(D));
  # DEBUG ret_util => ret_util_15
  # DEBUG BEGIN_STMT
  if (ret_util_15 != 0)
    goto <bb 10>; [35.00%]
  else
    goto <bb 8>; [65.00%]

  <bb 8> [local count: 526938800]:
  # DEBUG ret => NULL
  # DEBUG BEGIN_STMT
  fw_feature_class.7_3 = fw_feature_class;
  fw_feature_util.8_4 = fw_feature_util;
  ret_18 = pfe_feature_mgr_set_val_class_util (fw_feature_class.7_3, fw_feature_util.8_4, val_16(D));
  # DEBUG ret => ret_18
  # DEBUG BEGIN_STMT
  if (ret_18 == 0)
    goto <bb 9>; [33.00%]
  else
    goto <bb 10>; [67.00%]

  <bb 9> [local count: 173889804]:
  # DEBUG BEGIN_STMT
  ret_20 = pfe_feature_mgr_configure_driver (feature_name_11(D), val_16(D));
  # DEBUG ret => ret_20

  <bb 10> [local count: 1073741824]:
  # ret_5 = PHI <22(2), 22(5), ret_18(8), ret_20(9)>
  # DEBUG ret => ret_5
  # DEBUG BEGIN_STMT
  fw_feature_class ={v} {CLOBBER};
  fw_feature_util ={v} {CLOBBER};
  return ret_5;

}


pfe_feature_mgr_set_val_class_util (struct pfe_fw_feature_t * fw_feature_class, struct pfe_fw_feature_t * fw_feature_util, const uint8_t val)
{
  uint8_t old_val;
  errno_t ret;
  unsigned char _1;
  struct pfe_util_t * _2;
  unsigned char _3;
  unsigned char old_val.9_4;

  <bb 2> [local count: 1073741823]:
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = pfe_fw_feature_is_in_class (fw_feature_class_10(D));
  if (_1 == 1)
    goto <bb 3>; [20.24%]
  else
    goto <bb 4>; [79.76%]

  <bb 3> [local count: 217325345]:
  # DEBUG BEGIN_STMT
  pfe_fw_feature_get_val (fw_feature_class_10(D), &old_val);
  # DEBUG BEGIN_STMT
  ret_15 = pfe_fw_feature_set_val (fw_feature_class_10(D), val_13(D));
  # DEBUG ret => ret_15

  <bb 4> [local count: 1073741823]:
  # ret_5 = PHI <0(2), ret_15(3)>
  # DEBUG ret => ret_5
  # DEBUG BEGIN_STMT
  _2 = feature_mgr.util;
  if (_2 != 0B)
    goto <bb 5>; [70.00%]
  else
    goto <bb 9>; [30.00%]

  <bb 5> [local count: 751619277]:
  # DEBUG BEGIN_STMT
  if (ret_5 == 0)
    goto <bb 6>; [33.00%]
  else
    goto <bb 9>; [67.00%]

  <bb 6> [local count: 248034361]:
  # DEBUG BEGIN_STMT
  _3 = pfe_fw_feature_is_in_util (fw_feature_util_16(D));
  if (_3 == 1)
    goto <bb 7>; [20.24%]
  else
    goto <bb 9>; [79.76%]

  <bb 7> [local count: 50202155]:
  # DEBUG BEGIN_STMT
  ret_19 = pfe_fw_feature_set_val (fw_feature_util_16(D), val_13(D));
  # DEBUG ret => ret_19
  # DEBUG BEGIN_STMT
  if (ret_19 != 0)
    goto <bb 8>; [33.00%]
  else
    goto <bb 9>; [67.00%]

  <bb 8> [local count: 16566711]:
  # DEBUG BEGIN_STMT
  old_val.9_4 = old_val;
  pfe_fw_feature_set_val (fw_feature_util_16(D), old_val.9_4);

  <bb 9> [local count: 1073741824]:
  # ret_6 = PHI <ret_5(4), ret_5(5), 0(6), ret_19(7), ret_19(8)>
  # DEBUG ret => ret_6
  # DEBUG BEGIN_STMT
  old_val ={v} {CLOBBER};
  return ret_6;

}


pfe_feature_mgr_is_available (const char * feature_name)
{
  errno_t ret_hw;
  bool_t is_avail;
  errno_t ret_util;
  errno_t ret_class;
  struct pfe_feature_mgr_state_info_t mgr_state;
  struct pfe_fw_feature_t * fw_feature_util;
  struct pfe_fw_feature_t * fw_feature_class;
  struct pfe_hw_feature_t * hw_feature;
  long unsigned int _1;
  struct pfe_hw_feature_t * hw_feature.0_2;
  unsigned char _3;
  struct pfe_class_t * _4;
  struct pfe_util_t * _5;
  struct pfe_fw_feature_t * fw_feature_class.1_6;
  unsigned char _7;
  unsigned char _8;
  int iftmp.2_10;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  hw_feature = 0B;
  # DEBUG BEGIN_STMT
  fw_feature_class = 0B;
  # DEBUG BEGIN_STMT
  fw_feature_util = 0B;
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  # DEBUG is_avail => 0
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  _1 = feature_mgr.hw_features_count;
  if (_1 == 0)
    goto <bb 18>; [67.00%]
  else
    goto <bb 3>; [33.00%]

  <bb 3> [local count: 354334802]:
  # DEBUG BEGIN_STMT
  memset (&mgr_state, 0, 2);
  # DEBUG BEGIN_STMT
  ret_hw_21 = pfe_hw_get_feature (&feature_mgr, &hw_feature, feature_name_19(D));
  # DEBUG ret_hw => ret_hw_21
  # DEBUG BEGIN_STMT
  if (ret_hw_21 == 0)
    goto <bb 4>; [33.00%]
  else
    goto <bb 6>; [67.00%]

  <bb 4> [local count: 116930485]:
  # DEBUG BEGIN_STMT
  hw_feature.0_2 = hw_feature;
  _3 = pfe_hw_feature_enabled (hw_feature.0_2);
  if (_3 != 0)
    goto <bb 18>; [50.00%]
  else
    goto <bb 5>; [50.00%]

  <bb 5> [local count: 58465242]:
  # DEBUG BEGIN_STMT
  # DEBUG is_avail => 0
  goto <bb 18>; [100.00%]

  <bb 6> [local count: 237404317]:
  # DEBUG BEGIN_STMT
  _4 = feature_mgr.class;
  if (_4 == 0B)
    goto <bb 18>; [46.53%]
  else
    goto <bb 7>; [53.47%]

  <bb 7> [local count: 126940089]:
  # DEBUG BEGIN_STMT
  # DEBUG D#1 => &mgr_state
  ret_class_23 = pfe_feature_mgr_is_class_available.isra.0 (feature_name_19(D), &fw_feature_class, &mgr_state);
  # DEBUG ret_class => ret_class_23
  # DEBUG BEGIN_STMT
  if (ret_class_23 != 0)
    goto <bb 8>; [50.00%]
  else
    goto <bb 9>; [50.00%]

  <bb 8> [local count: 63470044]:
  # DEBUG BEGIN_STMT
  mgr_state.util_avail = 0;

  <bb 9> [local count: 126940089]:
  # DEBUG BEGIN_STMT
  _5 = feature_mgr.util;
  if (_5 != 0B)
    goto <bb 10>; [53.47%]
  else
    goto <bb 12>; [46.53%]

  <bb 10> [local count: 67874865]:
  # DEBUG BEGIN_STMT
  # DEBUG D#2 => &mgr_state
  ret_util_27 = pfe_feature_mgr_is_util_available.isra.0 (feature_name_19(D), &fw_feature_util, &MEM[(unsigned char *)&mgr_state + 1B]);
  # DEBUG ret_util => ret_util_27
  # DEBUG BEGIN_STMT
  if (ret_util_27 != 0)
    goto <bb 11>; [50.00%]
  else
    goto <bb 14>; [50.00%]

  <bb 11> [local count: 33937433]:
  # DEBUG BEGIN_STMT
  mgr_state.util_avail = 0;
  goto <bb 14>; [100.00%]

  <bb 12> [local count: 59065223]:
  # DEBUG BEGIN_STMT
  if (ret_class_23 == 0)
    goto <bb 13>; [33.00%]
  else
    goto <bb 14>; [67.00%]

  <bb 13> [local count: 19491524]:
  # DEBUG BEGIN_STMT
  fw_feature_class.1_6 = fw_feature_class;
  # DEBUG D#3 => &mgr_state
  pfe_feature_mgr_is_feature_present.isra.0 (fw_feature_class.1_6, &MEM[(unsigned char *)&mgr_state + 1B]);

  <bb 14> [local count: 126940089]:
  # DEBUG BEGIN_STMT
  _7 = mgr_state.class_avail;
  if (_7 != 0)
    goto <bb 15>; [50.00%]
  else
    goto <bb 16>; [50.00%]

  <bb 15> [local count: 63470044]:
  _8 = mgr_state.util_avail;
  if (_8 != 0)
    goto <bb 17>; [50.00%]
  else
    goto <bb 16>; [50.00%]

  <bb 16> [local count: 95205066]:

  <bb 17> [local count: 126940089]:
  # iftmp.2_10 = PHI <1(15), 0(16)>
  is_avail_29 = (bool_t) iftmp.2_10;
  # DEBUG is_avail => is_avail_29

  <bb 18> [local count: 1073741824]:
  # is_avail_9 = PHI <0(2), 0(5), 0(6), is_avail_29(17), 1(4)>
  # DEBUG is_avail => is_avail_9
  # DEBUG BEGIN_STMT
  hw_feature ={v} {CLOBBER};
  fw_feature_class ={v} {CLOBBER};
  fw_feature_util ={v} {CLOBBER};
  mgr_state ={v} {CLOBBER};
  return is_avail_9;

}


pfe_feature_mgr_fini ()
{
  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  memset (&feature_mgr, 0, 52);
  # DEBUG BEGIN_STMT
  return 0;

}


pfe_feature_mgr_add_modules (struct pfe_class_t * class, struct pfe_util_t * util, struct pfe_tmu_t * tmu)
{
  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  feature_mgr.class = class_2(D);
  # DEBUG BEGIN_STMT
  feature_mgr.util = util_4(D);
  # DEBUG BEGIN_STMT
  feature_mgr.tmu = tmu_6(D);
  # DEBUG BEGIN_STMT
  # DEBUG ret => 0
  # DEBUG BEGIN_STMT
  return 0;

}


pfe_feature_mgr_init (uint32_t * cbus_base)
{
  errno_t ret;

  <bb 2> [local count: 1073741824]:
  # DEBUG BEGIN_STMT
  # DEBUG BEGIN_STMT
  memset (&MEM[(void *)&feature_mgr + 4B], 0, 48);
  # DEBUG BEGIN_STMT
  feature_mgr.cbus_base = cbus_base_3(D);
  # DEBUG BEGIN_STMT
  ret_6 = pfe_hw_feature_init_all (cbus_base_3(D), &feature_mgr.hw_features, &feature_mgr.hw_features_count);
  # DEBUG ret => ret_6
  # DEBUG BEGIN_STMT
  return ret_6;

}


