mono_branch_optimize_exception_target (struct MonoCompile * cfg, struct MonoBasicBlock * bb, const char * exname)
{
  unsigned int D.22108;
  unsigned int D.22109;
  struct MonoInst * D.22112;
  unsigned int D.22115;
  unsigned int D.22117;
  struct MonoImage * D.22118;
  struct MonoExceptionClause * D.22119;
  unsigned int i.0;
  unsigned int D.22121;
  unsigned int D.22122;
  unsigned int D.22123;
  unsigned int D.22126;
  unsigned int D.22127;
  unsigned int D.22131;
  struct MonoClass * D.22133;
  int D.22135;
  struct MonoBasicBlock * * D.22137;
  unsigned int D.22138;
  unsigned int D.22139;
  struct MonoBasicBlock * * D.22140;
  unsigned int D.22143;
  unsigned int D.22144;
  struct MonoBasicBlock * D.22146;
  unsigned int D.22147;
  unsigned int D.22148;
  unsigned int D.22153;
  unsigned int D.22154;
  struct MonoMemPool * D.22157;
  int D.22158;
  int D.22159;
  const unsigned char * D.22160;
  void * D.22161;
  struct MonoBasicBlock * * D.22162;
  unsigned int D.22163;
  struct MonoMethod * D.22166;
  const char * D.22167;
  struct MonoClass * D.22168;
  const char * D.22169;
  const char * D.22170;
  int D.22171;
  <unnamed-unsigned:15> D.22172;
  int D.22173;
  struct MonoMethodHeader * header;
  struct MonoExceptionClause * clause;
  struct MonoClass * exclass;
  int i;

  header = cfg->header;
  D.22108 = cfg->opt;
  D.22109 = D.22108 & 1048576;
  if (D.22109 == 0) goto <D.22110>; else goto <D.22111>;
  <D.22110>:
  D.22112 = 0B;
  return D.22112;
  <D.22111>:
  D.22115 = bb->region;
  if (D.22115 == 4294967295) goto <D.22113>; else goto <D.22116>;
  <D.22116>:
  D.22115 = bb->region;
  D.22117 = D.22115 & 240;
  if (D.22117 != 0) goto <D.22113>; else goto <D.22114>;
  <D.22113>:
  D.22112 = 0B;
  return D.22112;
  <D.22114>:
  D.22118 = mono_get_corlib ();
  exclass = mono_class_from_name (D.22118, "System", exname);
  i = 0;
  goto <D.21800>;
  <D.21799>:
  D.22119 = header->clauses;
  i.0 = (unsigned int) i;
  D.22121 = i.0 * 24;
  clause = D.22119 + D.22121;
  D.22122 = clause->try_offset;
  D.22123 = bb->real_offset;
  if (D.22122 <= D.22123) goto <D.22124>; else goto <D.22125>;
  <D.22124>:
  D.22123 = bb->real_offset;
  D.22122 = clause->try_offset;
  D.22126 = clause->try_len;
  D.22127 = D.22122 + D.22126;
  if (D.22123 < D.22127) goto <D.22128>; else goto <D.22129>;
  <D.22128>:
  D.22131 = clause->flags;
  if (D.22131 == 0) goto <D.22132>; else goto <D.22130>;
  <D.22132>:
  D.22133 = clause->data.catch_class;
  if (D.22133 != 0B) goto <D.22134>; else goto <D.22130>;
  <D.22134>:
  D.22133 = clause->data.catch_class;
  D.22135 = mono_class_is_assignable_from (D.22133, exclass);
  if (D.22135 != 0) goto <D.22136>; else goto <D.22130>;
  <D.22136>:
  {
    struct MonoBasicBlock * tbb;

    D.22137 = cfg->cil_offset_to_bb;
    D.22138 = clause->handler_offset;
    D.22139 = D.22138 * 4;
    D.22140 = D.22137 + D.22139;
    tbb = *D.22140;
    if (tbb != 0B) goto <D.22142>; else goto <D.22141>;
    <D.22142>:
    D.22143 = BIT_FIELD_REF <*tbb, 32, 480>;
    D.22144 = D.22143 & 12;
    if (D.22144 == 4) goto <D.22145>; else goto <D.22141>;
    <D.22145>:
    {
      struct MonoBasicBlock * targetbb;
      gboolean unsafe;

      targetbb = tbb;
      unsafe = 0;
      goto <D.21797>;
      <D.21796>:
      D.22146 = tbb->next_bb;
      D.22147 = D.22146->flags;
      D.22148 = D.22147 & 8;
      if (D.22148 != 0) goto <D.22149>; else goto <D.22150>;
      <D.22149>:
      unsafe = 1;
      goto <D.21795>;
      <D.22150>:
      tbb = tbb->next_bb;
      <D.21797>:
      if (unsafe == 0) goto <D.22151>; else goto <D.21795>;
      <D.22151>:
      D.22146 = tbb->next_bb;
      if (D.22146 != 0B) goto <D.22152>; else goto <D.21795>;
      <D.22152>:
      D.22153 = tbb->region;
      D.22146 = tbb->next_bb;
      D.22154 = D.22146->region;
      if (D.22153 == D.22154) goto <D.21796>; else goto <D.21795>;
      <D.21795>:
      if (unsafe == 0) goto <D.22155>; else goto <D.22156>;
      <D.22155>:
      {
        struct MonoInst * jump;

        D.22157 = cfg->mempool;
        jump = mono_mempool_alloc0 (D.22157, 48);
        jump->opcode = 446;
        jump->dreg = -1;
        jump->sreg3 = -1;
        D.22158 = jump->sreg3;
        jump->sreg2 = D.22158;
        D.22159 = jump->sreg2;
        jump->sreg1 = D.22159;
        D.22160 = cfg->ip;
        jump->cil_code = D.22160;
        D.22157 = cfg->mempool;
        D.22161 = mono_mempool_alloc0 (D.22157, 48);
        jump->data.op[1].src = D.22161;
        D.22162 = jump->data.op[1].many_blocks;
        *D.22162 = targetbb;
        D.22163 = cfg->verbose_level;
        if (D.22163 > 2) goto <D.22164>; else goto <D.22165>;
        <D.22164>:
        D.22166 = cfg->method;
        D.22167 = D.22166->name;
        D.22166 = cfg->method;
        D.22168 = D.22166->klass;
        D.22169 = D.22168->name;
        D.22133 = clause->data.catch_class;
        D.22170 = D.22133->name;
        D.22171 = targetbb->block_num;
        monoeg_g_print ("found exception to optimize - returning branch to BB%d (%s) (instead of throw) for method %s:%s\n", D.22171, D.22170, D.22169, D.22167);
        <D.22165>:
        D.22112 = jump;
        return D.22112;
      }
      <D.22156>:
      D.22112 = 0B;
      return D.22112;
    }
    <D.22141>:
    D.22112 = 0B;
    return D.22112;
  }
  <D.22130>:
  D.22112 = 0B;
  return D.22112;
  <D.22129>:
  <D.22125>:
  i = i + 1;
  <D.21800>:
  D.22172 = header->num_clauses;
  D.22173 = (int) D.22172;
  if (D.22173 > i) goto <D.21799>; else goto <D.21801>;
  <D.21801>:
  D.22112 = 0B;
  return D.22112;
}


mono_replace_ins (struct MonoCompile * cfg, struct MonoBasicBlock * bb, struct MonoInst * ins, struct MonoInst * * prev, struct MonoBasicBlock * first_bb, struct MonoBasicBlock * last_bb)
{
  short unsigned int D.22177;
  struct MonoInst * D.22180;
  struct MonoBasicBlock * * D.22183;
  struct MonoBasicBlock * D.22184;
  short int D.22185;
  struct MonoInst * D.22186;
  struct MonoInst * D.22189;
  struct MonoInst * D.22191;
  <unnamed-unsigned:1> D.22195;
  unsigned char D.22196;
  <unnamed-unsigned:1> D.22197;
  unsigned char D.22198;
  unsigned char D.22199;
  <unnamed-unsigned:1> D.22200;
  unsigned int D.22202;
  struct MonoInst * D.22203;
  <unnamed-unsigned:1> D.22211;
  unsigned char D.22212;
  unsigned char D.22213;
  <unnamed-unsigned:1> D.22214;
  struct MonoInst * D.22217;
  struct MonoBasicBlock * * D.22218;
  unsigned int i.1;
  unsigned int D.22220;
  struct MonoBasicBlock * * D.22221;
  struct MonoBasicBlock * D.22222;
  short int D.22223;
  int D.22224;
  struct MonoInst * D.22228;
  struct MonoBasicBlock * * D.22229;
  struct MonoBasicBlock * D.22230;
  struct MonoBasicBlock * * D.22231;
  int D.22232;
  struct MonoBasicBlock * D.22233;
  struct MonoBasicBlock * D.22234;
  struct MonoInst * next;

  next = ins->next;
  if (next != 0B) goto <D.22175>; else goto <D.22176>;
  <D.22175>:
  D.22177 = next->opcode;
  if (D.22177 == 316) goto <D.22178>; else goto <D.22179>;
  <D.22178>:
  D.22180 = next->next;
  ins->next = D.22180;
  next = next->next;
  <D.22179>:
  <D.22176>:
  if (first_bb == last_bb) goto <D.22181>; else goto <D.22182>;
  <D.22181>:
  goto <D.21822>;
  <D.21821>:
  D.22183 = first_bb->out_bb;
  D.22184 = *D.22183;
  mono_unlink_bblock (cfg, first_bb, D.22184);
  <D.21822>:
  D.22185 = first_bb->out_count;
  if (D.22185 != 0) goto <D.21821>; else goto <D.21823>;
  <D.21823>:
  D.22186 = *prev;
  if (D.22186 != 0B) goto <D.22187>; else goto <D.22188>;
  <D.22187>:
  D.22186 = *prev;
  D.22189 = first_bb->code;
  D.22186->next = D.22189;
  D.22189 = first_bb->code;
  D.22186 = *prev;
  D.22189->prev = D.22186;
  goto <D.22190>;
  <D.22188>:
  D.22189 = first_bb->code;
  bb->code = D.22189;
  <D.22190>:
  D.22191 = last_bb->last_ins;
  D.22191->next = next;
  if (next != 0B) goto <D.22192>; else goto <D.22193>;
  <D.22192>:
  D.22191 = last_bb->last_ins;
  next->prev = D.22191;
  goto <D.22194>;
  <D.22193>:
  D.22191 = last_bb->last_ins;
  bb->last_ins = D.22191;
  <D.22194>:
  D.22191 = last_bb->last_ins;
  *prev = D.22191;
  D.22195 = bb->has_array_access;
  D.22196 = (unsigned char) D.22195;
  D.22197 = first_bb->has_array_access;
  D.22198 = (unsigned char) D.22197;
  D.22199 = D.22196 | D.22198;
  D.22200 = (<unnamed-unsigned:1>) D.22199;
  bb->has_array_access = D.22200;
  goto <D.22201>;
  <D.22182>:
  {
    int i;
    int count;
    struct MonoBasicBlock * * tmp_bblocks;
    struct MonoBasicBlock * tmp;
    struct MonoInst * last;

    tmp = first_bb;
    goto <D.21830>;
    <D.21829>:
    D.22202 = bb->region;
    tmp->region = D.22202;
    tmp = tmp->next_bb;
    <D.21830>:
    if (tmp != 0B) goto <D.21829>; else goto <D.21831>;
    <D.21831>:
    D.22203 = ins->next;
    if (D.22203 != 0B) goto <D.22204>; else goto <D.22205>;
    <D.22204>:
    D.22203 = ins->next;
    D.22203->prev = 0B;
    <D.22205>:
    ins->next = 0B;
    bb->last_ins = ins;
    D.22191 = last_bb->last_ins;
    if (D.22191 != 0B) goto <D.22206>; else goto <D.22207>;
    <D.22206>:
    D.22191 = last_bb->last_ins;
    D.22191->next = next;
    if (next != 0B) goto <D.22208>; else goto <D.22209>;
    <D.22208>:
    D.22191 = last_bb->last_ins;
    next->prev = D.22191;
    <D.22209>:
    goto <D.22210>;
    <D.22207>:
    last_bb->code = next;
    <D.22210>:
    D.22211 = last_bb->has_array_access;
    D.22212 = (unsigned char) D.22211;
    D.22195 = bb->has_array_access;
    D.22196 = (unsigned char) D.22195;
    D.22213 = D.22212 | D.22196;
    D.22214 = (<unnamed-unsigned:1>) D.22213;
    last_bb->has_array_access = D.22214;
    if (next != 0B) goto <D.22215>; else goto <D.22216>;
    <D.22215>:
    last = next;
    goto <D.21833>;
    <D.21832>:
    last = last->next;
    <D.21833>:
    D.22217 = last->next;
    if (D.22217 != 0B) goto <D.21832>; else goto <D.21834>;
    <D.21834>:
    last_bb->last_ins = last;
    <D.22216>:
    i = 0;
    goto <D.21836>;
    <D.21835>:
    D.22218 = bb->out_bb;
    i.1 = (unsigned int) i;
    D.22220 = i.1 * 4;
    D.22221 = D.22218 + D.22220;
    D.22222 = *D.22221;
    mono_link_bblock (cfg, last_bb, D.22222);
    i = i + 1;
    <D.21836>:
    D.22223 = bb->out_count;
    D.22224 = (int) D.22223;
    if (D.22224 > i) goto <D.21835>; else goto <D.21837>;
    <D.21837>:
    D.22186 = *prev;
    if (D.22186 != 0B) goto <D.22225>; else goto <D.22226>;
    <D.22225>:
    D.22186 = *prev;
    D.22189 = first_bb->code;
    D.22186->next = D.22189;
    D.22189 = first_bb->code;
    D.22186 = *prev;
    D.22189->prev = D.22186;
    goto <D.22227>;
    <D.22226>:
    D.22189 = first_bb->code;
    bb->code = D.22189;
    <D.22227>:
    D.22228 = first_bb->last_ins;
    bb->last_ins = D.22228;
    D.22195 = bb->has_array_access;
    D.22196 = (unsigned char) D.22195;
    D.22197 = first_bb->has_array_access;
    D.22198 = (unsigned char) D.22197;
    D.22199 = D.22196 | D.22198;
    D.22200 = (<unnamed-unsigned:1>) D.22199;
    bb->has_array_access = D.22200;
    tmp_bblocks = bb->out_bb;
    D.22223 = bb->out_count;
    count = (int) D.22223;
    i = 0;
    goto <D.21839>;
    <D.21838>:
    i.1 = (unsigned int) i;
    D.22220 = i.1 * 4;
    D.22229 = tmp_bblocks + D.22220;
    D.22230 = *D.22229;
    mono_unlink_bblock (cfg, bb, D.22230);
    i = i + 1;
    <D.21839>:
    if (i < count) goto <D.21838>; else goto <D.21840>;
    <D.21840>:
    i = 0;
    goto <D.21843>;
    <D.21842>:
    {
      struct MonoBasicBlock * out_bb;

      D.22183 = first_bb->out_bb;
      i.1 = (unsigned int) i;
      D.22220 = i.1 * 4;
      D.22231 = D.22183 + D.22220;
      out_bb = *D.22231;
      mono_link_bblock (cfg, bb, out_bb);
    }
    i = i + 1;
    <D.21843>:
    D.22185 = first_bb->out_count;
    D.22232 = (int) D.22185;
    if (D.22232 > i) goto <D.21842>; else goto <D.21844>;
    <D.21844>:
    i = 0;
    goto <D.21847>;
    <D.21846>:
    {
      struct MonoBasicBlock * out_bb;

      D.22218 = bb->out_bb;
      i.1 = (unsigned int) i;
      D.22220 = i.1 * 4;
      D.22221 = D.22218 + D.22220;
      out_bb = *D.22221;
      mono_unlink_bblock (cfg, first_bb, out_bb);
    }
    i = i + 1;
    <D.21847>:
    D.22223 = bb->out_count;
    D.22224 = (int) D.22223;
    if (D.22224 > i) goto <D.21846>; else goto <D.21848>;
    <D.21848>:
    D.22233 = bb->next_bb;
    last_bb->next_bb = D.22233;
    D.22234 = first_bb->next_bb;
    bb->next_bb = D.22234;
    *prev = 0B;
  }
  <D.22201>:
}


mono_if_conversion (struct MonoCompile * cfg)
{
  unsigned int D.22235;
  unsigned int D.22236;
  short int D.22241;
  unsigned char D.22243;
  unsigned char D.22244;
  struct MonoBasicBlock * * D.22245;
  short int D.22246;
  short int D.22249;
  short int D.22252;
  short int D.22255;
  struct MonoBasicBlock * * D.22258;
  struct MonoBasicBlock * D.22259;
  struct MonoBasicBlock * * D.22260;
  struct MonoBasicBlock * D.22261;
  struct MonoInst * D.22264;
  short unsigned int D.22267;
  _Bool D.22268;
  _Bool D.22269;
  _Bool D.22270;
  struct MonoInst * D.22276;
  short unsigned int D.22277;
  short unsigned int D.22278;
  _Bool D.22279;
  short unsigned int D.22280;
  _Bool D.22281;
  _Bool D.22282;
  short unsigned int D.22285;
  short unsigned int D.22286;
  struct MonoBasicBlock * * D.22289;
  short unsigned int D.22291;
  short unsigned int D.22293;
  _Bool D.22296;
  _Bool D.22297;
  _Bool D.22298;
  int D.22300;
  int D.22301;
  short unsigned int D.22303;
  _Bool D.22304;
  _Bool D.22305;
  _Bool D.22306;
  short unsigned int D.22309;
  _Bool D.22310;
  _Bool D.22311;
  _Bool D.22312;
  short unsigned int D.22320;
  _Bool D.22321;
  _Bool D.22322;
  _Bool D.22323;
  short unsigned int D.22329;
  _Bool D.22330;
  _Bool D.22331;
  _Bool D.22332;
  short unsigned int D.22357;
  _Bool D.22358;
  _Bool D.22359;
  _Bool D.22360;
  short unsigned int D.22366;
  _Bool D.22367;
  _Bool D.22368;
  _Bool D.22369;
  int D.22396;
  int D.22398;
  short unsigned int D.22399;
  int D.22400;
  int D.22401;
  int D.22404;
  int D.22405;
  int D.22406;
  char D.22407;
  unsigned int D.22410;
  int D.22413;
  struct MonoInst * D.22414;
  struct MonoInst * D.22415;
  int D.22418;
  _Bool D.22419;
  unsigned int D.22421;
  unsigned int D.22424;
  struct MonoInst * D.22425;
  struct MonoInst * D.22428;
  struct MonoInst * D.22431;
  struct MonoInst * D.22434;
  struct MonoInst * D.22437;
  struct MonoInst * D.22440;
  struct MonoInst * D.22443;
  struct MonoInst * D.22446;
  struct MonoMemPool * D.22449;
  int D.22450;
  int D.22451;
  const unsigned char * D.22452;
  <unnamed type> D.22453;
  <unnamed type> D.22454;
  int D.22455;
  short unsigned int D.22456;
  <unnamed type> D.22457;
  int D.22458;
  short unsigned int D.22459;
  int D.22462;
  int D.22463;
  struct MonoBasicBlock * * D.22464;
  struct MonoBasicBlock * D.22465;
  struct MonoBasicBlock * D.22466;
  struct MonoBasicBlock * * D.22467;
  struct MonoBasicBlock * D.22468;
  struct MonoBasicBlock * D.22469;
  short int D.22470;
  struct MonoBasicBlock * D.22473;
  unsigned int D.22476;
  unsigned int D.22477;
  signed int D.22483;
  unsigned int D.22484;
  unsigned int D.22485;
  signed int D.22487;
  unsigned int D.22488;
  unsigned int D.22489;
  short unsigned int D.22497;
  _Bool D.22498;
  _Bool D.22499;
  _Bool D.22500;
  short unsigned int D.22505;
  _Bool D.22506;
  _Bool D.22507;
  _Bool D.22508;
  short unsigned int D.22511;
  short unsigned int D.22520;
  _Bool D.22521;
  _Bool D.22522;
  _Bool D.22523;
  short unsigned int D.22576;
  short unsigned int D.22582;
  short unsigned int D.22583;
  _Bool D.22584;
  short unsigned int D.22585;
  _Bool D.22586;
  _Bool D.22587;
  short unsigned int D.22590;
  short unsigned int D.22591;
  short unsigned int D.22594;
  int D.22595;
  int D.22596;
  int D.22599;
  int D.22600;
  int D.22601;
  char D.22602;
  int D.22607;
  unsigned int D.22610;
  struct MonoInst * D.22615;
  unsigned int D.22616;
  struct MonoInst * D.22617;
  struct MonoInst * D.22620;
  struct MonoInst * D.22623;
  struct MonoInst * D.22626;
  int D.22629;
  int D.22630;
  struct MonoBasicBlock * * D.22631;
  struct MonoBasicBlock * * D.22632;
  struct MonoBasicBlock * D.22633;
  <unnamed type> D.22636;
  int D.22637;
  short unsigned int D.22638;
  int D.22639;
  short unsigned int D.22640;
  struct MonoBasicBlock * D.22641;
  struct MonoInst * D.22644;
  struct MonoInst * D.22647;
  int D.22654;
  int D.22655;
  short unsigned int D.22665;
  short unsigned int D.22666;
  _Bool D.22667;
  short unsigned int D.22668;
  _Bool D.22669;
  _Bool D.22670;
  short unsigned int D.22672;
  int D.22678;
  int D.22679;
  short int D.22688;
  struct MonoBasicBlock * * D.22690;
  struct MonoBasicBlock * D.22691;
  struct MonoBasicBlock * * D.22693;
  struct MonoBasicBlock * D.22694;
  signed int D.22696;
  unsigned int D.22697;
  unsigned int D.22698;
  short unsigned int D.22702;
  _Bool D.22703;
  _Bool D.22704;
  _Bool D.22705;
  struct MonoBasicBlock * * D.22707;
  struct MonoBasicBlock * * D.22708;
  struct MonoBasicBlock * D.22709;
  short unsigned int D.22714;
  _Bool D.22715;
  _Bool D.22716;
  _Bool D.22717;
  struct MonoBasicBlock * * D.22719;
  struct MonoBasicBlock * D.22720;
  struct MonoBasicBlock * D.22721;
  short unsigned int D.22725;
  _Bool D.22726;
  _Bool D.22727;
  _Bool D.22728;
  struct MonoBasicBlock * * D.22730;
  struct MonoBasicBlock * D.22731;
  short unsigned int D.22736;
  short unsigned int D.22737;
  int D.22739;
  short unsigned int D.22744;
  short unsigned int D.22745;
  int D.22747;
  int D.22748;
  struct MonoInst * D.22750;
  int D.22752;
  short unsigned int D.22757;
  _Bool D.22758;
  _Bool D.22759;
  _Bool D.22760;
  int D.22762;
  short unsigned int D.22765;
  int D.22767;
  int D.22769;
  struct MonoInst * D.22771;
  struct MonoInst * D.22775;
  struct MonoInst * D.22776;
  struct MonoInst * D.22781;
  int D.22786;
  int D.22787;
  short unsigned int D.22788;
  int D.22789;
  int D.22790;
  short unsigned int D.22791;
  unsigned int D.22794;
  unsigned int D.22797;
  struct MonoBasicBlock * bb;
  gboolean changed;
  void restart = <<< error >>>;

  changed = 0;
  D.22235 = cfg->opt;
  D.22236 = D.22235 & 256;
  if (D.22236 == 0) goto <D.22237>; else goto <D.22238>;
  <D.22237>:
  return;
  <D.22238>:
  bb = cfg->bb_entry;
  goto <D.21908>;
  <D.21907>:
  {
    struct MonoBasicBlock * bb1;
    struct MonoBasicBlock * bb2;

    restart:
    D.22241 = bb->out_count;
    if (D.22241 != 2) goto <D.22239>; else goto <D.22242>;
    <D.22242>:
    D.22243 = BIT_FIELD_REF <*bb, 8, 912>;
    D.22244 = D.22243 & 8;
    if (D.22244 != 0) goto <D.22239>; else goto <D.22240>;
    <D.22239>:
    // predicted unlikely by continue predictor.
    goto <D.21857>;
    <D.22240>:
    D.22245 = bb->out_bb;
    bb1 = *D.22245;
    D.22245 = bb->out_bb;
    bb2 = MEM[(struct MonoBasicBlock * *)D.22245 + 4B];
    D.22246 = bb1->in_count;
    if (D.22246 == 1) goto <D.22247>; else goto <D.22248>;
    <D.22247>:
    D.22249 = bb2->in_count;
    if (D.22249 == 1) goto <D.22250>; else goto <D.22251>;
    <D.22250>:
    D.22252 = bb1->out_count;
    if (D.22252 == 1) goto <D.22253>; else goto <D.22254>;
    <D.22253>:
    D.22255 = bb2->out_count;
    if (D.22255 == 1) goto <D.22256>; else goto <D.22257>;
    <D.22256>:
    D.22258 = bb1->out_bb;
    D.22259 = *D.22258;
    D.22260 = bb2->out_bb;
    D.22261 = *D.22260;
    if (D.22259 == D.22261) goto <D.22262>; else goto <D.22263>;
    <D.22262>:
    {
      struct MonoInst * compare;
      struct MonoInst * branch;
      struct MonoInst * ins1;
      struct MonoInst * ins2;
      struct MonoInst * cmov;
      struct MonoInst * move;
      struct MonoInst * tmp;
      struct MonoBasicBlock * true_bb;
      struct MonoBasicBlock * false_bb;
      gboolean simple;
      gboolean ret;
      int dreg;
      int tmp_reg;
      CompType comp_type;

      D.22264 = bb->last_ins;
      if (D.22264 != 0B) goto <D.22265>; else goto <D.22266>;
      <D.22265>:
      D.22264 = bb->last_ins;
      D.22267 = D.22264->opcode;
      D.22268 = D.22267 == 763;
      D.22269 = D.22267 == 446;
      D.22270 = D.22268 | D.22269;
      if (D.22270 != 0) goto <D.22271>; else goto <D.22272>;
      <D.22271>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22272>:
      <D.22266>:
      D.22264 = bb->last_ins;
      if (D.22264 == 0B) goto <D.22273>; else goto <D.22275>;
      <D.22275>:
      D.22264 = bb->last_ins;
      D.22276 = D.22264->prev;
      if (D.22276 == 0B) goto <D.22273>; else goto <D.22274>;
      <D.22273>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22274>:
      branch = bb->last_ins;
      compare = branch->prev;
      D.22277 = branch->opcode;
      D.22278 = D.22277 + 64981;
      D.22279 = D.22278 > 9;
      D.22280 = D.22277 + 64874;
      D.22281 = D.22280 > 9;
      D.22282 = D.22279 & D.22281;
      if (D.22282 != 0) goto <D.22283>; else goto <D.22284>;
      <D.22283>:
      D.22285 = branch->opcode;
      D.22286 = D.22285 + 64884;
      if (D.22286 > 9) goto <D.22287>; else goto <D.22288>;
      <D.22287>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22288>:
      <D.22284>:
      D.22289 = branch->data.op[1].many_blocks;
      true_bb = *D.22289;
      D.22289 = branch->data.op[1].many_blocks;
      false_bb = MEM[(struct MonoBasicBlock * *)D.22289 + 4B];
      ins1 = true_bb->code;
      goto <D.21873>;
      <D.21872>:
      ins1 = ins1->next;
      <D.21873>:
      if (ins1 != 0B) goto <D.22290>; else goto <D.21874>;
      <D.22290>:
      D.22291 = ins1->opcode;
      if (D.22291 == 316) goto <D.21872>; else goto <D.21874>;
      <D.21874>:
      ins2 = false_bb->code;
      goto <D.21876>;
      <D.21875>:
      ins2 = ins2->next;
      <D.21876>:
      if (ins2 != 0B) goto <D.22292>; else goto <D.21877>;
      <D.22292>:
      D.22293 = ins2->opcode;
      if (D.22293 == 316) goto <D.21875>; else goto <D.21877>;
      <D.21877>:
      D.22296 = ins1 == 0B;
      D.22297 = ins2 == 0B;
      D.22298 = D.22296 | D.22297;
      if (D.22298 != 0) goto <D.22294>; else goto <D.22299>;
      <D.22299>:
      D.22300 = ins1->dreg;
      D.22301 = ins2->dreg;
      if (D.22300 != D.22301) goto <D.22294>; else goto <D.22302>;
      <D.22302>:
      D.22300 = ins1->dreg;
      if (D.22300 == -1) goto <D.22294>; else goto <D.22295>;
      <D.22294>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22295>:
      simple = 1;
      tmp = ins1->next;
      goto <D.21879>;
      <D.21878>:
      D.22303 = tmp->opcode;
      D.22304 = D.22303 != 316;
      D.22305 = D.22303 != 446;
      D.22306 = D.22304 & D.22305;
      if (D.22306 != 0) goto <D.22307>; else goto <D.22308>;
      <D.22307>:
      simple = 0;
      <D.22308>:
      tmp = tmp->next;
      <D.21879>:
      if (tmp != 0B) goto <D.21878>; else goto <D.21880>;
      <D.21880>:
      tmp = ins2->next;
      goto <D.21882>;
      <D.21881>:
      D.22309 = tmp->opcode;
      D.22310 = D.22309 != 316;
      D.22311 = D.22309 != 446;
      D.22312 = D.22310 & D.22311;
      if (D.22312 != 0) goto <D.22313>; else goto <D.22314>;
      <D.22313>:
      simple = 0;
      <D.22314>:
      tmp = tmp->next;
      <D.21882>:
      if (tmp != 0B) goto <D.21881>; else goto <D.21883>;
      <D.21883>:
      if (simple == 0) goto <D.22315>; else goto <D.22316>;
      <D.22315>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22316>:
      D.22320 = ins1->opcode;
      D.22321 = D.22320 != 428;
      D.22322 = D.22320 != 430;
      D.22323 = D.22321 & D.22322;
      if (D.22323 != 0) goto <D.22324>; else goto <D.22317>;
      <D.22324>:
      D.22291 = ins1->opcode;
      if (D.22291 != 431) goto <D.22325>; else goto <D.22317>;
      <D.22325>:
      D.22291 = ins1->opcode;
      if (D.22291 != 962) goto <D.22326>; else goto <D.22317>;
      <D.22326>:
      D.22291 = ins1->opcode;
      if (D.22291 != 362) goto <D.22327>; else goto <D.22317>;
      <D.22327>:
      D.22291 = ins1->opcode;
      if (D.22291 != 363) goto <D.22328>; else goto <D.22317>;
      <D.22328>:
      D.22329 = ins1->opcode;
      D.22330 = D.22329 != 432;
      D.22331 = D.22329 != 963;
      D.22332 = D.22330 & D.22331;
      if (D.22332 != 0) goto <D.22333>; else goto <D.22317>;
      <D.22333>:
      D.22291 = ins1->opcode;
      if (D.22291 != 433) goto <D.22334>; else goto <D.22317>;
      <D.22334>:
      D.22291 = ins1->opcode;
      if (D.22291 != 365) goto <D.22335>; else goto <D.22317>;
      <D.22335>:
      D.22291 = ins1->opcode;
      if (D.22291 != 542) goto <D.22336>; else goto <D.22317>;
      <D.22336>:
      D.22291 = ins1->opcode;
      if (D.22291 != 630) goto <D.22337>; else goto <D.22317>;
      <D.22337>:
      D.22291 = ins1->opcode;
      if (D.22291 != 629) goto <D.22338>; else goto <D.22317>;
      <D.22338>:
      D.22291 = ins1->opcode;
      if (D.22291 != 496) goto <D.22339>; else goto <D.22317>;
      <D.22339>:
      D.22291 = ins1->opcode;
      if (D.22291 != 570) goto <D.22340>; else goto <D.22317>;
      <D.22340>:
      D.22291 = ins1->opcode;
      if (D.22291 != 979) goto <D.22341>; else goto <D.22317>;
      <D.22341>:
      D.22291 = ins1->opcode;
      if (D.22291 != 639) goto <D.22342>; else goto <D.22317>;
      <D.22342>:
      D.22291 = ins1->opcode;
      if (D.22291 != 640) goto <D.22343>; else goto <D.22317>;
      <D.22343>:
      D.22291 = ins1->opcode;
      if (D.22291 != 641) goto <D.22344>; else goto <D.22317>;
      <D.22344>:
      D.22291 = ins1->opcode;
      if (D.22291 != 636) goto <D.22345>; else goto <D.22317>;
      <D.22345>:
      D.22291 = ins1->opcode;
      if (D.22291 != 595) goto <D.22346>; else goto <D.22317>;
      <D.22346>:
      D.22291 = ins1->opcode;
      if (D.22291 != 584) goto <D.22347>; else goto <D.22317>;
      <D.22347>:
      D.22291 = ins1->opcode;
      if (D.22291 != 766) goto <D.22348>; else goto <D.22317>;
      <D.22348>:
      D.22291 = ins1->opcode;
      if (D.22291 != 507) goto <D.22349>; else goto <D.22317>;
      <D.22349>:
      D.22291 = ins1->opcode;
      if (D.22291 != 594) goto <D.22350>; else goto <D.22317>;
      <D.22350>:
      D.22291 = ins1->opcode;
      if (D.22291 != 585) goto <D.22351>; else goto <D.22317>;
      <D.22351>:
      D.22291 = ins1->opcode;
      if (D.22291 != 499) goto <D.22352>; else goto <D.22317>;
      <D.22352>:
      D.22291 = ins1->opcode;
      if (D.22291 != 314) goto <D.22353>; else goto <D.22317>;
      <D.22353>:
      D.22291 = ins1->opcode;
      if (D.22291 != 319) goto <D.22354>; else goto <D.22317>;
      <D.22354>:
      D.22291 = ins1->opcode;
      if (D.22291 != 316) goto <D.22355>; else goto <D.22317>;
      <D.22355>:
      D.22291 = ins1->opcode;
      if (D.22291 != 769) goto <D.22356>; else goto <D.22317>;
      <D.22356>:
      D.22291 = ins1->opcode;
      if (D.22291 != 803) goto <D.22318>; else goto <D.22317>;
      <D.22317>:
      D.22357 = ins2->opcode;
      D.22358 = D.22357 != 428;
      D.22359 = D.22357 != 430;
      D.22360 = D.22358 & D.22359;
      if (D.22360 != 0) goto <D.22361>; else goto <D.22319>;
      <D.22361>:
      D.22293 = ins2->opcode;
      if (D.22293 != 431) goto <D.22362>; else goto <D.22319>;
      <D.22362>:
      D.22293 = ins2->opcode;
      if (D.22293 != 962) goto <D.22363>; else goto <D.22319>;
      <D.22363>:
      D.22293 = ins2->opcode;
      if (D.22293 != 362) goto <D.22364>; else goto <D.22319>;
      <D.22364>:
      D.22293 = ins2->opcode;
      if (D.22293 != 363) goto <D.22365>; else goto <D.22319>;
      <D.22365>:
      D.22366 = ins2->opcode;
      D.22367 = D.22366 != 432;
      D.22368 = D.22366 != 963;
      D.22369 = D.22367 & D.22368;
      if (D.22369 != 0) goto <D.22370>; else goto <D.22319>;
      <D.22370>:
      D.22293 = ins2->opcode;
      if (D.22293 != 433) goto <D.22371>; else goto <D.22319>;
      <D.22371>:
      D.22293 = ins2->opcode;
      if (D.22293 != 365) goto <D.22372>; else goto <D.22319>;
      <D.22372>:
      D.22293 = ins2->opcode;
      if (D.22293 != 542) goto <D.22373>; else goto <D.22319>;
      <D.22373>:
      D.22293 = ins2->opcode;
      if (D.22293 != 630) goto <D.22374>; else goto <D.22319>;
      <D.22374>:
      D.22293 = ins2->opcode;
      if (D.22293 != 629) goto <D.22375>; else goto <D.22319>;
      <D.22375>:
      D.22293 = ins2->opcode;
      if (D.22293 != 496) goto <D.22376>; else goto <D.22319>;
      <D.22376>:
      D.22293 = ins2->opcode;
      if (D.22293 != 570) goto <D.22377>; else goto <D.22319>;
      <D.22377>:
      D.22293 = ins2->opcode;
      if (D.22293 != 979) goto <D.22378>; else goto <D.22319>;
      <D.22378>:
      D.22293 = ins2->opcode;
      if (D.22293 != 639) goto <D.22379>; else goto <D.22319>;
      <D.22379>:
      D.22293 = ins2->opcode;
      if (D.22293 != 640) goto <D.22380>; else goto <D.22319>;
      <D.22380>:
      D.22293 = ins2->opcode;
      if (D.22293 != 641) goto <D.22381>; else goto <D.22319>;
      <D.22381>:
      D.22293 = ins2->opcode;
      if (D.22293 != 636) goto <D.22382>; else goto <D.22319>;
      <D.22382>:
      D.22293 = ins2->opcode;
      if (D.22293 != 595) goto <D.22383>; else goto <D.22319>;
      <D.22383>:
      D.22293 = ins2->opcode;
      if (D.22293 != 584) goto <D.22384>; else goto <D.22319>;
      <D.22384>:
      D.22293 = ins2->opcode;
      if (D.22293 != 766) goto <D.22385>; else goto <D.22319>;
      <D.22385>:
      D.22293 = ins2->opcode;
      if (D.22293 != 507) goto <D.22386>; else goto <D.22319>;
      <D.22386>:
      D.22293 = ins2->opcode;
      if (D.22293 != 594) goto <D.22387>; else goto <D.22319>;
      <D.22387>:
      D.22293 = ins2->opcode;
      if (D.22293 != 585) goto <D.22388>; else goto <D.22319>;
      <D.22388>:
      D.22293 = ins2->opcode;
      if (D.22293 != 499) goto <D.22389>; else goto <D.22319>;
      <D.22389>:
      D.22293 = ins2->opcode;
      if (D.22293 != 314) goto <D.22390>; else goto <D.22319>;
      <D.22390>:
      D.22293 = ins2->opcode;
      if (D.22293 != 319) goto <D.22391>; else goto <D.22319>;
      <D.22391>:
      D.22293 = ins2->opcode;
      if (D.22293 != 316) goto <D.22392>; else goto <D.22319>;
      <D.22392>:
      D.22293 = ins2->opcode;
      if (D.22293 != 769) goto <D.22393>; else goto <D.22319>;
      <D.22393>:
      D.22293 = ins2->opcode;
      if (D.22293 != 803) goto <D.22318>; else goto <D.22319>;
      <D.22318>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22319>:
      D.22396 = compare->sreg1;
      D.22300 = ins1->dreg;
      if (D.22396 == D.22300) goto <D.22394>; else goto <D.22397>;
      <D.22397>:
      D.22398 = compare->sreg2;
      D.22300 = ins1->dreg;
      if (D.22398 == D.22300) goto <D.22394>; else goto <D.22395>;
      <D.22394>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22395>:
      D.22399 = compare->opcode;
      D.22400 = (int) D.22399;
      D.22285 = branch->opcode;
      D.22401 = (int) D.22285;
      comp_type = mono_opcode_to_type (D.22401, D.22400);
      if (comp_type > 1) goto <D.22402>; else goto <D.22403>;
      <D.22402>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22403>:
      D.22291 = ins1->opcode;
      D.22404 = (int) D.22291;
      D.22405 = D.22404 + -313;
      D.22406 = D.22405 * 4;
      D.22407 = ins_info[D.22406];
      if (D.22407 != 105) goto <D.22408>; else goto <D.22409>;
      <D.22408>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22409>:
      D.22410 = cfg->verbose_level;
      if (D.22410 > 2) goto <D.22411>; else goto <D.22412>;
      <D.22411>:
      D.22413 = bb->block_num;
      printf ("\tBranch -> CMove optimization in BB%d on\n", D.22413);
      printf ("\t\t");
      mono_print_ins (compare);
      printf ("\t\t");
      D.22414 = compare->next;
      mono_print_ins (D.22414);
      printf ("\t\t");
      mono_print_ins (ins1);
      printf ("\t\t");
      mono_print_ins (ins2);
      <D.22412>:
      changed = 1;
      D.22415 = cfg->ret;
      if (D.22415 != 0B) goto <D.22416>; else goto <D.22417>;
      <D.22416>:
      D.22300 = ins1->dreg;
      D.22415 = cfg->ret;
      D.22418 = D.22415->dreg;
      D.22419 = D.22300 == D.22418;
      ret = (gboolean) D.22419;
      goto <D.22420>;
      <D.22417>:
      ret = 0;
      <D.22420>:
      D.22421 = mono_alloc_dreg (cfg, 1);
      tmp_reg = (int) D.22421;
      dreg = ins1->dreg;
      ins1->dreg = tmp_reg;
      if (ret != 0) goto <D.22422>; else goto <D.22423>;
      <D.22422>:
      D.22424 = mono_alloc_dreg (cfg, 1);
      dreg = (int) D.22424;
      ins2->dreg = dreg;
      <D.22423>:
      D.22425 = ins1->prev;
      if (D.22425 != 0B) goto <D.22426>; else goto <D.22427>;
      <D.22426>:
      D.22425 = ins1->prev;
      D.22428 = ins1->next;
      D.22425->next = D.22428;
      <D.22427>:
      D.22428 = ins1->next;
      if (D.22428 != 0B) goto <D.22429>; else goto <D.22430>;
      <D.22429>:
      D.22428 = ins1->next;
      D.22425 = ins1->prev;
      D.22428->prev = D.22425;
      <D.22430>:
      D.22431 = true_bb->code;
      if (D.22431 == ins1) goto <D.22432>; else goto <D.22433>;
      <D.22432>:
      D.22428 = ins1->next;
      true_bb->code = D.22428;
      <D.22433>:
      D.22434 = true_bb->last_ins;
      if (D.22434 == ins1) goto <D.22435>; else goto <D.22436>;
      <D.22435>:
      D.22425 = ins1->prev;
      true_bb->last_ins = D.22425;
      <D.22436>:
      D.22437 = ins2->prev;
      if (D.22437 != 0B) goto <D.22438>; else goto <D.22439>;
      <D.22438>:
      D.22437 = ins2->prev;
      D.22440 = ins2->next;
      D.22437->next = D.22440;
      <D.22439>:
      D.22440 = ins2->next;
      if (D.22440 != 0B) goto <D.22441>; else goto <D.22442>;
      <D.22441>:
      D.22440 = ins2->next;
      D.22437 = ins2->prev;
      D.22440->prev = D.22437;
      <D.22442>:
      D.22443 = false_bb->code;
      if (D.22443 == ins2) goto <D.22444>; else goto <D.22445>;
      <D.22444>:
      D.22440 = ins2->next;
      false_bb->code = D.22440;
      <D.22445>:
      D.22446 = false_bb->last_ins;
      if (D.22446 == ins2) goto <D.22447>; else goto <D.22448>;
      <D.22447>:
      D.22437 = ins2->prev;
      false_bb->last_ins = D.22437;
      <D.22448>:
      mono_bblock_insert_before_ins (bb, compare, ins2);
      mono_bblock_insert_before_ins (bb, ins2, ins1);
      D.22449 = cfg->mempool;
      cmov = mono_mempool_alloc0 (D.22449, 48);
      cmov->opcode = 316;
      cmov->dreg = -1;
      cmov->sreg3 = -1;
      D.22450 = cmov->sreg3;
      cmov->sreg2 = D.22450;
      D.22451 = cmov->sreg2;
      cmov->sreg1 = D.22451;
      D.22452 = cfg->ip;
      cmov->cil_code = D.22452;
      cmov->dreg = dreg;
      cmov->sreg1 = dreg;
      cmov->sreg2 = tmp_reg;
      D.22399 = compare->opcode;
      D.22400 = (int) D.22399;
      D.22285 = branch->opcode;
      D.22401 = (int) D.22285;
      D.22453 = mono_opcode_to_type (D.22401, D.22400);
      switch (D.22453) <default: <D.21887>, case 0: <D.21886>, case 1: <D.21884>>
      <D.21884>:
      D.22285 = branch->opcode;
      D.22401 = (int) D.22285;
      D.22454 = mono_opcode_to_cond (D.22401);
      D.22455 = int_cmov_opcodes[D.22454];
      D.22456 = (short unsigned int) D.22455;
      cmov->opcode = D.22456;
      goto <D.21885>;
      <D.21886>:
      D.22285 = branch->opcode;
      D.22401 = (int) D.22285;
      D.22457 = mono_opcode_to_cond (D.22401);
      D.22458 = long_cmov_opcodes[D.22457];
      D.22459 = (short unsigned int) D.22458;
      cmov->opcode = D.22459;
      goto <D.21885>;
      <D.21887>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "branch-opts.c", 432);
      <D.21885>:
      mono_bblock_insert_after_ins (bb, compare, cmov);
      if (ret != 0) goto <D.22460>; else goto <D.22461>;
      <D.22460>:
      D.22449 = cfg->mempool;
      move = mono_mempool_alloc0 (D.22449, 48);
      move->opcode = 428;
      move->dreg = -1;
      move->sreg3 = -1;
      D.22462 = move->sreg3;
      move->sreg2 = D.22462;
      D.22463 = move->sreg2;
      move->sreg1 = D.22463;
      D.22452 = cfg->ip;
      move->cil_code = D.22452;
      D.22415 = cfg->ret;
      D.22418 = D.22415->dreg;
      move->dreg = D.22418;
      move->sreg1 = dreg;
      mono_bblock_insert_after_ins (bb, cmov, move);
      <D.22461>:
      branch->opcode = 446;
      D.22464 = true_bb->out_bb;
      D.22465 = *D.22464;
      branch->data.op[0].target_block = D.22465;
      D.22466 = branch->data.op[0].target_block;
      mono_link_bblock (cfg, bb, D.22466);
      mono_unlink_bblock (cfg, bb, true_bb);
      mono_unlink_bblock (cfg, bb, false_bb);
      D.22464 = true_bb->out_bb;
      D.22465 = *D.22464;
      mono_unlink_bblock (cfg, true_bb, D.22465);
      D.22467 = false_bb->out_bb;
      D.22468 = *D.22467;
      mono_unlink_bblock (cfg, false_bb, D.22468);
      mono_remove_bblock (cfg, true_bb);
      mono_remove_bblock (cfg, false_bb);
      D.22245 = bb->out_bb;
      D.22469 = *D.22245;
      D.22470 = D.22469->in_count;
      if (D.22470 == 1) goto <D.22471>; else goto <D.22472>;
      <D.22471>:
      D.22245 = bb->out_bb;
      D.22469 = *D.22245;
      D.22473 = cfg->bb_exit;
      if (D.22469 != D.22473) goto <D.22474>; else goto <D.22475>;
      <D.22474>:
      D.22476 = bb->region;
      D.22245 = bb->out_bb;
      D.22469 = *D.22245;
      D.22477 = D.22469->region;
      if (D.22476 == D.22477) goto <D.22478>; else goto <D.22479>;
      <D.22478>:
      D.22245 = bb->out_bb;
      D.22469 = *D.22245;
      mono_merge_basic_blocks (cfg, bb, D.22469);
      goto restart;
      <D.22479>:
      <D.22475>:
      <D.22472>:
    }
    <D.22263>:
    <D.22257>:
    <D.22254>:
    <D.22251>:
    <D.22248>:
    D.22483 = BIT_FIELD_REF <*bb2, 32, 160>;
    D.22484 = (unsigned int) D.22483;
    D.22485 = D.22484;
    if (D.22485 == 65537) goto <D.22486>; else goto <D.22480>;
    <D.22486>:
    D.22260 = bb2->out_bb;
    D.22261 = *D.22260;
    if (D.22261 == bb1) goto <D.22481>; else goto <D.22480>;
    <D.22480>:
    D.22487 = BIT_FIELD_REF <*bb1, 32, 160>;
    D.22488 = (unsigned int) D.22487;
    D.22489 = D.22488;
    if (D.22489 == 65537) goto <D.22490>; else goto <D.22482>;
    <D.22490>:
    D.22258 = bb1->out_bb;
    D.22259 = *D.22258;
    if (D.22259 == bb2) goto <D.22481>; else goto <D.22482>;
    <D.22481>:
    {
      struct MonoInst * compare;
      struct MonoInst * branch;
      struct MonoInst * ins1;
      struct MonoInst * cmov;
      struct MonoInst * tmp;
      gboolean simple;
      int dreg;
      int tmp_reg;
      CompType comp_type;
      CompRelation cond;
      struct MonoBasicBlock * next_bb;
      struct MonoBasicBlock * code_bb;

      D.22483 = BIT_FIELD_REF <*bb2, 32, 160>;
      D.22484 = (unsigned int) D.22483;
      D.22485 = D.22484;
      if (D.22485 == 65537) goto <D.22493>; else goto <D.22491>;
      <D.22493>:
      D.22260 = bb2->out_bb;
      D.22261 = *D.22260;
      if (D.22261 == bb1) goto <D.22494>; else goto <D.22491>;
      <D.22494>:
      code_bb = bb2;
      next_bb = bb1;
      goto <D.22492>;
      <D.22491>:
      code_bb = bb1;
      next_bb = bb2;
      <D.22492>:
      ins1 = code_bb->code;
      if (ins1 == 0B) goto <D.22495>; else goto <D.22496>;
      <D.22495>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22496>:
      simple = 1;
      tmp = ins1->next;
      goto <D.21901>;
      <D.21900>:
      D.22497 = tmp->opcode;
      D.22498 = D.22497 != 316;
      D.22499 = D.22497 != 446;
      D.22500 = D.22498 & D.22499;
      if (D.22500 != 0) goto <D.22501>; else goto <D.22502>;
      <D.22501>:
      simple = 0;
      <D.22502>:
      tmp = tmp->next;
      <D.21901>:
      if (tmp != 0B) goto <D.21900>; else goto <D.21902>;
      <D.21902>:
      if (simple == 0) goto <D.22503>; else goto <D.22504>;
      <D.22503>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22504>:
      D.22505 = ins1->opcode;
      D.22506 = D.22505 != 428;
      D.22507 = D.22505 != 430;
      D.22508 = D.22506 & D.22507;
      if (D.22508 != 0) goto <D.22509>; else goto <D.22510>;
      <D.22509>:
      D.22511 = ins1->opcode;
      if (D.22511 != 431) goto <D.22512>; else goto <D.22513>;
      <D.22512>:
      D.22511 = ins1->opcode;
      if (D.22511 != 962) goto <D.22514>; else goto <D.22515>;
      <D.22514>:
      D.22511 = ins1->opcode;
      if (D.22511 != 362) goto <D.22516>; else goto <D.22517>;
      <D.22516>:
      D.22511 = ins1->opcode;
      if (D.22511 != 363) goto <D.22518>; else goto <D.22519>;
      <D.22518>:
      D.22520 = ins1->opcode;
      D.22521 = D.22520 != 432;
      D.22522 = D.22520 != 963;
      D.22523 = D.22521 & D.22522;
      if (D.22523 != 0) goto <D.22524>; else goto <D.22525>;
      <D.22524>:
      D.22511 = ins1->opcode;
      if (D.22511 != 433) goto <D.22526>; else goto <D.22527>;
      <D.22526>:
      D.22511 = ins1->opcode;
      if (D.22511 != 365) goto <D.22528>; else goto <D.22529>;
      <D.22528>:
      D.22511 = ins1->opcode;
      if (D.22511 != 542) goto <D.22530>; else goto <D.22531>;
      <D.22530>:
      D.22511 = ins1->opcode;
      if (D.22511 != 630) goto <D.22532>; else goto <D.22533>;
      <D.22532>:
      D.22511 = ins1->opcode;
      if (D.22511 != 629) goto <D.22534>; else goto <D.22535>;
      <D.22534>:
      D.22511 = ins1->opcode;
      if (D.22511 != 496) goto <D.22536>; else goto <D.22537>;
      <D.22536>:
      D.22511 = ins1->opcode;
      if (D.22511 != 570) goto <D.22538>; else goto <D.22539>;
      <D.22538>:
      D.22511 = ins1->opcode;
      if (D.22511 != 979) goto <D.22540>; else goto <D.22541>;
      <D.22540>:
      D.22511 = ins1->opcode;
      if (D.22511 != 639) goto <D.22542>; else goto <D.22543>;
      <D.22542>:
      D.22511 = ins1->opcode;
      if (D.22511 != 640) goto <D.22544>; else goto <D.22545>;
      <D.22544>:
      D.22511 = ins1->opcode;
      if (D.22511 != 641) goto <D.22546>; else goto <D.22547>;
      <D.22546>:
      D.22511 = ins1->opcode;
      if (D.22511 != 636) goto <D.22548>; else goto <D.22549>;
      <D.22548>:
      D.22511 = ins1->opcode;
      if (D.22511 != 595) goto <D.22550>; else goto <D.22551>;
      <D.22550>:
      D.22511 = ins1->opcode;
      if (D.22511 != 584) goto <D.22552>; else goto <D.22553>;
      <D.22552>:
      D.22511 = ins1->opcode;
      if (D.22511 != 766) goto <D.22554>; else goto <D.22555>;
      <D.22554>:
      D.22511 = ins1->opcode;
      if (D.22511 != 507) goto <D.22556>; else goto <D.22557>;
      <D.22556>:
      D.22511 = ins1->opcode;
      if (D.22511 != 594) goto <D.22558>; else goto <D.22559>;
      <D.22558>:
      D.22511 = ins1->opcode;
      if (D.22511 != 585) goto <D.22560>; else goto <D.22561>;
      <D.22560>:
      D.22511 = ins1->opcode;
      if (D.22511 != 499) goto <D.22562>; else goto <D.22563>;
      <D.22562>:
      D.22511 = ins1->opcode;
      if (D.22511 != 314) goto <D.22564>; else goto <D.22565>;
      <D.22564>:
      D.22511 = ins1->opcode;
      if (D.22511 != 319) goto <D.22566>; else goto <D.22567>;
      <D.22566>:
      D.22511 = ins1->opcode;
      if (D.22511 != 316) goto <D.22568>; else goto <D.22569>;
      <D.22568>:
      D.22511 = ins1->opcode;
      if (D.22511 != 769) goto <D.22570>; else goto <D.22571>;
      <D.22570>:
      D.22511 = ins1->opcode;
      if (D.22511 != 803) goto <D.22572>; else goto <D.22573>;
      <D.22572>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22573>:
      <D.22571>:
      <D.22569>:
      <D.22567>:
      <D.22565>:
      <D.22563>:
      <D.22561>:
      <D.22559>:
      <D.22557>:
      <D.22555>:
      <D.22553>:
      <D.22551>:
      <D.22549>:
      <D.22547>:
      <D.22545>:
      <D.22543>:
      <D.22541>:
      <D.22539>:
      <D.22537>:
      <D.22535>:
      <D.22533>:
      <D.22531>:
      <D.22529>:
      <D.22527>:
      <D.22525>:
      <D.22519>:
      <D.22517>:
      <D.22515>:
      <D.22513>:
      <D.22510>:
      D.22264 = bb->last_ins;
      if (D.22264 != 0B) goto <D.22574>; else goto <D.22575>;
      <D.22574>:
      D.22264 = bb->last_ins;
      D.22576 = D.22264->opcode;
      if (D.22576 == 763) goto <D.22577>; else goto <D.22578>;
      <D.22577>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22578>:
      <D.22575>:
      D.22264 = bb->last_ins;
      if (D.22264 == 0B) goto <D.22579>; else goto <D.22581>;
      <D.22581>:
      D.22264 = bb->last_ins;
      D.22276 = D.22264->prev;
      if (D.22276 == 0B) goto <D.22579>; else goto <D.22580>;
      <D.22579>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22580>:
      branch = bb->last_ins;
      compare = branch->prev;
      D.22582 = branch->opcode;
      D.22583 = D.22582 + 64981;
      D.22584 = D.22583 > 9;
      D.22585 = D.22582 + 64874;
      D.22586 = D.22585 > 9;
      D.22587 = D.22584 & D.22586;
      if (D.22587 != 0) goto <D.22588>; else goto <D.22589>;
      <D.22588>:
      D.22590 = branch->opcode;
      D.22591 = D.22590 + 64884;
      if (D.22591 > 9) goto <D.22592>; else goto <D.22593>;
      <D.22592>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22593>:
      <D.22589>:
      D.22594 = compare->opcode;
      D.22595 = (int) D.22594;
      D.22590 = branch->opcode;
      D.22596 = (int) D.22590;
      comp_type = mono_opcode_to_type (D.22596, D.22595);
      if (comp_type > 1) goto <D.22597>; else goto <D.22598>;
      <D.22597>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22598>:
      D.22511 = ins1->opcode;
      D.22599 = (int) D.22511;
      D.22600 = D.22599 + -313;
      D.22601 = D.22600 * 4;
      D.22602 = ins_info[D.22601];
      if (D.22602 != 105) goto <D.22603>; else goto <D.22604>;
      <D.22603>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22604>:
      D.22415 = cfg->ret;
      if (D.22415 != 0B) goto <D.22605>; else goto <D.22606>;
      <D.22605>:
      D.22607 = ins1->dreg;
      D.22415 = cfg->ret;
      D.22418 = D.22415->dreg;
      if (D.22607 == D.22418) goto <D.22608>; else goto <D.22609>;
      <D.22608>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22609>:
      <D.22606>:
      D.22235 = cfg->opt;
      D.22610 = D.22235 & 64;
      if (D.22610 == 0) goto <D.22611>; else goto <D.22612>;
      <D.22611>:
      // predicted unlikely by continue predictor.
      goto <D.21857>;
      <D.22612>:
      D.22410 = cfg->verbose_level;
      if (D.22410 > 2) goto <D.22613>; else goto <D.22614>;
      <D.22613>:
      D.22413 = bb->block_num;
      printf ("\tBranch -> CMove optimization (2) in BB%d on\n", D.22413);
      printf ("\t\t");
      mono_print_ins (compare);
      printf ("\t\t");
      D.22615 = compare->next;
      mono_print_ins (D.22615);
      printf ("\t\t");
      mono_print_ins (ins1);
      <D.22614>:
      changed = 1;
      D.22616 = mono_alloc_dreg (cfg, 1);
      tmp_reg = (int) D.22616;
      dreg = ins1->dreg;
      ins1->dreg = tmp_reg;
      D.22617 = ins1->prev;
      if (D.22617 != 0B) goto <D.22618>; else goto <D.22619>;
      <D.22618>:
      D.22617 = ins1->prev;
      D.22620 = ins1->next;
      D.22617->next = D.22620;
      <D.22619>:
      D.22620 = ins1->next;
      if (D.22620 != 0B) goto <D.22621>; else goto <D.22622>;
      <D.22621>:
      D.22620 = ins1->next;
      D.22617 = ins1->prev;
      D.22620->prev = D.22617;
      <D.22622>:
      D.22623 = code_bb->code;
      if (D.22623 == ins1) goto <D.22624>; else goto <D.22625>;
      <D.22624>:
      D.22620 = ins1->next;
      code_bb->code = D.22620;
      <D.22625>:
      D.22626 = code_bb->last_ins;
      if (D.22626 == ins1) goto <D.22627>; else goto <D.22628>;
      <D.22627>:
      D.22617 = ins1->prev;
      code_bb->last_ins = D.22617;
      <D.22628>:
      mono_bblock_insert_before_ins (bb, compare, ins1);
      D.22449 = cfg->mempool;
      cmov = mono_mempool_alloc0 (D.22449, 48);
      cmov->opcode = 316;
      cmov->dreg = -1;
      cmov->sreg3 = -1;
      D.22629 = cmov->sreg3;
      cmov->sreg2 = D.22629;
      D.22630 = cmov->sreg2;
      cmov->sreg1 = D.22630;
      D.22452 = cfg->ip;
      cmov->cil_code = D.22452;
      cmov->dreg = dreg;
      cmov->sreg1 = dreg;
      cmov->sreg2 = tmp_reg;
      D.22590 = branch->opcode;
      D.22596 = (int) D.22590;
      cond = mono_opcode_to_cond (D.22596);
      D.22631 = branch->data.op[1].many_blocks;
      D.22632 = D.22631 + 4;
      D.22633 = *D.22632;
      if (D.22633 == code_bb) goto <D.22634>; else goto <D.22635>;
      <D.22634>:
      cond = mono_negate_cond (cond);
      <D.22635>:
      D.22594 = compare->opcode;
      D.22595 = (int) D.22594;
      D.22590 = branch->opcode;
      D.22596 = (int) D.22590;
      D.22636 = mono_opcode_to_type (D.22596, D.22595);
      switch (D.22636) <default: <D.21906>, case 0: <D.21905>, case 1: <D.21903>>
      <D.21903>:
      D.22637 = int_cmov_opcodes[cond];
      D.22638 = (short unsigned int) D.22637;
      cmov->opcode = D.22638;
      goto <D.21904>;
      <D.21905>:
      D.22639 = long_cmov_opcodes[cond];
      D.22640 = (short unsigned int) D.22639;
      cmov->opcode = D.22640;
      goto <D.21904>;
      <D.21906>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "branch-opts.c", 584);
      <D.21904>:
      mono_bblock_insert_after_ins (bb, compare, cmov);
      branch->opcode = 446;
      branch->data.op[0].target_block = next_bb;
      D.22641 = branch->data.op[0].target_block;
      mono_link_bblock (cfg, bb, D.22641);
      D.22623 = code_bb->code;
      if (D.22623 != 0B) goto <D.22642>; else goto <D.22643>;
      <D.22642>:
      branch = code_bb->code;
      D.22644 = branch->prev;
      if (D.22644 != 0B) goto <D.22645>; else goto <D.22646>;
      <D.22645>:
      D.22644 = branch->prev;
      D.22647 = branch->next;
      D.22644->next = D.22647;
      <D.22646>:
      D.22647 = branch->next;
      if (D.22647 != 0B) goto <D.22648>; else goto <D.22649>;
      <D.22648>:
      D.22647 = branch->next;
      D.22644 = branch->prev;
      D.22647->prev = D.22644;
      <D.22649>:
      D.22623 = code_bb->code;
      if (D.22623 == branch) goto <D.22650>; else goto <D.22651>;
      <D.22650>:
      D.22647 = branch->next;
      code_bb->code = D.22647;
      <D.22651>:
      D.22626 = code_bb->last_ins;
      if (D.22626 == branch) goto <D.22652>; else goto <D.22653>;
      <D.22652>:
      D.22644 = branch->prev;
      code_bb->last_ins = D.22644;
      <D.22653>:
      branch->opcode = 316;
      branch->dreg = -1;
      branch->sreg3 = -1;
      D.22654 = branch->sreg3;
      branch->sreg2 = D.22654;
      D.22655 = branch->sreg2;
      branch->sreg1 = D.22655;
      <D.22643>:
      mono_unlink_bblock (cfg, bb, code_bb);
      mono_unlink_bblock (cfg, code_bb, next_bb);
      D.22245 = bb->out_bb;
      D.22469 = *D.22245;
      D.22470 = D.22469->in_count;
      if (D.22470 == 1) goto <D.22656>; else goto <D.22657>;
      <D.22656>:
      D.22245 = bb->out_bb;
      D.22469 = *D.22245;
      D.22473 = cfg->bb_exit;
      if (D.22469 != D.22473) goto <D.22658>; else goto <D.22659>;
      <D.22658>:
      D.22476 = bb->region;
      D.22245 = bb->out_bb;
      D.22469 = *D.22245;
      D.22477 = D.22469->region;
      if (D.22476 == D.22477) goto <D.22660>; else goto <D.22661>;
      <D.22660>:
      D.22245 = bb->out_bb;
      D.22469 = *D.22245;
      mono_merge_basic_blocks (cfg, bb, D.22469);
      D.22264 = bb->last_ins;
      if (D.22264 == 0B) goto <D.22662>; else goto <D.22664>;
      <D.22664>:
      D.22264 = bb->last_ins;
      D.22665 = D.22264->opcode;
      D.22666 = D.22665 + 64981;
      D.22667 = D.22666 > 9;
      D.22668 = D.22665 + 64874;
      D.22669 = D.22668 > 9;
      D.22670 = D.22667 & D.22669;
      if (D.22670 != 0) goto <D.22671>; else goto <D.22663>;
      <D.22671>:
      D.22264 = bb->last_ins;
      D.22576 = D.22264->opcode;
      D.22672 = D.22576 + 64884;
      if (D.22672 > 9) goto <D.22673>; else goto <D.22663>;
      <D.22673>:
      D.22264 = bb->last_ins;
      D.22576 = D.22264->opcode;
      if (D.22576 != 446) goto <D.22674>; else goto <D.22663>;
      <D.22674>:
      D.22264 = bb->last_ins;
      D.22576 = D.22264->opcode;
      if (D.22576 != 763) goto <D.22675>; else goto <D.22663>;
      <D.22675>:
      D.22264 = bb->last_ins;
      D.22576 = D.22264->opcode;
      if (D.22576 != 370) goto <D.22662>; else goto <D.22663>;
      <D.22662>:
      D.22241 = bb->out_count;
      if (D.22241 != 0) goto <D.22676>; else goto <D.22677>;
      <D.22676>:
      D.22449 = cfg->mempool;
      ins1 = mono_mempool_alloc0 (D.22449, 48);
      ins1->opcode = 446;
      ins1->dreg = -1;
      ins1->sreg3 = -1;
      D.22678 = ins1->sreg3;
      ins1->sreg2 = D.22678;
      D.22679 = ins1->sreg2;
      ins1->sreg1 = D.22679;
      D.22452 = cfg->ip;
      ins1->cil_code = D.22452;
      D.22245 = bb->out_bb;
      D.22469 = *D.22245;
      ins1->data.op[0].target_block = D.22469;
      D.22264 = bb->last_ins;
      if (D.22264 != 0B) goto <D.22680>; else goto <D.22681>;
      <D.22680>:
      D.22264 = bb->last_ins;
      D.22264->next = ins1;
      D.22264 = bb->last_ins;
      ins1->prev = D.22264;
      bb->last_ins = ins1;
      goto <D.22682>;
      <D.22681>:
      bb->last_ins = ins1;
      D.22264 = bb->last_ins;
      bb->code = D.22264;
      <D.22682>:
      <D.22677>:
      <D.22663>:
      goto restart;
      <D.22661>:
      <D.22659>:
      <D.22657>:
    }
    <D.22482>:
  }
  <D.21857>:
  bb = bb->next_bb;
  <D.21908>:
  if (bb != 0B) goto <D.21907>; else goto <D.21909>;
  <D.21909>:
  bb = cfg->bb_entry;
  goto <D.21921>;
  <D.21920>:
  {
    struct MonoBasicBlock * bb1;
    struct MonoBasicBlock * bb2;
    struct MonoBasicBlock * true_bb;
    struct MonoBasicBlock * false_bb;
    struct MonoBasicBlock * next_bb;
    struct MonoInst * branch1;
    struct MonoInst * branch2;
    struct MonoInst * compare1;
    struct MonoInst * ins;

    D.22241 = bb->out_count;
    if (D.22241 != 2) goto <D.22683>; else goto <D.22685>;
    <D.22685>:
    D.22243 = BIT_FIELD_REF <*bb, 8, 912>;
    D.22244 = D.22243 & 8;
    if (D.22244 != 0) goto <D.22683>; else goto <D.22684>;
    <D.22683>:
    // predicted unlikely by continue predictor.
    goto <D.21919>;
    <D.22684>:
    D.22245 = bb->out_bb;
    bb1 = *D.22245;
    D.22245 = bb->out_bb;
    bb2 = MEM[(struct MonoBasicBlock * *)D.22245 + 4B];
    D.22688 = bb1->in_count;
    if (D.22688 != 2) goto <D.22686>; else goto <D.22689>;
    <D.22689>:
    D.22690 = bb1->in_bb;
    D.22691 = *D.22690;
    if (D.22691 != bb) goto <D.22686>; else goto <D.22692>;
    <D.22692>:
    D.22690 = bb1->in_bb;
    D.22693 = D.22690 + 4;
    D.22694 = *D.22693;
    if (D.22694 != bb2) goto <D.22686>; else goto <D.22695>;
    <D.22695>:
    D.22696 = BIT_FIELD_REF <*bb2, 32, 160>;
    D.22697 = (unsigned int) D.22696;
    D.22698 = D.22697;
    if (D.22698 != 65538) goto <D.22686>; else goto <D.22687>;
    <D.22686>:
    // predicted unlikely by continue predictor.
    goto <D.21919>;
    <D.22687>:
    next_bb = bb2;
    branch1 = bb->last_ins;
    if (branch1 == 0B) goto <D.22699>; else goto <D.22701>;
    <D.22701>:
    D.22702 = branch1->opcode;
    D.22703 = D.22702 != 656;
    D.22704 = D.22702 != 559;
    D.22705 = D.22703 & D.22704;
    if (D.22705 != 0) goto <D.22699>; else goto <D.22706>;
    <D.22706>:
    D.22707 = branch1->data.op[1].many_blocks;
    D.22708 = D.22707 + 4;
    D.22709 = *D.22708;
    if (D.22709 != next_bb) goto <D.22699>; else goto <D.22700>;
    <D.22699>:
    // predicted unlikely by continue predictor.
    goto <D.21919>;
    <D.22700>:
    D.22707 = branch1->data.op[1].many_blocks;
    true_bb = *D.22707;
    branch2 = next_bb->last_ins;
    if (branch2 == 0B) goto <D.22710>; else goto <D.22711>;
    <D.22710>:
    // predicted unlikely by continue predictor.
    goto <D.21919>;
    <D.22711>:
    D.22714 = branch2->opcode;
    D.22715 = D.22714 == 654;
    D.22716 = D.22714 == 557;
    D.22717 = D.22715 | D.22716;
    if (D.22717 != 0) goto <D.22718>; else goto <D.22712>;
    <D.22718>:
    D.22719 = branch2->data.op[1].many_blocks;
    D.22720 = *D.22719;
    D.22707 = branch1->data.op[1].many_blocks;
    D.22721 = *D.22707;
    if (D.22720 == D.22721) goto <D.22722>; else goto <D.22712>;
    <D.22722>:
    D.22719 = branch2->data.op[1].many_blocks;
    false_bb = MEM[(struct MonoBasicBlock * *)D.22719 + 4B];
    goto <D.22713>;
    <D.22712>:
    D.22725 = branch2->opcode;
    D.22726 = D.22725 == 655;
    D.22727 = D.22725 == 558;
    D.22728 = D.22726 | D.22727;
    if (D.22728 != 0) goto <D.22729>; else goto <D.22723>;
    <D.22729>:
    D.22719 = branch2->data.op[1].many_blocks;
    D.22730 = D.22719 + 4;
    D.22731 = *D.22730;
    D.22707 = branch1->data.op[1].many_blocks;
    D.22721 = *D.22707;
    if (D.22731 == D.22721) goto <D.22732>; else goto <D.22723>;
    <D.22732>:
    D.22719 = branch2->data.op[1].many_blocks;
    false_bb = *D.22719;
    goto <D.22724>;
    <D.22723>:
    // predicted unlikely by continue predictor.
    goto <D.21919>;
    <D.22724>:
    <D.22713>:
    D.22264 = bb->last_ins;
    compare1 = D.22264->prev;
    if (compare1 == 0B) goto <D.22733>; else goto <D.22735>;
    <D.22735>:
    D.22736 = compare1->opcode;
    D.22737 = D.22736 + 65209;
    if (D.22737 > 1) goto <D.22733>; else goto <D.22738>;
    <D.22738>:
    D.22739 = compare1->data.op[1].const_val;
    if (D.22739 != 0) goto <D.22733>; else goto <D.22734>;
    <D.22733>:
    // predicted unlikely by continue predictor.
    goto <D.21919>;
    <D.22734>:
    ins = next_bb->code;
    if (ins == 0B) goto <D.22740>; else goto <D.22741>;
    <D.22740>:
    // predicted unlikely by continue predictor.
    goto <D.21919>;
    <D.22741>:
    D.22744 = ins->opcode;
    D.22745 = D.22744 + 65209;
    if (D.22745 <= 1) goto <D.22746>; else goto <D.22742>;
    <D.22746>:
    D.22747 = ins->sreg1;
    D.22748 = compare1->sreg1;
    if (D.22747 == D.22748) goto <D.22749>; else goto <D.22742>;
    <D.22749>:
    D.22750 = ins->next;
    if (D.22750 == branch2) goto <D.22751>; else goto <D.22742>;
    <D.22751>:
    D.22752 = ins->data.op[1].const_val;
    if (D.22752 < 0) goto <D.22753>; else goto <D.22754>;
    <D.22753>:
    // predicted unlikely by continue predictor.
    goto <D.21919>;
    <D.22754>:
    goto <D.22743>;
    <D.22742>:
    D.22757 = ins->opcode;
    D.22758 = D.22757 == 787;
    D.22759 = D.22757 == 785;
    D.22760 = D.22758 | D.22759;
    if (D.22760 != 0) goto <D.22761>; else goto <D.22755>;
    <D.22761>:
    D.22762 = ins->dreg;
    D.22748 = compare1->sreg1;
    if (D.22762 != D.22748) goto <D.22763>; else goto <D.22755>;
    <D.22763>:
    D.22750 = ins->next;
    if (D.22750 != 0B) goto <D.22764>; else goto <D.22755>;
    <D.22764>:
    D.22750 = ins->next;
    D.22765 = D.22750->opcode;
    if (D.22765 == 326) goto <D.22766>; else goto <D.22755>;
    <D.22766>:
    D.22750 = ins->next;
    D.22767 = D.22750->sreg1;
    D.22748 = compare1->sreg1;
    if (D.22767 == D.22748) goto <D.22768>; else goto <D.22755>;
    <D.22768>:
    D.22750 = ins->next;
    D.22769 = D.22750->sreg2;
    D.22762 = ins->dreg;
    if (D.22769 == D.22762) goto <D.22770>; else goto <D.22755>;
    <D.22770>:
    D.22750 = ins->next;
    D.22771 = D.22750->next;
    if (D.22771 == branch2) goto <D.22772>; else goto <D.22755>;
    <D.22772>:
    goto <D.22756>;
    <D.22755>:
    // predicted unlikely by continue predictor.
    goto <D.21919>;
    <D.22756>:
    <D.22743>:
    D.22410 = cfg->verbose_level;
    if (D.22410 > 2) goto <D.22773>; else goto <D.22774>;
    <D.22773>:
    D.22413 = bb->block_num;
    printf ("\tSigned->unsigned compare optimization in BB%d on\n", D.22413);
    printf ("\t\t");
    mono_print_ins (compare1);
    printf ("\t\t");
    D.22775 = compare1->next;
    mono_print_ins (D.22775);
    printf ("\t\t");
    mono_print_ins (ins);
    <D.22774>:
    D.22776 = compare1->prev;
    if (D.22776 != 0B) goto <D.22777>; else goto <D.22778>;
    <D.22777>:
    D.22776 = compare1->prev;
    D.22775 = compare1->next;
    D.22776->next = D.22775;
    <D.22778>:
    D.22775 = compare1->next;
    if (D.22775 != 0B) goto <D.22779>; else goto <D.22780>;
    <D.22779>:
    D.22775 = compare1->next;
    D.22776 = compare1->prev;
    D.22775->prev = D.22776;
    <D.22780>:
    D.22781 = bb->code;
    if (D.22781 == compare1) goto <D.22782>; else goto <D.22783>;
    <D.22782>:
    D.22775 = compare1->next;
    bb->code = D.22775;
    <D.22783>:
    D.22264 = bb->last_ins;
    if (D.22264 == compare1) goto <D.22784>; else goto <D.22785>;
    <D.22784>:
    D.22776 = compare1->prev;
    bb->last_ins = D.22776;
    <D.22785>:
    compare1->opcode = 316;
    compare1->dreg = -1;
    compare1->sreg3 = -1;
    D.22786 = compare1->sreg3;
    compare1->sreg2 = D.22786;
    D.22787 = compare1->sreg2;
    compare1->sreg1 = D.22787;
    branch1->opcode = 446;
    D.22707 = branch1->data.op[1].many_blocks;
    D.22721 = *D.22707;
    mono_unlink_bblock (cfg, bb, D.22721);
    D.22707 = branch1->data.op[1].many_blocks;
    D.22708 = D.22707 + 4;
    D.22709 = *D.22708;
    mono_unlink_bblock (cfg, bb, D.22709);
    branch1->data.op[0].target_block = next_bb;
    mono_link_bblock (cfg, bb, next_bb);
    D.22788 = branch2->opcode;
    D.22789 = (int) D.22788;
    D.22790 = br_to_br_un (D.22789);
    D.22791 = (short unsigned int) D.22790;
    branch2->opcode = D.22791;
    mono_merge_basic_blocks (cfg, bb, next_bb);
  }
  <D.21919>:
  bb = bb->next_bb;
  <D.21921>:
  if (bb != 0B) goto <D.21920>; else goto <D.21922>;
  <D.21922>:
  if (changed != 0) goto <D.22792>; else goto <D.22793>;
  <D.22792>:
  D.22235 = cfg->opt;
  D.22794 = D.22235 & 2;
  if (D.22794 != 0) goto <D.22795>; else goto <D.22796>;
  <D.22795>:
  mono_optimize_branches (cfg);
  <D.22796>:
  mono_handle_global_vregs (cfg);
  D.22235 = cfg->opt;
  D.22797 = D.22235 & 48;
  if (D.22797 != 0) goto <D.22798>; else goto <D.22799>;
  <D.22798>:
  mono_local_cprop (cfg);
  <D.22799>:
  D.22235 = cfg->opt;
  D.22610 = D.22235 & 64;
  if (D.22610 != 0) goto <D.22800>; else goto <D.22801>;
  <D.22800>:
  mono_local_deadce (cfg);
  <D.22801>:
  <D.22793>:
}


printf (const char * restrict __fmt)
{
  int D.22803;

  D.22803 = __printf_chk (1, __fmt, __builtin_va_arg_pack ());
  return D.22803;
}


br_to_br_un (int opcode)
{
  int D.22805;

  switch (opcode) <default: <D.21811>, case 557: <D.21809>, case 558: <D.21810>, case 654: <D.21807>, case 655: <D.21808>>
  <D.21807>:
  D.22805 = 659;
  return D.22805;
  <D.21808>:
  D.22805 = 660;
  return D.22805;
  <D.21809>:
  D.22805 = 562;
  return D.22805;
  <D.21810>:
  D.22805 = 563;
  return D.22805;
  <D.21811>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "branch-opts.c", 155);
  D.22805 = -1;
  return D.22805;
}


mono_nullify_basic_block (struct MonoBasicBlock * bb)
{
  struct MonoInst * D.22807;

  bb->in_count = 0;
  bb->out_count = 0;
  bb->in_bb = 0B;
  bb->out_bb = 0B;
  bb->next_bb = 0B;
  bb->last_ins = 0B;
  D.22807 = bb->last_ins;
  bb->code = D.22807;
  bb->cil_code = 0B;
}


mono_merge_basic_blocks (struct MonoCompile * cfg, struct MonoBasicBlock * bb, struct MonoBasicBlock * bbn)
{
  <unnamed-unsigned:1> D.22808;
  unsigned char D.22809;
  <unnamed-unsigned:1> D.22810;
  unsigned char D.22811;
  unsigned char D.22812;
  <unnamed-unsigned:1> D.22813;
  <unnamed-unsigned:1> D.22814;
  unsigned char D.22815;
  <unnamed-unsigned:1> D.22816;
  unsigned char D.22817;
  unsigned char D.22818;
  <unnamed-unsigned:1> D.22819;
  struct MonoBasicBlock * * D.22820;
  unsigned int i.2;
  unsigned int D.22822;
  struct MonoBasicBlock * * D.22823;
  struct MonoBasicBlock * D.22824;
  short int D.22825;
  int D.22826;
  struct MonoBasicBlock * D.22827;
  unsigned char D.22828;
  unsigned char D.22829;
  short unsigned int D.22832;
  struct MonoBasicBlock * D.22835;
  _Bool D.22836;
  long int D.22837;
  long int D.22838;
  int D.22841;
  int D.22842;
  unsigned char D.22843;
  struct MonoInst * D.22851;
  struct MonoInst * D.22854;
  struct MonoJumpInfoBBTable * iftmp.3;
  struct MonoJumpInfoBBTable * iftmp.4;
  struct MonoJumpInfoBBTable * iftmp.5;
  struct MonoJumpInfoBBTable * iftmp.6;
  struct MonoBasicBlock * * D.22873;
  unsigned int i.7;
  unsigned int D.22875;
  struct MonoBasicBlock * * D.22876;
  struct MonoBasicBlock * D.22877;
  _Bool D.22880;
  long int D.22881;
  long int D.22882;
  int D.22885;
  struct MonoInst * D.22889;
  short unsigned int D.22891;
  short unsigned int D.22892;
  _Bool D.22893;
  short unsigned int D.22894;
  _Bool D.22895;
  _Bool D.22896;
  short unsigned int D.22898;
  short unsigned int D.22899;
  struct MonoBasicBlock * * D.22900;
  struct MonoBasicBlock * * D.22901;
  struct MonoBasicBlock * D.22902;
  _Bool D.22903;
  long int D.22904;
  long int D.22905;
  short unsigned int D.22912;
  short unsigned int D.22913;
  _Bool D.22914;
  short unsigned int D.22915;
  _Bool D.22916;
  _Bool D.22917;
  int D.22922;
  int D.22923;
  <unnamed-unsigned:1> D.22924;
  unsigned char D.22925;
  <unnamed-unsigned:1> D.22926;
  unsigned char D.22927;
  unsigned char D.22928;
  <unnamed-unsigned:1> D.22929;
  <unnamed-unsigned:1> D.22930;
  unsigned char D.22931;
  <unnamed-unsigned:1> D.22932;
  unsigned char D.22933;
  unsigned char D.22934;
  <unnamed-unsigned:1> D.22935;
  struct MonoInst * D.22938;
  struct MonoInst * D.22941;
  struct MonoBasicBlock * D.22944;
  struct MonoBasicBlock * D.22947;
  struct MonoBasicBlock * D.22949;
  short int D.22954;
  struct MonoBasicBlock * * D.22957;
  struct MonoBasicBlock * D.22958;
  short unsigned int D.22961;
  short unsigned int D.22962;
  _Bool D.22963;
  short unsigned int D.22964;
  _Bool D.22965;
  _Bool D.22966;
  struct MonoMemPool * D.22977;
  const unsigned char * D.22978;
  struct MonoInst * inst;
  struct MonoBasicBlock * prev_bb;
  int i;

  D.22808 = bb->has_array_access;
  D.22809 = (unsigned char) D.22808;
  D.22810 = bbn->has_array_access;
  D.22811 = (unsigned char) D.22810;
  D.22812 = D.22809 | D.22811;
  D.22813 = (<unnamed-unsigned:1>) D.22812;
  bb->has_array_access = D.22813;
  D.22814 = bb->extended;
  D.22815 = (unsigned char) D.22814;
  D.22816 = bbn->extended;
  D.22817 = (unsigned char) D.22816;
  D.22818 = D.22815 | D.22817;
  D.22819 = (<unnamed-unsigned:1>) D.22818;
  bb->extended = D.22819;
  mono_unlink_bblock (cfg, bb, bbn);
  i = 0;
  goto <D.22002>;
  <D.22001>:
  D.22820 = bbn->out_bb;
  i.2 = (unsigned int) i;
  D.22822 = i.2 * 4;
  D.22823 = D.22820 + D.22822;
  D.22824 = *D.22823;
  mono_link_bblock (cfg, bb, D.22824);
  i = i + 1;
  <D.22002>:
  D.22825 = bbn->out_count;
  D.22826 = (int) D.22825;
  if (D.22826 > i) goto <D.22001>; else goto <D.22003>;
  <D.22003>:
  goto <D.22005>;
  <D.22004>:
  D.22820 = bbn->out_bb;
  D.22827 = *D.22820;
  mono_unlink_bblock (cfg, bbn, D.22827);
  <D.22005>:
  D.22825 = bbn->out_count;
  if (D.22825 != 0) goto <D.22004>; else goto <D.22006>;
  <D.22006>:
  D.22828 = BIT_FIELD_REF <*bb, 8, 912>;
  D.22829 = D.22828 & 32;
  if (D.22829 != 0) goto <D.22830>; else goto <D.22831>;
  <D.22830>:
  inst = bb->code;
  goto <D.22008>;
  <D.22007>:
  D.22832 = inst->opcode;
  if (D.22832 == 739) goto <D.22833>; else goto <D.22834>;
  <D.22833>:
  D.22835 = inst->data.op[0].target_block;
  D.22836 = D.22835 != bbn;
  D.22837 = (long int) D.22836;
  D.22838 = __builtin_expect (D.22837, 0);
  if (D.22838 != 0) goto <D.22839>; else goto <D.22840>;
  <D.22839>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "branch-opts.c", 984, "inst->inst_target_bb == bbn");
  <D.22840>:
  inst->opcode = 316;
  inst->dreg = -1;
  inst->sreg3 = -1;
  D.22841 = inst->sreg3;
  inst->sreg2 = D.22841;
  D.22842 = inst->sreg2;
  inst->sreg1 = D.22842;
  <D.22834>:
  inst = inst->next;
  <D.22008>:
  if (inst != 0B) goto <D.22007>; else goto <D.22009>;
  <D.22009>:
  <D.22831>:
  D.22828 = BIT_FIELD_REF <*bb, 8, 912>;
  D.22843 = D.22828 & 16;
  if (D.22843 != 0) goto <D.22844>; else goto <D.22845>;
  <D.22844>:
  inst = bb->code;
  goto <D.22016>;
  <D.22015>:
  D.22832 = inst->opcode;
  if (D.22832 == 735) goto <D.22846>; else goto <D.22849>;
  <D.22849>:
  D.22832 = inst->opcode;
  if (D.22832 == 736) goto <D.22850>; else goto <D.22847>;
  <D.22850>:
  D.22851 = inst->data.op[1].src;
  if (D.22851 == 8B) goto <D.22846>; else goto <D.22847>;
  <D.22847>:
  D.22832 = inst->opcode;
  if (D.22832 == 370) goto <D.22846>; else goto <D.22852>;
  <D.22852>:
  D.22832 = inst->opcode;
  if (D.22832 == 738) goto <D.22853>; else goto <D.22848>;
  <D.22853>:
  D.22851 = inst->data.op[1].src;
  D.22854 = D.22851->data.op[1].src;
  if (D.22854 == 8B) goto <D.22846>; else goto <D.22848>;
  <D.22846>:
  {
    int i;
    struct MonoJumpInfoBBTable * table;

    D.22832 = inst->opcode;
    if (D.22832 == 735) goto <D.22856>; else goto <D.22857>;
    <D.22856>:
    iftmp.3 = inst->data.op[0].p;
    goto <D.22858>;
    <D.22857>:
    D.22832 = inst->opcode;
    if (D.22832 == 736) goto <D.22862>; else goto <D.22860>;
    <D.22862>:
    D.22851 = inst->data.op[1].src;
    if (D.22851 == 8B) goto <D.22863>; else goto <D.22860>;
    <D.22863>:
    iftmp.4 = inst->data.op[0].p;
    goto <D.22861>;
    <D.22860>:
    D.22832 = inst->opcode;
    if (D.22832 == 370) goto <D.22865>; else goto <D.22866>;
    <D.22865>:
    iftmp.5 = inst->data.op[0].p;
    goto <D.22867>;
    <D.22866>:
    D.22832 = inst->opcode;
    if (D.22832 == 738) goto <D.22871>; else goto <D.22869>;
    <D.22871>:
    D.22851 = inst->data.op[1].src;
    D.22854 = D.22851->data.op[1].src;
    if (D.22854 == 8B) goto <D.22872>; else goto <D.22869>;
    <D.22872>:
    D.22851 = inst->data.op[1].src;
    iftmp.6 = D.22851->data.op[0].p;
    goto <D.22870>;
    <D.22869>:
    iftmp.6 = 0B;
    <D.22870>:
    iftmp.5 = iftmp.6;
    <D.22867>:
    iftmp.4 = iftmp.5;
    <D.22861>:
    iftmp.3 = iftmp.4;
    <D.22858>:
    table = iftmp.3;
    i = 0;
    goto <D.22013>;
    <D.22012>:
    D.22873 = table->table;
    i.7 = (unsigned int) i;
    D.22875 = i.7 * 4;
    D.22876 = D.22873 + D.22875;
    D.22877 = *D.22876;
    if (D.22877 != 0B) goto <D.22878>; else goto <D.22879>;
    <D.22878>:
    D.22873 = table->table;
    i.7 = (unsigned int) i;
    D.22875 = i.7 * 4;
    D.22876 = D.22873 + D.22875;
    D.22877 = *D.22876;
    D.22880 = D.22877 != bbn;
    D.22881 = (long int) D.22880;
    D.22882 = __builtin_expect (D.22881, 0);
    if (D.22882 != 0) goto <D.22883>; else goto <D.22884>;
    <D.22883>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "branch-opts.c", 997, "table->table [i] == bbn");
    <D.22884>:
    <D.22879>:
    D.22873 = table->table;
    i.7 = (unsigned int) i;
    D.22875 = i.7 * 4;
    D.22876 = D.22873 + D.22875;
    *D.22876 = 0B;
    i = i + 1;
    <D.22013>:
    D.22885 = table->table_size;
    if (D.22885 > i) goto <D.22012>; else goto <D.22014>;
    <D.22014>:
  }
  <D.22848>:
  inst = inst->next;
  <D.22016>:
  if (inst != 0B) goto <D.22015>; else goto <D.22017>;
  <D.22017>:
  <D.22845>:
  D.22889 = bb->last_ins;
  if (D.22889 != 0B) goto <D.22890>; else goto <D.22886>;
  <D.22890>:
  D.22889 = bb->last_ins;
  D.22891 = D.22889->opcode;
  D.22892 = D.22891 + 64981;
  D.22893 = D.22892 <= 9;
  D.22894 = D.22891 + 64874;
  D.22895 = D.22894 <= 9;
  D.22896 = D.22893 | D.22895;
  if (D.22896 != 0) goto <D.22887>; else goto <D.22897>;
  <D.22897>:
  D.22889 = bb->last_ins;
  D.22898 = D.22889->opcode;
  D.22899 = D.22898 + 64884;
  if (D.22899 <= 9) goto <D.22887>; else goto <D.22886>;
  <D.22887>:
  D.22889 = bb->last_ins;
  D.22900 = D.22889->data.op[1].many_blocks;
  D.22901 = D.22900 + 4;
  D.22902 = *D.22901;
  D.22903 = D.22902 != bbn;
  D.22904 = (long int) D.22903;
  D.22905 = __builtin_expect (D.22904, 0);
  if (D.22905 != 0) goto <D.22906>; else goto <D.22907>;
  <D.22906>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "branch-opts.c", 1005, "bb->last_ins->inst_false_bb == bbn");
  <D.22907>:
  D.22889 = bb->last_ins;
  D.22900 = D.22889->data.op[1].many_blocks;
  D.22901 = D.22900 + 4;
  *D.22901 = 0B;
  bb->extended = 1;
  goto <D.22888>;
  <D.22886>:
  D.22889 = bb->last_ins;
  if (D.22889 != 0B) goto <D.22910>; else goto <D.22911>;
  <D.22910>:
  D.22889 = bb->last_ins;
  D.22912 = D.22889->opcode;
  D.22913 = D.22912 + 64981;
  D.22914 = D.22913 <= 9;
  D.22915 = D.22912 + 64874;
  D.22916 = D.22915 <= 9;
  D.22917 = D.22914 | D.22916;
  if (D.22917 != 0) goto <D.22908>; else goto <D.22918>;
  <D.22918>:
  D.22889 = bb->last_ins;
  D.22898 = D.22889->opcode;
  D.22899 = D.22898 + 64884;
  if (D.22899 <= 9) goto <D.22908>; else goto <D.22919>;
  <D.22919>:
  D.22889 = bb->last_ins;
  D.22898 = D.22889->opcode;
  if (D.22898 == 446) goto <D.22908>; else goto <D.22920>;
  <D.22920>:
  D.22889 = bb->last_ins;
  D.22898 = D.22889->opcode;
  if (D.22898 == 763) goto <D.22908>; else goto <D.22921>;
  <D.22921>:
  D.22889 = bb->last_ins;
  D.22898 = D.22889->opcode;
  if (D.22898 == 370) goto <D.22908>; else goto <D.22909>;
  <D.22908>:
  D.22889 = bb->last_ins;
  D.22889->opcode = 316;
  D.22889 = bb->last_ins;
  D.22889->dreg = -1;
  D.22889 = bb->last_ins;
  D.22889 = bb->last_ins;
  D.22889 = bb->last_ins;
  D.22889->sreg3 = -1;
  D.22922 = D.22889->sreg3;
  D.22889->sreg2 = D.22922;
  D.22923 = D.22889->sreg2;
  D.22889->sreg1 = D.22923;
  <D.22909>:
  <D.22911>:
  <D.22888>:
  D.22924 = bb->has_call_handler;
  D.22925 = (unsigned char) D.22924;
  D.22926 = bbn->has_call_handler;
  D.22927 = (unsigned char) D.22926;
  D.22928 = D.22925 | D.22927;
  D.22929 = (<unnamed-unsigned:1>) D.22928;
  bb->has_call_handler = D.22929;
  D.22930 = bb->has_jump_table;
  D.22931 = (unsigned char) D.22930;
  D.22932 = bbn->has_jump_table;
  D.22933 = (unsigned char) D.22932;
  D.22934 = D.22931 | D.22933;
  D.22935 = (<unnamed-unsigned:1>) D.22934;
  bb->has_jump_table = D.22935;
  D.22889 = bb->last_ins;
  if (D.22889 != 0B) goto <D.22936>; else goto <D.22937>;
  <D.22936>:
  D.22938 = bbn->code;
  if (D.22938 != 0B) goto <D.22939>; else goto <D.22940>;
  <D.22939>:
  D.22889 = bb->last_ins;
  D.22938 = bbn->code;
  D.22889->next = D.22938;
  D.22938 = bbn->code;
  D.22889 = bb->last_ins;
  D.22938->prev = D.22889;
  D.22941 = bbn->last_ins;
  bb->last_ins = D.22941;
  <D.22940>:
  goto <D.22942>;
  <D.22937>:
  D.22938 = bbn->code;
  bb->code = D.22938;
  D.22941 = bbn->last_ins;
  bb->last_ins = D.22941;
  <D.22942>:
  prev_bb = cfg->bb_entry;
  goto <D.22019>;
  <D.22018>:
  prev_bb = prev_bb->next_bb;
  <D.22019>:
  if (prev_bb != 0B) goto <D.22943>; else goto <D.22020>;
  <D.22943>:
  D.22944 = prev_bb->next_bb;
  if (D.22944 != bbn) goto <D.22018>; else goto <D.22020>;
  <D.22020>:
  if (prev_bb != 0B) goto <D.22945>; else goto <D.22946>;
  <D.22945>:
  D.22947 = bbn->next_bb;
  prev_bb->next_bb = D.22947;
  goto <D.22948>;
  <D.22946>:
  D.22949 = bb->next_bb;
  if (D.22949 == bbn) goto <D.22950>; else goto <D.22951>;
  <D.22950>:
  D.22947 = bbn->next_bb;
  bb->next_bb = D.22947;
  <D.22951>:
  <D.22948>:
  mono_nullify_basic_block (bbn);
  D.22889 = bb->last_ins;
  if (D.22889 != 0B) goto <D.22952>; else goto <D.22953>;
  <D.22952>:
  D.22954 = bb->out_count;
  if (D.22954 == 1) goto <D.22955>; else goto <D.22956>;
  <D.22955>:
  D.22957 = bb->out_bb;
  D.22958 = *D.22957;
  D.22949 = bb->next_bb;
  if (D.22958 != D.22949) goto <D.22959>; else goto <D.22960>;
  <D.22959>:
  D.22889 = bb->last_ins;
  D.22961 = D.22889->opcode;
  D.22962 = D.22961 + 64981;
  D.22963 = D.22962 > 9;
  D.22964 = D.22961 + 64874;
  D.22965 = D.22964 > 9;
  D.22966 = D.22963 & D.22965;
  if (D.22966 != 0) goto <D.22967>; else goto <D.22968>;
  <D.22967>:
  D.22889 = bb->last_ins;
  D.22898 = D.22889->opcode;
  D.22899 = D.22898 + 64884;
  if (D.22899 > 9) goto <D.22969>; else goto <D.22970>;
  <D.22969>:
  D.22889 = bb->last_ins;
  D.22898 = D.22889->opcode;
  if (D.22898 != 446) goto <D.22971>; else goto <D.22972>;
  <D.22971>:
  D.22889 = bb->last_ins;
  D.22898 = D.22889->opcode;
  if (D.22898 != 763) goto <D.22973>; else goto <D.22974>;
  <D.22973>:
  D.22889 = bb->last_ins;
  D.22898 = D.22889->opcode;
  if (D.22898 != 370) goto <D.22975>; else goto <D.22976>;
  <D.22975>:
  D.22977 = cfg->mempool;
  inst = mono_mempool_alloc0 (D.22977, 48);
  inst->opcode = 446;
  inst->dreg = -1;
  inst->sreg3 = -1;
  D.22841 = inst->sreg3;
  inst->sreg2 = D.22841;
  D.22842 = inst->sreg2;
  inst->sreg1 = D.22842;
  D.22978 = cfg->ip;
  inst->cil_code = D.22978;
  D.22957 = bb->out_bb;
  D.22958 = *D.22957;
  inst->data.op[0].target_block = D.22958;
  D.22889 = bb->last_ins;
  if (D.22889 != 0B) goto <D.22979>; else goto <D.22980>;
  <D.22979>:
  D.22889 = bb->last_ins;
  D.22889->next = inst;
  D.22889 = bb->last_ins;
  inst->prev = D.22889;
  bb->last_ins = inst;
  goto <D.22981>;
  <D.22980>:
  bb->last_ins = inst;
  D.22889 = bb->last_ins;
  bb->code = D.22889;
  <D.22981>:
  <D.22976>:
  <D.22974>:
  <D.22972>:
  <D.22970>:
  <D.22968>:
  <D.22960>:
  <D.22956>:
  <D.22953>:
}


mono_remove_bblock (struct MonoCompile * cfg, struct MonoBasicBlock * bb)
{
  struct MonoBasicBlock * D.22983;
  _Bool D.22984;
  long int D.22985;
  long int D.22986;
  struct MonoBasicBlock * D.22989;
  struct MonoBasicBlock * tmp_bb;

  tmp_bb = cfg->bb_entry;
  goto <D.22040>;
  <D.22039>:
  tmp_bb = tmp_bb->next_bb;
  <D.22040>:
  if (tmp_bb != 0B) goto <D.22982>; else goto <D.22041>;
  <D.22982>:
  D.22983 = tmp_bb->next_bb;
  if (D.22983 != bb) goto <D.22039>; else goto <D.22041>;
  <D.22041>:
  D.22984 = tmp_bb == 0B;
  D.22985 = (long int) D.22984;
  D.22986 = __builtin_expect (D.22985, 0);
  if (D.22986 != 0) goto <D.22987>; else goto <D.22988>;
  <D.22987>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "branch-opts.c", 1092, "tmp_bb");
  <D.22988>:
  D.22989 = bb->next_bb;
  tmp_bb->next_bb = D.22989;
}


mono_remove_critical_edges (struct MonoCompile * cfg)
{
  unsigned int D.22990;
  int D.22993;
  struct MonoBasicBlock * * D.22994;
  unsigned int i.8;
  unsigned int D.22996;
  struct MonoBasicBlock * * D.22997;
  struct MonoBasicBlock * D.22998;
  int D.22999;
  short int D.23000;
  int D.23001;
  struct MonoBasicBlock * * D.23002;
  struct MonoBasicBlock * * D.23003;
  struct MonoBasicBlock * D.23004;
  int D.23005;
  short int D.23006;
  int D.23007;
  struct MonoInst * D.23008;
  unsigned int in_bb_index.9;
  unsigned int D.23014;
  struct MonoBasicBlock * * D.23015;
  short int D.23018;
  struct MonoInst * D.23021;
  short unsigned int D.23023;
  struct MonoMemPool * D.23024;
  unsigned int D.23025;
  unsigned int D.23026;
  unsigned int D.23027;
  int D.23028;
  unsigned int D.23029;
  int D.23030;
  struct MonoBasicBlock * D.23033;
  struct MonoBasicBlock * * D.23036;
  unsigned int i.10;
  unsigned int D.23038;
  struct MonoBasicBlock * * D.23039;
  struct MonoBasicBlock * D.23040;
  int D.23043;
  int D.23044;
  const unsigned char * D.23045;
  struct MonoInst * D.23046;
  unsigned char * D.23050;
  short int D.23051;
  int D.23052;
  unsigned int D.23054;
  unsigned int D.23055;
  int D.23056;
  int D.23057;
  int D.23058;
  struct MonoInst * D.23059;
  unsigned char * D.23063;
  int D.23066;
  void * D.23067;
  struct MonoBasicBlock * * D.23068;
  void * D.23069;
  struct MonoBasicBlock * * D.23070;
  int D.23073;
  int D.23074;
  unsigned int i.11;
  unsigned int D.23078;
  struct MonoBasicBlock * * D.23079;
  struct MonoBasicBlock * D.23080;
  int D.23081;
  struct MonoBasicBlock * * D.23082;
  struct MonoBasicBlock * D.23083;
  int D.23084;
  struct MonoBasicBlock * bb;
  struct MonoBasicBlock * previous_bb;

  D.22990 = cfg->verbose_level;
  if (D.22990 > 3) goto <D.22991>; else goto <D.22992>;
  <D.22991>:
  bb = cfg->bb_entry;
  goto <D.22055>;
  <D.22054>:
  {
    int i;

    D.22993 = bb->block_num;
    printf ("remove_critical_edges, BEFORE BB%d (in:", D.22993);
    i = 0;
    goto <D.22049>;
    <D.22048>:
    D.22994 = bb->in_bb;
    i.8 = (unsigned int) i;
    D.22996 = i.8 * 4;
    D.22997 = D.22994 + D.22996;
    D.22998 = *D.22997;
    D.22999 = D.22998->block_num;
    printf (" %d", D.22999);
    i = i + 1;
    <D.22049>:
    D.23000 = bb->in_count;
    D.23001 = (int) D.23000;
    if (D.23001 > i) goto <D.22048>; else goto <D.22050>;
    <D.22050>:
    printf (") (out:");
    i = 0;
    goto <D.22052>;
    <D.22051>:
    D.23002 = bb->out_bb;
    i.8 = (unsigned int) i;
    D.22996 = i.8 * 4;
    D.23003 = D.23002 + D.22996;
    D.23004 = *D.23003;
    D.23005 = D.23004->block_num;
    printf (" %d", D.23005);
    i = i + 1;
    <D.22052>:
    D.23006 = bb->out_count;
    D.23007 = (int) D.23006;
    if (D.23007 > i) goto <D.22051>; else goto <D.22053>;
    <D.22053>:
    printf (")");
    D.23008 = bb->last_ins;
    if (D.23008 != 0B) goto <D.23009>; else goto <D.23010>;
    <D.23009>:
    printf (" ");
    D.23008 = bb->last_ins;
    mono_print_ins (D.23008);
    <D.23010>:
    printf ("\n");
  }
  bb = bb->next_bb;
  <D.22055>:
  if (bb != 0B) goto <D.22054>; else goto <D.22056>;
  <D.22056>:
  <D.22992>:
  previous_bb = cfg->bb_entry;
  bb = previous_bb->next_bb;
  goto <D.22071>;
  <D.22070>:
  D.23000 = bb->in_count;
  if (D.23000 > 1) goto <D.23011>; else goto <D.23012>;
  <D.23011>:
  {
    int in_bb_index;

    in_bb_index = 0;
    goto <D.22068>;
    <D.22067>:
    {
      struct MonoBasicBlock * in_bb;

      D.22994 = bb->in_bb;
      in_bb_index.9 = (unsigned int) in_bb_index;
      D.23014 = in_bb_index.9 * 4;
      D.23015 = D.22994 + D.23014;
      in_bb = *D.23015;
      D.23018 = in_bb->out_count;
      if (D.23018 > 1) goto <D.23016>; else goto <D.23019>;
      <D.23019>:
      D.23018 = in_bb->out_count;
      if (D.23018 == 1) goto <D.23020>; else goto <D.23017>;
      <D.23020>:
      D.23021 = in_bb->last_ins;
      if (D.23021 != 0B) goto <D.23022>; else goto <D.23017>;
      <D.23022>:
      D.23021 = in_bb->last_ins;
      D.23023 = D.23021->opcode;
      if (D.23023 == 763) goto <D.23016>; else goto <D.23017>;
      <D.23016>:
      {
        struct MonoBasicBlock * new_bb;

        D.23024 = cfg->mempool;
        new_bb = mono_mempool_alloc0 (D.23024, 172);
        D.23025 = cfg->num_bblocks;
        D.23026 = D.23025;
        D.23027 = D.23026 + 1;
        cfg->num_bblocks = D.23027;
        D.23028 = (int) D.23026;
        new_bb->block_num = D.23028;
        D.23029 = bb->region;
        new_bb->region = D.23029;
        D.23030 = mono_bb_is_fall_through (cfg, previous_bb);
        if (D.23030 != 0) goto <D.23031>; else goto <D.23032>;
        <D.23031>:
        D.23033 = cfg->bb_entry;
        if (D.23033 != previous_bb) goto <D.23034>; else goto <D.23035>;
        <D.23034>:
        {
          int i;

          i = 0;
          goto <D.22064>;
          <D.22063>:
          D.23036 = previous_bb->out_bb;
          i.10 = (unsigned int) i;
          D.23038 = i.10 * 4;
          D.23039 = D.23036 + D.23038;
          D.23040 = *D.23039;
          if (D.23040 == bb) goto <D.23041>; else goto <D.23042>;
          <D.23041>:
          {
            struct MonoInst * jump;

            D.23024 = cfg->mempool;
            jump = mono_mempool_alloc0 (D.23024, 48);
            jump->opcode = 446;
            jump->dreg = -1;
            jump->sreg3 = -1;
            D.23043 = jump->sreg3;
            jump->sreg2 = D.23043;
            D.23044 = jump->sreg2;
            jump->sreg1 = D.23044;
            D.23045 = cfg->ip;
            jump->cil_code = D.23045;
            D.23046 = previous_bb->last_ins;
            if (D.23046 != 0B) goto <D.23047>; else goto <D.23048>;
            <D.23047>:
            D.23046 = previous_bb->last_ins;
            D.23046->next = jump;
            D.23046 = previous_bb->last_ins;
            jump->prev = D.23046;
            previous_bb->last_ins = jump;
            goto <D.23049>;
            <D.23048>:
            previous_bb->last_ins = jump;
            D.23046 = previous_bb->last_ins;
            previous_bb->code = D.23046;
            <D.23049>:
            D.23050 = previous_bb->cil_code;
            jump->cil_code = D.23050;
            jump->data.op[0].target_block = bb;
            goto <D.22062>;
          }
          <D.23042>:
          i = i + 1;
          <D.22064>:
          D.23051 = previous_bb->out_count;
          D.23052 = (int) D.23051;
          if (D.23052 > i) goto <D.22063>; else goto <D.22062>;
          <D.22062>:
        }
        goto <D.23053>;
        <D.23035>:
        {
          struct MonoInst * jump;
          struct MonoBasicBlock * new_bb_after_entry;

          D.23024 = cfg->mempool;
          new_bb_after_entry = mono_mempool_alloc0 (D.23024, 172);
          D.23025 = cfg->num_bblocks;
          D.23054 = D.23025;
          D.23055 = D.23054 + 1;
          cfg->num_bblocks = D.23055;
          D.23056 = (int) D.23054;
          new_bb_after_entry->block_num = D.23056;
          D.23029 = bb->region;
          new_bb_after_entry->region = D.23029;
          D.23024 = cfg->mempool;
          jump = mono_mempool_alloc0 (D.23024, 48);
          jump->opcode = 446;
          jump->dreg = -1;
          jump->sreg3 = -1;
          D.23057 = jump->sreg3;
          jump->sreg2 = D.23057;
          D.23058 = jump->sreg2;
          jump->sreg1 = D.23058;
          D.23045 = cfg->ip;
          jump->cil_code = D.23045;
          D.23059 = new_bb_after_entry->last_ins;
          if (D.23059 != 0B) goto <D.23060>; else goto <D.23061>;
          <D.23060>:
          D.23059 = new_bb_after_entry->last_ins;
          D.23059->next = jump;
          D.23059 = new_bb_after_entry->last_ins;
          jump->prev = D.23059;
          new_bb_after_entry->last_ins = jump;
          goto <D.23062>;
          <D.23061>:
          new_bb_after_entry->last_ins = jump;
          D.23059 = new_bb_after_entry->last_ins;
          new_bb_after_entry->code = D.23059;
          <D.23062>:
          D.23063 = bb->cil_code;
          jump->cil_code = D.23063;
          jump->data.op[0].target_block = bb;
          mono_unlink_bblock (cfg, previous_bb, bb);
          mono_link_bblock (cfg, new_bb_after_entry, bb);
          mono_link_bblock (cfg, previous_bb, new_bb_after_entry);
          previous_bb->next_bb = new_bb_after_entry;
          previous_bb = new_bb_after_entry;
          D.22990 = cfg->verbose_level;
          if (D.22990 > 2) goto <D.23064>; else goto <D.23065>;
          <D.23064>:
          D.22993 = bb->block_num;
          D.23066 = new_bb_after_entry->block_num;
          printf ("remove_critical_edges, added helper BB%d jumping to BB%d\n", D.23066, D.22993);
          <D.23065>:
        }
        <D.23053>:
        <D.23032>:
        previous_bb->next_bb = new_bb;
        new_bb->next_bb = bb;
        previous_bb = new_bb;
        D.23024 = cfg->mempool;
        D.23067 = mono_mempool_alloc (D.23024, 4);
        new_bb->in_bb = D.23067;
        D.23068 = new_bb->in_bb;
        *D.23068 = in_bb;
        new_bb->in_count = 1;
        D.23024 = cfg->mempool;
        D.23069 = mono_mempool_alloc (D.23024, 4);
        new_bb->out_bb = D.23069;
        D.23070 = new_bb->out_bb;
        *D.23070 = bb;
        new_bb->out_count = 1;
        replace_out_block (in_bb, bb, new_bb);
        replace_out_block_in_code (in_bb, bb, new_bb);
        replace_in_block (bb, in_bb, new_bb);
        D.22990 = cfg->verbose_level;
        if (D.22990 > 2) goto <D.23071>; else goto <D.23072>;
        <D.23071>:
        D.23073 = new_bb->block_num;
        D.22993 = bb->block_num;
        D.23074 = in_bb->block_num;
        printf ("remove_critical_edges, removed critical edge from BB%d to BB%d (added BB%d)\n", D.23074, D.22993, D.23073);
        <D.23072>:
      }
      <D.23017>:
    }
    in_bb_index = in_bb_index + 1;
    <D.22068>:
    D.23000 = bb->in_count;
    D.23001 = (int) D.23000;
    if (D.23001 > in_bb_index) goto <D.22067>; else goto <D.22069>;
    <D.22069>:
  }
  <D.23012>:
  previous_bb = previous_bb->next_bb;
  bb = bb->next_bb;
  <D.22071>:
  if (bb != 0B) goto <D.22070>; else goto <D.22072>;
  <D.22072>:
  D.22990 = cfg->verbose_level;
  if (D.22990 > 3) goto <D.23075>; else goto <D.23076>;
  <D.23075>:
  bb = cfg->bb_entry;
  goto <D.22081>;
  <D.22080>:
  {
    int i;

    D.22993 = bb->block_num;
    printf ("remove_critical_edges, AFTER BB%d (in:", D.22993);
    i = 0;
    goto <D.22075>;
    <D.22074>:
    D.22994 = bb->in_bb;
    i.11 = (unsigned int) i;
    D.23078 = i.11 * 4;
    D.23079 = D.22994 + D.23078;
    D.23080 = *D.23079;
    D.23081 = D.23080->block_num;
    printf (" %d", D.23081);
    i = i + 1;
    <D.22075>:
    D.23000 = bb->in_count;
    D.23001 = (int) D.23000;
    if (D.23001 > i) goto <D.22074>; else goto <D.22076>;
    <D.22076>:
    printf (") (out:");
    i = 0;
    goto <D.22078>;
    <D.22077>:
    D.23002 = bb->out_bb;
    i.11 = (unsigned int) i;
    D.23078 = i.11 * 4;
    D.23082 = D.23002 + D.23078;
    D.23083 = *D.23082;
    D.23084 = D.23083->block_num;
    printf (" %d", D.23084);
    i = i + 1;
    <D.22078>:
    D.23006 = bb->out_count;
    D.23007 = (int) D.23006;
    if (D.23007 > i) goto <D.22077>; else goto <D.22079>;
    <D.22079>:
    printf (")");
    D.23008 = bb->last_ins;
    if (D.23008 != 0B) goto <D.23085>; else goto <D.23086>;
    <D.23085>:
    printf (" ");
    D.23008 = bb->last_ins;
    mono_print_ins (D.23008);
    <D.23086>:
    printf ("\n");
  }
  bb = bb->next_bb;
  <D.22081>:
  if (bb != 0B) goto <D.22080>; else goto <D.22082>;
  <D.22082>:
  <D.23076>:
}


mono_bb_is_fall_through (struct MonoCompile * cfg, struct MonoBasicBlock * bb)
{
  gboolean D.23087;
  int iftmp.12;
  struct MonoBasicBlock * D.23092;
  unsigned int D.23094;
  unsigned int D.23095;
  struct MonoInst * D.23097;
  short unsigned int D.23099;
  short unsigned int D.23100;
  _Bool D.23101;
  short unsigned int D.23102;
  _Bool D.23103;
  _Bool D.23104;
  short unsigned int D.23106;
  short unsigned int D.23107;

  D.23092 = bb->next_bb;
  if (D.23092 != 0B) goto <D.23093>; else goto <D.23089>;
  <D.23093>:
  D.23092 = bb->next_bb;
  D.23094 = D.23092->region;
  D.23095 = bb->region;
  if (D.23094 == D.23095) goto <D.23096>; else goto <D.23089>;
  <D.23096>:
  D.23097 = bb->last_ins;
  if (D.23097 == 0B) goto <D.23090>; else goto <D.23098>;
  <D.23098>:
  D.23097 = bb->last_ins;
  D.23099 = D.23097->opcode;
  D.23100 = D.23099 + 64981;
  D.23101 = D.23100 > 9;
  D.23102 = D.23099 + 64874;
  D.23103 = D.23102 > 9;
  D.23104 = D.23101 & D.23103;
  if (D.23104 != 0) goto <D.23105>; else goto <D.23089>;
  <D.23105>:
  D.23097 = bb->last_ins;
  D.23106 = D.23097->opcode;
  D.23107 = D.23106 + 64884;
  if (D.23107 > 9) goto <D.23108>; else goto <D.23089>;
  <D.23108>:
  D.23097 = bb->last_ins;
  D.23106 = D.23097->opcode;
  if (D.23106 != 446) goto <D.23109>; else goto <D.23089>;
  <D.23109>:
  D.23097 = bb->last_ins;
  D.23106 = D.23097->opcode;
  if (D.23106 != 763) goto <D.23110>; else goto <D.23089>;
  <D.23110>:
  D.23097 = bb->last_ins;
  D.23106 = D.23097->opcode;
  if (D.23106 != 370) goto <D.23090>; else goto <D.23089>;
  <D.23090>:
  iftmp.12 = 1;
  goto <D.23091>;
  <D.23089>:
  iftmp.12 = 0;
  <D.23091>:
  D.23087 = iftmp.12;
  return D.23087;
}


replace_out_block (struct MonoBasicBlock * bb, struct MonoBasicBlock * orig, struct MonoBasicBlock * repl)
{
  struct MonoBasicBlock * * D.23112;
  unsigned int i.13;
  unsigned int D.23114;
  struct MonoBasicBlock * * D.23115;
  short int D.23120;
  sizetype D.23123;
  sizetype D.23124;
  sizetype D.23125;
  struct MonoBasicBlock * * D.23126;
  struct MonoBasicBlock * D.23127;
  short int D.23128;
  unsigned short D.23129;
  unsigned short D.23130;
  short int D.23131;
  int D.23133;
  int i;

  i = 0;
  goto <D.21934>;
  <D.21933>:
  {
    struct MonoBasicBlock * ob;

    D.23112 = bb->out_bb;
    i.13 = (unsigned int) i;
    D.23114 = i.13 * 4;
    D.23115 = D.23112 + D.23114;
    ob = *D.23115;
    if (ob == orig) goto <D.23116>; else goto <D.23117>;
    <D.23116>:
    if (repl == 0B) goto <D.23118>; else goto <D.23119>;
    <D.23118>:
    D.23120 = bb->out_count;
    if (D.23120 > 1) goto <D.23121>; else goto <D.23122>;
    <D.23121>:
    D.23112 = bb->out_bb;
    i.13 = (unsigned int) i;
    D.23114 = i.13 * 4;
    D.23115 = D.23112 + D.23114;
    D.23112 = bb->out_bb;
    D.23120 = bb->out_count;
    D.23123 = (sizetype) D.23120;
    D.23124 = D.23123 + 1073741823;
    D.23125 = D.23124 * 4;
    D.23126 = D.23112 + D.23125;
    D.23127 = *D.23126;
    *D.23115 = D.23127;
    <D.23122>:
    D.23120 = bb->out_count;
    D.23128 = D.23120;
    D.23129 = (unsigned short) D.23128;
    D.23130 = D.23129 + 65535;
    D.23131 = (short int) D.23130;
    bb->out_count = D.23131;
    goto <D.23132>;
    <D.23119>:
    D.23112 = bb->out_bb;
    i.13 = (unsigned int) i;
    D.23114 = i.13 * 4;
    D.23115 = D.23112 + D.23114;
    *D.23115 = repl;
    <D.23132>:
    <D.23117>:
  }
  i = i + 1;
  <D.21934>:
  D.23120 = bb->out_count;
  D.23133 = (int) D.23120;
  if (D.23133 > i) goto <D.21933>; else goto <D.21935>;
  <D.21935>:
}


replace_out_block_in_code (struct MonoBasicBlock * bb, struct MonoBasicBlock * orig, struct MonoBasicBlock * repl)
{
  short unsigned int D.23134;
  int D.23135;
  struct MonoBasicBlock * D.23136;
  struct MonoClass * D.23141;
  struct MonoBasicBlock * * D.23142;
  unsigned int i.14;
  unsigned int D.23144;
  struct MonoBasicBlock * * D.23145;
  struct MonoBasicBlock * D.23146;
  short unsigned int D.23152;
  short unsigned int D.23153;
  _Bool D.23154;
  short unsigned int D.23155;
  _Bool D.23156;
  _Bool D.23157;
  short unsigned int D.23159;
  struct MonoBasicBlock * D.23160;
  struct MonoBasicBlock * * D.23163;
  struct MonoBasicBlock * D.23164;
  struct MonoInst * D.23172;
  struct MonoInst * D.23175;
  struct MonoJumpInfoBBTable * iftmp.15;
  struct MonoJumpInfoBBTable * iftmp.16;
  struct MonoJumpInfoBBTable * iftmp.17;
  struct MonoJumpInfoBBTable * iftmp.18;
  struct MonoBasicBlock * * D.23194;
  unsigned int i.19;
  unsigned int D.23196;
  struct MonoBasicBlock * * D.23197;
  struct MonoBasicBlock * D.23198;
  int D.23201;
  struct MonoInst * ins;

  ins = bb->code;
  goto <D.21968>;
  <D.21967>:
  D.23134 = ins->opcode;
  D.23135 = (int) D.23134;
  switch (D.23135) <default: <D.21961>, case 370: <D.21955>, case 446: <D.21952>, case 739: <D.21954>>
  <D.21952>:
  D.23136 = ins->data.op[0].target_block;
  if (D.23136 == orig) goto <D.23137>; else goto <D.23138>;
  <D.23137>:
  ins->data.op[0].target_block = repl;
  <D.23138>:
  goto <D.21953>;
  <D.21954>:
  D.23136 = ins->data.op[0].target_block;
  if (D.23136 == orig) goto <D.23139>; else goto <D.23140>;
  <D.23139>:
  ins->data.op[0].target_block = repl;
  <D.23140>:
  goto <D.21953>;
  <D.21955>:
  {
    int i;
    int n;

    D.23141 = ins->klass;
    n = (int) D.23141;
    i = 0;
    goto <D.21959>;
    <D.21958>:
    D.23142 = ins->data.op[1].many_blocks;
    i.14 = (unsigned int) i;
    D.23144 = i.14 * 4;
    D.23145 = D.23142 + D.23144;
    D.23146 = *D.23145;
    if (D.23146 == orig) goto <D.23147>; else goto <D.23148>;
    <D.23147>:
    D.23142 = ins->data.op[1].many_blocks;
    i.14 = (unsigned int) i;
    D.23144 = i.14 * 4;
    D.23145 = D.23142 + D.23144;
    *D.23145 = repl;
    <D.23148>:
    i = i + 1;
    <D.21959>:
    if (i < n) goto <D.21958>; else goto <D.21960>;
    <D.21960>:
    goto <D.21953>;
  }
  <D.21961>:
  D.23152 = ins->opcode;
  D.23153 = D.23152 + 64981;
  D.23154 = D.23153 <= 9;
  D.23155 = D.23152 + 64874;
  D.23156 = D.23155 <= 9;
  D.23157 = D.23154 | D.23156;
  if (D.23157 != 0) goto <D.23149>; else goto <D.23158>;
  <D.23158>:
  D.23134 = ins->opcode;
  D.23159 = D.23134 + 64884;
  if (D.23159 <= 9) goto <D.23149>; else goto <D.23150>;
  <D.23149>:
  D.23142 = ins->data.op[1].many_blocks;
  D.23160 = *D.23142;
  if (D.23160 == orig) goto <D.23161>; else goto <D.23162>;
  <D.23161>:
  D.23142 = ins->data.op[1].many_blocks;
  *D.23142 = repl;
  <D.23162>:
  D.23142 = ins->data.op[1].many_blocks;
  D.23163 = D.23142 + 4;
  D.23164 = *D.23163;
  if (D.23164 == orig) goto <D.23165>; else goto <D.23166>;
  <D.23165>:
  D.23142 = ins->data.op[1].many_blocks;
  D.23163 = D.23142 + 4;
  *D.23163 = repl;
  <D.23166>:
  goto <D.23151>;
  <D.23150>:
  D.23134 = ins->opcode;
  if (D.23134 == 735) goto <D.23167>; else goto <D.23170>;
  <D.23170>:
  D.23134 = ins->opcode;
  if (D.23134 == 736) goto <D.23171>; else goto <D.23168>;
  <D.23171>:
  D.23172 = ins->data.op[1].src;
  if (D.23172 == 8B) goto <D.23167>; else goto <D.23168>;
  <D.23168>:
  D.23134 = ins->opcode;
  if (D.23134 == 370) goto <D.23167>; else goto <D.23173>;
  <D.23173>:
  D.23134 = ins->opcode;
  if (D.23134 == 738) goto <D.23174>; else goto <D.23169>;
  <D.23174>:
  D.23172 = ins->data.op[1].src;
  D.23175 = D.23172->data.op[1].src;
  if (D.23175 == 8B) goto <D.23167>; else goto <D.23169>;
  <D.23167>:
  {
    int i;
    struct MonoJumpInfoBBTable * table;

    D.23134 = ins->opcode;
    if (D.23134 == 735) goto <D.23177>; else goto <D.23178>;
    <D.23177>:
    iftmp.15 = ins->data.op[0].p;
    goto <D.23179>;
    <D.23178>:
    D.23134 = ins->opcode;
    if (D.23134 == 736) goto <D.23183>; else goto <D.23181>;
    <D.23183>:
    D.23172 = ins->data.op[1].src;
    if (D.23172 == 8B) goto <D.23184>; else goto <D.23181>;
    <D.23184>:
    iftmp.16 = ins->data.op[0].p;
    goto <D.23182>;
    <D.23181>:
    D.23134 = ins->opcode;
    if (D.23134 == 370) goto <D.23186>; else goto <D.23187>;
    <D.23186>:
    iftmp.17 = ins->data.op[0].p;
    goto <D.23188>;
    <D.23187>:
    D.23134 = ins->opcode;
    if (D.23134 == 738) goto <D.23192>; else goto <D.23190>;
    <D.23192>:
    D.23172 = ins->data.op[1].src;
    D.23175 = D.23172->data.op[1].src;
    if (D.23175 == 8B) goto <D.23193>; else goto <D.23190>;
    <D.23193>:
    D.23172 = ins->data.op[1].src;
    iftmp.18 = D.23172->data.op[0].p;
    goto <D.23191>;
    <D.23190>:
    iftmp.18 = 0B;
    <D.23191>:
    iftmp.17 = iftmp.18;
    <D.23188>:
    iftmp.16 = iftmp.17;
    <D.23182>:
    iftmp.15 = iftmp.16;
    <D.23179>:
    table = iftmp.15;
    i = 0;
    goto <D.21965>;
    <D.21964>:
    D.23194 = table->table;
    i.19 = (unsigned int) i;
    D.23196 = i.19 * 4;
    D.23197 = D.23194 + D.23196;
    D.23198 = *D.23197;
    if (D.23198 == orig) goto <D.23199>; else goto <D.23200>;
    <D.23199>:
    D.23194 = table->table;
    i.19 = (unsigned int) i;
    D.23196 = i.19 * 4;
    D.23197 = D.23194 + D.23196;
    *D.23197 = repl;
    <D.23200>:
    i = i + 1;
    <D.21965>:
    D.23201 = table->table_size;
    if (D.23201 > i) goto <D.21964>; else goto <D.21966>;
    <D.21966>:
  }
  <D.23169>:
  <D.23151>:
  goto <D.21953>;
  <D.21953>:
  ins = ins->next;
  <D.21968>:
  if (ins != 0B) goto <D.21967>; else goto <D.21969>;
  <D.21969>:
}


replace_in_block (struct MonoBasicBlock * bb, struct MonoBasicBlock * orig, struct MonoBasicBlock * repl)
{
  struct MonoBasicBlock * * D.23202;
  unsigned int i.20;
  unsigned int D.23204;
  struct MonoBasicBlock * * D.23205;
  short int D.23210;
  sizetype D.23213;
  sizetype D.23214;
  sizetype D.23215;
  struct MonoBasicBlock * * D.23216;
  struct MonoBasicBlock * D.23217;
  short int D.23218;
  unsigned short D.23219;
  unsigned short D.23220;
  short int D.23221;
  int D.23223;
  int i;

  i = 0;
  goto <D.21944>;
  <D.21943>:
  {
    struct MonoBasicBlock * ib;

    D.23202 = bb->in_bb;
    i.20 = (unsigned int) i;
    D.23204 = i.20 * 4;
    D.23205 = D.23202 + D.23204;
    ib = *D.23205;
    if (ib == orig) goto <D.23206>; else goto <D.23207>;
    <D.23206>:
    if (repl == 0B) goto <D.23208>; else goto <D.23209>;
    <D.23208>:
    D.23210 = bb->in_count;
    if (D.23210 > 1) goto <D.23211>; else goto <D.23212>;
    <D.23211>:
    D.23202 = bb->in_bb;
    i.20 = (unsigned int) i;
    D.23204 = i.20 * 4;
    D.23205 = D.23202 + D.23204;
    D.23202 = bb->in_bb;
    D.23210 = bb->in_count;
    D.23213 = (sizetype) D.23210;
    D.23214 = D.23213 + 1073741823;
    D.23215 = D.23214 * 4;
    D.23216 = D.23202 + D.23215;
    D.23217 = *D.23216;
    *D.23205 = D.23217;
    <D.23212>:
    D.23210 = bb->in_count;
    D.23218 = D.23210;
    D.23219 = (unsigned short) D.23218;
    D.23220 = D.23219 + 65535;
    D.23221 = (short int) D.23220;
    bb->in_count = D.23221;
    goto <D.23222>;
    <D.23209>:
    D.23202 = bb->in_bb;
    i.20 = (unsigned int) i;
    D.23204 = i.20 * 4;
    D.23205 = D.23202 + D.23204;
    *D.23205 = repl;
    <D.23222>:
    <D.23207>:
  }
  i = i + 1;
  <D.21944>:
  D.23210 = bb->in_count;
  D.23223 = (int) D.23210;
  if (D.23223 > i) goto <D.21943>; else goto <D.21945>;
  <D.21945>:
}


mono_optimize_branches (struct MonoCompile * cfg)
{
  unsigned int D.23224;
  struct MonoBasicBlock * D.23228;
  unsigned int D.23229;
  unsigned char D.23232;
  unsigned char D.23233;
  int D.23236;
  short int D.23241;
  struct MonoBasicBlock * D.23244;
  unsigned int D.23247;
  unsigned int D.23250;
  int D.23253;
  struct MonoBasicBlock * D.23254;
  struct MonoBasicBlock * * D.23255;
  unsigned int i.21;
  unsigned int D.23257;
  struct MonoBasicBlock * * D.23258;
  struct MonoBasicBlock * D.23259;
  short int D.23260;
  int D.23261;
  short int D.23262;
  struct MonoBasicBlock * * D.23265;
  struct MonoInst * D.23268;
  short unsigned int D.23271;
  short unsigned int D.23274;
  short unsigned int D.23275;
  _Bool D.23276;
  short unsigned int D.23277;
  _Bool D.23278;
  _Bool D.23279;
  short unsigned int D.23281;
  struct MonoBasicBlock * * D.23282;
  struct MonoBasicBlock * D.23283;
  int D.23286;
  int D.23287;
  struct MonoBasicBlock * D.23290;
  unsigned char D.23297;
  unsigned char D.23298;
  unsigned char D.23305;
  struct MonoInst * D.23330;
  short unsigned int D.23333;
  struct MonoBasicBlock * D.23336;
  unsigned int D.23339;
  int D.23344;
  short unsigned int D.23354;
  short unsigned int D.23355;
  _Bool D.23356;
  short unsigned int D.23357;
  _Bool D.23358;
  _Bool D.23359;
  short unsigned int D.23361;
  struct MonoInst * D.23364;
  struct MonoInst * D.23366;
  unsigned char D.23367;
  unsigned char D.23368;
  int D.23369;
  int D.23370;
  int D.23374;
  int D.23397;
  struct MonoBasicBlock * * D.23398;
  struct MonoBasicBlock * D.23399;
  unsigned char D.23418;
  unsigned char D.23419;
  int D.23428;
  struct MonoBasicBlock * * D.23431;
  struct MonoBasicBlock * D.23432;
  _Bool D.23433;
  long int D.23434;
  long int D.23435;
  short unsigned int D.23446;
  short unsigned int D.23447;
  _Bool D.23448;
  short unsigned int D.23449;
  _Bool D.23450;
  _Bool D.23451;
  unsigned char D.23458;
  unsigned char D.23459;
  unsigned int D.23462;
  unsigned char D.23465;
  unsigned char D.23466;
  unsigned int D.23469;
  unsigned int D.23470;
  short unsigned int D.23471;
  _Bool D.23474;
  _Bool D.23475;
  _Bool D.23476;
  int i;
  int changed;
  struct MonoBasicBlock * bb;
  struct MonoBasicBlock * bbn;
  guint32 niterations;

  changed = 0;
  D.23224 = cfg->num_bblocks;
  if (D.23224 > 1000) goto <D.23225>; else goto <D.23226>;
  <D.23225>:
  D.23224 = cfg->num_bblocks;
  niterations = D.23224 * 2;
  goto <D.23227>;
  <D.23226>:
  niterations = 1000;
  <D.23227>:
  <D.22105>:
  {
    struct MonoBasicBlock * previous_bb;

    changed = 0;
    niterations = niterations + 4294967295;
    previous_bb = cfg->bb_entry;
    D.23228 = cfg->bb_entry;
    bb = D.23228->next_bb;
    goto <D.22103>;
    <D.22102>:
    D.23229 = bb->region;
    if (D.23229 != 4294967295) goto <D.23230>; else goto <D.23231>;
    <D.23230>:
    // predicted unlikely by continue predictor.
    goto <D.22092>;
    <D.23231>:
    D.23232 = BIT_FIELD_REF <*bb, 8, 912>;
    D.23233 = D.23232 & 2;
    if (D.23233 == 0) goto <D.23234>; else goto <D.23235>;
    <D.23234>:
    D.23236 = remove_block_if_useless (cfg, bb, previous_bb);
    if (D.23236 != 0) goto <D.23237>; else goto <D.23238>;
    <D.23237>:
    changed = 1;
    // predicted unlikely by continue predictor.
    goto <D.22092>;
    <D.23238>:
    <D.23235>:
    bbn = bb->next_bb;
    if (bbn != 0B) goto <D.23239>; else goto <D.23240>;
    <D.23239>:
    D.23241 = bbn->in_count;
    if (D.23241 == 0) goto <D.23242>; else goto <D.23243>;
    <D.23242>:
    D.23244 = cfg->bb_exit;
    if (D.23244 != bbn) goto <D.23245>; else goto <D.23246>;
    <D.23245>:
    D.23229 = bb->region;
    D.23247 = bbn->region;
    if (D.23229 == D.23247) goto <D.23248>; else goto <D.23249>;
    <D.23248>:
    D.23250 = cfg->verbose_level;
    if (D.23250 > 2) goto <D.23251>; else goto <D.23252>;
    <D.23251>:
    D.23253 = bbn->block_num;
    monoeg_g_print ("nullify block triggered %d\n", D.23253);
    <D.23252>:
    D.23254 = bbn->next_bb;
    bb->next_bb = D.23254;
    i = 0;
    goto <D.22094>;
    <D.22093>:
    D.23255 = bbn->out_bb;
    i.21 = (unsigned int) i;
    D.23257 = i.21 * 4;
    D.23258 = D.23255 + D.23257;
    D.23259 = *D.23258;
    replace_in_block (D.23259, bbn, 0B);
    i = i + 1;
    <D.22094>:
    D.23260 = bbn->out_count;
    D.23261 = (int) D.23260;
    if (D.23261 > i) goto <D.22093>; else goto <D.22095>;
    <D.22095>:
    mono_nullify_basic_block (bbn);
    changed = 1;
    <D.23249>:
    <D.23246>:
    <D.23243>:
    <D.23240>:
    D.23262 = bb->out_count;
    if (D.23262 == 1) goto <D.23263>; else goto <D.23264>;
    <D.23263>:
    D.23265 = bb->out_bb;
    bbn = *D.23265;
    D.23268 = bb->last_ins;
    if (D.23268 != 0B) goto <D.23269>; else goto <D.23270>;
    <D.23269>:
    D.23268 = bb->last_ins;
    D.23271 = D.23268->opcode;
    if (D.23271 != 446) goto <D.23272>; else goto <D.23273>;
    <D.23272>:
    D.23268 = bb->last_ins;
    D.23274 = D.23268->opcode;
    D.23275 = D.23274 + 64981;
    D.23276 = D.23275 <= 9;
    D.23277 = D.23274 + 64874;
    D.23278 = D.23277 <= 9;
    D.23279 = D.23276 | D.23278;
    if (D.23279 != 0) goto <D.23266>; else goto <D.23280>;
    <D.23280>:
    D.23268 = bb->last_ins;
    D.23271 = D.23268->opcode;
    D.23281 = D.23271 + 64884;
    if (D.23281 <= 9) goto <D.23266>; else goto <D.23267>;
    <D.23266>:
    D.23268 = bb->last_ins;
    D.23268->opcode = 446;
    D.23268 = bb->last_ins;
    D.23268 = bb->last_ins;
    D.23282 = D.23268->data.op[1].many_blocks;
    D.23283 = *D.23282;
    D.23268->data.op[0].target_block = D.23283;
    changed = 1;
    D.23250 = cfg->verbose_level;
    if (D.23250 > 2) goto <D.23284>; else goto <D.23285>;
    <D.23284>:
    D.23262 = bb->out_count;
    D.23286 = (int) D.23262;
    D.23287 = bb->block_num;
    monoeg_g_print ("cond branch removal triggered in %d %d\n", D.23287, D.23286);
    <D.23285>:
    <D.23267>:
    <D.23273>:
    <D.23270>:
    D.23229 = bb->region;
    D.23247 = bbn->region;
    if (D.23229 == D.23247) goto <D.23288>; else goto <D.23289>;
    <D.23288>:
    D.23290 = bb->next_bb;
    if (D.23290 == bbn) goto <D.23291>; else goto <D.23292>;
    <D.23291>:
    D.23268 = bb->last_ins;
    if (D.23268 != 0B) goto <D.23293>; else goto <D.23294>;
    <D.23293>:
    D.23268 = bb->last_ins;
    D.23271 = D.23268->opcode;
    if (D.23271 == 446) goto <D.23295>; else goto <D.23296>;
    <D.23295>:
    D.23297 = BIT_FIELD_REF <*bbn, 8, 912>;
    D.23298 = D.23297 & 1;
    if (D.23298 == 0) goto <D.23299>; else goto <D.23300>;
    <D.23299>:
    D.23268 = bb->last_ins;
    D.23268->opcode = 316;
    changed = 1;
    D.23250 = cfg->verbose_level;
    if (D.23250 > 2) goto <D.23301>; else goto <D.23302>;
    <D.23301>:
    D.23253 = bbn->block_num;
    D.23287 = bb->block_num;
    monoeg_g_print ("br removal triggered %d -> %d\n", D.23287, D.23253);
    <D.23302>:
    <D.23300>:
    <D.23296>:
    <D.23294>:
    D.23241 = bbn->in_count;
    if (D.23241 == 1) goto <D.23303>; else goto <D.23304>;
    <D.23303>:
    D.23232 = BIT_FIELD_REF <*bb, 8, 912>;
    D.23305 = D.23232 & 8;
    if (D.23305 == 0) goto <D.23306>; else goto <D.23307>;
    <D.23306>:
    D.23244 = cfg->bb_exit;
    if (D.23244 != bbn) goto <D.23308>; else goto <D.23309>;
    <D.23308>:
    D.23250 = cfg->verbose_level;
    if (D.23250 > 2) goto <D.23310>; else goto <D.23311>;
    <D.23310>:
    D.23253 = bbn->block_num;
    D.23287 = bb->block_num;
    monoeg_g_print ("block merge triggered %d -> %d\n", D.23287, D.23253);
    <D.23311>:
    mono_merge_basic_blocks (cfg, bb, bbn);
    changed = 1;
    // predicted unlikely by continue predictor.
    goto <D.22092>;
    <D.23309>:
    <D.23307>:
    <D.23304>:
    <D.23292>:
    <D.23289>:
    <D.23264>:
    bbn = bb->next_bb;
    if (bbn != 0B) goto <D.23312>; else goto <D.23313>;
    <D.23312>:
    D.23241 = bbn->in_count;
    if (D.23241 == 0) goto <D.23314>; else goto <D.23315>;
    <D.23314>:
    D.23244 = cfg->bb_exit;
    if (D.23244 != bbn) goto <D.23316>; else goto <D.23317>;
    <D.23316>:
    D.23229 = bb->region;
    D.23247 = bbn->region;
    if (D.23229 == D.23247) goto <D.23318>; else goto <D.23319>;
    <D.23318>:
    D.23250 = cfg->verbose_level;
    if (D.23250 > 2) goto <D.23320>; else goto <D.23321>;
    <D.23320>:
    D.23253 = bbn->block_num;
    monoeg_g_print ("nullify block triggered %d\n", D.23253);
    <D.23321>:
    D.23254 = bbn->next_bb;
    bb->next_bb = D.23254;
    i = 0;
    goto <D.22097>;
    <D.22096>:
    D.23255 = bbn->out_bb;
    i.21 = (unsigned int) i;
    D.23257 = i.21 * 4;
    D.23258 = D.23255 + D.23257;
    D.23259 = *D.23258;
    replace_in_block (D.23259, bbn, 0B);
    i = i + 1;
    <D.22097>:
    D.23260 = bbn->out_count;
    D.23261 = (int) D.23260;
    if (D.23261 > i) goto <D.22096>; else goto <D.22098>;
    <D.22098>:
    mono_nullify_basic_block (bbn);
    changed = 1;
    // predicted unlikely by continue predictor.
    goto <D.22092>;
    <D.23319>:
    <D.23317>:
    <D.23315>:
    <D.23313>:
    D.23262 = bb->out_count;
    if (D.23262 == 1) goto <D.23322>; else goto <D.23323>;
    <D.23322>:
    D.23265 = bb->out_bb;
    bbn = *D.23265;
    D.23268 = bb->last_ins;
    if (D.23268 != 0B) goto <D.23324>; else goto <D.23325>;
    <D.23324>:
    D.23268 = bb->last_ins;
    D.23271 = D.23268->opcode;
    if (D.23271 == 446) goto <D.23326>; else goto <D.23327>;
    <D.23326>:
    D.23268 = bb->last_ins;
    bbn = D.23268->data.op[0].target_block;
    D.23229 = bb->region;
    D.23247 = bbn->region;
    if (D.23229 == D.23247) goto <D.23328>; else goto <D.23329>;
    <D.23328>:
    D.23330 = bbn->code;
    if (D.23330 != 0B) goto <D.23331>; else goto <D.23332>;
    <D.23331>:
    D.23330 = bbn->code;
    D.23333 = D.23330->opcode;
    if (D.23333 == 446) goto <D.23334>; else goto <D.23335>;
    <D.23334>:
    D.23330 = bbn->code;
    D.23336 = D.23330->data.op[0].target_block;
    if (D.23336 != bbn) goto <D.23337>; else goto <D.23338>;
    <D.23337>:
    D.23330 = bbn->code;
    D.23336 = D.23330->data.op[0].target_block;
    D.23339 = D.23336->region;
    D.23229 = bb->region;
    if (D.23339 == D.23229) goto <D.23340>; else goto <D.23341>;
    <D.23340>:
    D.23250 = cfg->verbose_level;
    if (D.23250 > 2) goto <D.23342>; else goto <D.23343>;
    <D.23342>:
    D.23330 = bbn->code;
    D.23336 = D.23330->data.op[0].target_block;
    D.23344 = D.23336->block_num;
    D.23253 = bbn->block_num;
    D.23287 = bb->block_num;
    monoeg_g_print ("branch to branch triggered %d -> %d -> %d\n", D.23287, D.23253, D.23344);
    <D.23343>:
    replace_in_block (bbn, bb, 0B);
    D.23330 = bbn->code;
    D.23336 = D.23330->data.op[0].target_block;
    replace_out_block (bb, bbn, D.23336);
    D.23330 = bbn->code;
    D.23336 = D.23330->data.op[0].target_block;
    mono_link_bblock (cfg, bb, D.23336);
    D.23268 = bb->last_ins;
    D.23330 = bbn->code;
    D.23336 = D.23330->data.op[0].target_block;
    D.23268->data.op[0].target_block = D.23336;
    changed = 1;
    // predicted unlikely by continue predictor.
    goto <D.22092>;
    <D.23341>:
    <D.23338>:
    <D.23335>:
    <D.23332>:
    <D.23329>:
    <D.23327>:
    <D.23325>:
    goto <D.23345>;
    <D.23323>:
    D.23262 = bb->out_count;
    if (D.23262 == 2) goto <D.23346>; else goto <D.23347>;
    <D.23346>:
    D.23268 = bb->last_ins;
    if (D.23268 != 0B) goto <D.23352>; else goto <D.23353>;
    <D.23352>:
    D.23268 = bb->last_ins;
    D.23354 = D.23268->opcode;
    D.23355 = D.23354 + 64981;
    D.23356 = D.23355 <= 9;
    D.23357 = D.23354 + 64874;
    D.23358 = D.23357 <= 9;
    D.23359 = D.23356 | D.23358;
    if (D.23359 != 0) goto <D.23350>; else goto <D.23360>;
    <D.23360>:
    D.23268 = bb->last_ins;
    D.23271 = D.23268->opcode;
    D.23281 = D.23271 + 64884;
    if (D.23281 <= 9) goto <D.23350>; else goto <D.23351>;
    <D.23350>:
    D.23268 = bb->last_ins;
    D.23271 = D.23268->opcode;
    D.23361 = D.23271 + 64874;
    if (D.23361 > 9) goto <D.23362>; else goto <D.23363>;
    <D.23362>:
    D.23268 = bb->last_ins;
    D.23364 = D.23268->data.op[0].src;
    if (D.23364 == 0B) goto <D.23348>; else goto <D.23365>;
    <D.23365>:
    D.23268 = bb->last_ins;
    D.23364 = D.23268->data.op[0].src;
    D.23366 = D.23364->data.op[0].src;
    D.23367 = D.23366->type;
    if (D.23367 != 4) goto <D.23348>; else goto <D.23349>;
    <D.23348>:
    {
      int branch_result;
      struct MonoBasicBlock * taken_branch_target;
      struct MonoBasicBlock * untaken_branch_target;

      taken_branch_target = 0B;
      untaken_branch_target = 0B;
      D.23268 = bb->last_ins;
      D.23368 = D.23268->flags;
      D.23369 = (int) D.23368;
      D.23370 = D.23369 & 8;
      if (D.23370 != 0) goto <D.23371>; else goto <D.23372>;
      <D.23371>:
      branch_result = 1;
      goto <D.23373>;
      <D.23372>:
      D.23268 = bb->last_ins;
      D.23368 = D.23268->flags;
      D.23369 = (int) D.23368;
      D.23374 = D.23369 & 16;
      if (D.23374 != 0) goto <D.23375>; else goto <D.23376>;
      <D.23375>:
      branch_result = 0;
      goto <D.23377>;
      <D.23376>:
      branch_result = 2;
      <D.23377>:
      <D.23373>:
      if (branch_result == 1) goto <D.23378>; else goto <D.23379>;
      <D.23378>:
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      taken_branch_target = *D.23282;
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      untaken_branch_target = MEM[(struct MonoBasicBlock * *)D.23282 + 4B];
      goto <D.23380>;
      <D.23379>:
      if (branch_result == 0) goto <D.23381>; else goto <D.23382>;
      <D.23381>:
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      taken_branch_target = MEM[(struct MonoBasicBlock * *)D.23282 + 4B];
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      untaken_branch_target = *D.23282;
      <D.23382>:
      <D.23380>:
      if (taken_branch_target != 0B) goto <D.23383>; else goto <D.23384>;
      <D.23383>:
      D.23268 = bb->last_ins;
      D.23268->opcode = 446;
      D.23268 = bb->last_ins;
      D.23268->data.op[0].target_block = taken_branch_target;
      D.23232 = BIT_FIELD_REF <*bb, 8, 912>;
      D.23305 = D.23232 & 8;
      if (D.23305 == 0) goto <D.23385>; else goto <D.23386>;
      <D.23385>:
      mono_unlink_bblock (cfg, bb, untaken_branch_target);
      <D.23386>:
      changed = 1;
      // predicted unlikely by continue predictor.
      goto <D.22092>;
      <D.23384>:
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      bbn = *D.23282;
      D.23229 = bb->region;
      D.23247 = bbn->region;
      if (D.23229 == D.23247) goto <D.23387>; else goto <D.23388>;
      <D.23387>:
      D.23330 = bbn->code;
      if (D.23330 != 0B) goto <D.23389>; else goto <D.23390>;
      <D.23389>:
      D.23330 = bbn->code;
      D.23333 = D.23330->opcode;
      if (D.23333 == 446) goto <D.23391>; else goto <D.23392>;
      <D.23391>:
      D.23330 = bbn->code;
      D.23336 = D.23330->data.op[0].target_block;
      D.23339 = D.23336->region;
      D.23229 = bb->region;
      if (D.23339 == D.23229) goto <D.23393>; else goto <D.23394>;
      <D.23393>:
      D.23250 = cfg->verbose_level;
      if (D.23250 > 2) goto <D.23395>; else goto <D.23396>;
      <D.23395>:
      D.23330 = bbn->code;
      D.23333 = D.23330->opcode;
      D.23397 = (int) D.23333;
      D.23330 = bbn->code;
      D.23336 = D.23330->data.op[0].target_block;
      D.23344 = D.23336->block_num;
      D.23253 = bbn->block_num;
      D.23287 = bb->block_num;
      monoeg_g_print ("cbranch1 to branch triggered %d -> (%d) %d (0x%02x)\n", D.23287, D.23253, D.23344, D.23397);
      <D.23396>:
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      D.23283 = *D.23282;
      mono_unlink_bblock (cfg, bb, D.23283);
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      D.23398 = D.23282 + 4;
      D.23399 = *D.23398;
      mono_unlink_bblock (cfg, bb, D.23399);
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      D.23330 = bbn->code;
      D.23336 = D.23330->data.op[0].target_block;
      *D.23282 = D.23336;
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      D.23283 = *D.23282;
      mono_link_bblock (cfg, bb, D.23283);
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      D.23398 = D.23282 + 4;
      D.23399 = *D.23398;
      mono_link_bblock (cfg, bb, D.23399);
      changed = 1;
      // predicted unlikely by continue predictor.
      goto <D.22092>;
      <D.23394>:
      <D.23392>:
      <D.23390>:
      <D.23388>:
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      bbn = MEM[(struct MonoBasicBlock * *)D.23282 + 4B];
      if (bbn != 0B) goto <D.23400>; else goto <D.23401>;
      <D.23400>:
      D.23229 = bb->region;
      D.23247 = bbn->region;
      if (D.23229 == D.23247) goto <D.23402>; else goto <D.23403>;
      <D.23402>:
      D.23330 = bbn->code;
      if (D.23330 != 0B) goto <D.23404>; else goto <D.23405>;
      <D.23404>:
      D.23330 = bbn->code;
      D.23333 = D.23330->opcode;
      if (D.23333 == 446) goto <D.23406>; else goto <D.23407>;
      <D.23406>:
      D.23330 = bbn->code;
      D.23336 = D.23330->data.op[0].target_block;
      D.23339 = D.23336->region;
      D.23229 = bb->region;
      if (D.23339 == D.23229) goto <D.23408>; else goto <D.23409>;
      <D.23408>:
      D.23250 = cfg->verbose_level;
      if (D.23250 > 2) goto <D.23410>; else goto <D.23411>;
      <D.23410>:
      D.23330 = bbn->code;
      D.23333 = D.23330->opcode;
      D.23397 = (int) D.23333;
      D.23330 = bbn->code;
      D.23336 = D.23330->data.op[0].target_block;
      D.23344 = D.23336->block_num;
      D.23253 = bbn->block_num;
      D.23287 = bb->block_num;
      monoeg_g_print ("cbranch2 to branch triggered %d -> (%d) %d (0x%02x)\n", D.23287, D.23253, D.23344, D.23397);
      <D.23411>:
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      D.23283 = *D.23282;
      mono_unlink_bblock (cfg, bb, D.23283);
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      D.23398 = D.23282 + 4;
      D.23399 = *D.23398;
      mono_unlink_bblock (cfg, bb, D.23399);
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      D.23398 = D.23282 + 4;
      D.23330 = bbn->code;
      D.23336 = D.23330->data.op[0].target_block;
      *D.23398 = D.23336;
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      D.23283 = *D.23282;
      mono_link_bblock (cfg, bb, D.23283);
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      D.23398 = D.23282 + 4;
      D.23399 = *D.23398;
      mono_link_bblock (cfg, bb, D.23399);
      changed = 1;
      // predicted unlikely by continue predictor.
      goto <D.22092>;
      <D.23409>:
      <D.23407>:
      <D.23405>:
      <D.23403>:
      <D.23401>:
      D.23268 = bb->last_ins;
      D.23282 = D.23268->data.op[1].many_blocks;
      bbn = MEM[(struct MonoBasicBlock * *)D.23282 + 4B];
      if (bbn != 0B) goto <D.23412>; else goto <D.23413>;
      <D.23412>:
      D.23229 = bb->region;
      D.23247 = bbn->region;
      if (D.23229 == D.23247) goto <D.23414>; else goto <D.23415>;
      <D.23414>:
      D.23241 = bbn->in_count;
      if (D.23241 == 1) goto <D.23416>; else goto <D.23417>;
      <D.23416>:
      D.23418 = BIT_FIELD_REF <*cfg, 8, 3392>;
      D.23419 = D.23418 & 8;
      if (D.23419 != 0) goto <D.23420>; else goto <D.23421>;
      <D.23420>:
      D.23244 = cfg->bb_exit;
      if (D.23244 != bbn) goto <D.23422>; else goto <D.23423>;
      <D.23422>:
      D.23232 = BIT_FIELD_REF <*bb, 8, 912>;
      D.23305 = D.23232 & 8;
      if (D.23305 == 0) goto <D.23424>; else goto <D.23425>;
      <D.23424>:
      D.23297 = BIT_FIELD_REF <*bbn, 8, 912>;
      D.23298 = D.23297 & 1;
      if (D.23298 == 0) goto <D.23426>; else goto <D.23427>;
      <D.23426>:
      D.23428 = mono_bblocks_linked (bbn, bb);
      if (D.23428 == 0) goto <D.23429>; else goto <D.23430>;
      <D.23429>:
      D.23431 = bbn->in_bb;
      D.23432 = *D.23431;
      D.23433 = D.23432 != bb;
      D.23434 = (long int) D.23433;
      D.23435 = __builtin_expect (D.23434, 0);
      if (D.23435 != 0) goto <D.23436>; else goto <D.23437>;
      <D.23436>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "branch-opts.c", 1432, "bbn->in_bb [0] == bb");
      <D.23437>:
      D.23250 = cfg->verbose_level;
      if (D.23250 > 2) goto <D.23438>; else goto <D.23439>;
      <D.23438>:
      D.23253 = bbn->block_num;
      D.23287 = bb->block_num;
      monoeg_g_print ("merge false branch target triggered BB%d -> BB%d\n", D.23287, D.23253);
      <D.23439>:
      mono_merge_basic_blocks (cfg, bb, bbn);
      changed = 1;
      // predicted unlikely by continue predictor.
      goto <D.22092>;
      <D.23430>:
      <D.23427>:
      <D.23425>:
      <D.23423>:
      <D.23421>:
      <D.23417>:
      <D.23415>:
      <D.23413>:
    }
    <D.23349>:
    <D.23363>:
    <D.23351>:
    <D.23353>:
    D.23268 = bb->last_ins;
    if (D.23268 != 0B) goto <D.23444>; else goto <D.23445>;
    <D.23444>:
    D.23268 = bb->last_ins;
    D.23446 = D.23268->opcode;
    D.23447 = D.23446 + 64981;
    D.23448 = D.23447 <= 9;
    D.23449 = D.23446 + 64874;
    D.23450 = D.23449 <= 9;
    D.23451 = D.23448 | D.23450;
    if (D.23451 != 0) goto <D.23442>; else goto <D.23452>;
    <D.23452>:
    D.23268 = bb->last_ins;
    D.23271 = D.23268->opcode;
    D.23281 = D.23271 + 64884;
    if (D.23281 <= 9) goto <D.23442>; else goto <D.23443>;
    <D.23442>:
    D.23268 = bb->last_ins;
    D.23271 = D.23268->opcode;
    D.23361 = D.23271 + 64874;
    if (D.23361 > 9) goto <D.23453>; else goto <D.23454>;
    <D.23453>:
    D.23268 = bb->last_ins;
    D.23364 = D.23268->data.op[0].src;
    if (D.23364 == 0B) goto <D.23440>; else goto <D.23455>;
    <D.23455>:
    D.23268 = bb->last_ins;
    D.23364 = D.23268->data.op[0].src;
    D.23366 = D.23364->data.op[0].src;
    D.23367 = D.23366->type;
    if (D.23367 != 4) goto <D.23440>; else goto <D.23441>;
    <D.23440>:
    D.23268 = bb->last_ins;
    D.23282 = D.23268->data.op[1].many_blocks;
    D.23398 = D.23282 + 4;
    D.23399 = *D.23398;
    if (D.23399 != 0B) goto <D.23456>; else goto <D.23457>;
    <D.23456>:
    D.23268 = bb->last_ins;
    D.23282 = D.23268->data.op[1].many_blocks;
    D.23398 = D.23282 + 4;
    D.23399 = *D.23398;
    D.23458 = BIT_FIELD_REF <*D.23399, 8, 912>;
    D.23459 = D.23458 & 1;
    if (D.23459 != 0) goto <D.23460>; else goto <D.23461>;
    <D.23460>:
    D.23229 = bb->region;
    D.23268 = bb->last_ins;
    D.23282 = D.23268->data.op[1].many_blocks;
    D.23398 = D.23282 + 4;
    D.23399 = *D.23398;
    D.23462 = D.23399->region;
    if (D.23229 == D.23462) goto <D.23463>; else goto <D.23464>;
    <D.23463>:
    D.23465 = BIT_FIELD_REF <*cfg, 8, 3416>;
    D.23466 = D.23465 & 1;
    if (D.23466 == 0) goto <D.23467>; else goto <D.23468>;
    <D.23467>:
    D.23268 = bb->last_ins;
    D.23268 = bb->last_ins;
    D.23271 = D.23268->opcode;
    D.23469 = (unsigned int) D.23271;
    D.23470 = mono_reverse_branch_op (D.23469);
    D.23471 = (short unsigned int) D.23470;
    D.23268->opcode = D.23471;
    D.23268 = bb->last_ins;
    D.23282 = D.23268->data.op[1].many_blocks;
    bbn = MEM[(struct MonoBasicBlock * *)D.23282 + 4B];
    D.23268 = bb->last_ins;
    D.23282 = D.23268->data.op[1].many_blocks;
    D.23398 = D.23282 + 4;
    D.23268 = bb->last_ins;
    D.23282 = D.23268->data.op[1].many_blocks;
    D.23283 = *D.23282;
    *D.23398 = D.23283;
    D.23268 = bb->last_ins;
    D.23282 = D.23268->data.op[1].many_blocks;
    *D.23282 = bbn;
    D.23268 = bb->last_ins;
    D.23282 = D.23268->data.op[1].many_blocks;
    D.23283 = *D.23282;
    move_basic_block_to_end (cfg, D.23283);
    D.23250 = cfg->verbose_level;
    if (D.23250 > 2) goto <D.23472>; else goto <D.23473>;
    <D.23472>:
    D.23287 = bb->block_num;
    monoeg_g_print ("cbranch to throw block triggered %d.\n", D.23287);
    <D.23473>:
    <D.23468>:
    <D.23464>:
    <D.23461>:
    <D.23457>:
    <D.23441>:
    <D.23454>:
    <D.23443>:
    <D.23445>:
    <D.23347>:
    <D.23345>:
    <D.22092>:
    previous_bb = bb;
    bb = bb->next_bb;
    <D.22103>:
    if (bb != 0B) goto <D.22102>; else goto <D.22104>;
    <D.22104>:
  }
  D.23474 = changed != 0;
  D.23475 = niterations != 0;
  D.23476 = D.23474 & D.23475;
  if (D.23476 != 0) goto <D.22105>; else goto <D.22106>;
  <D.22106>:
}


remove_block_if_useless (struct MonoCompile * cfg, struct MonoBasicBlock * bb, struct MonoBasicBlock * previous_bb)
{
  unsigned int D.23477;
  gboolean D.23480;
  short unsigned int D.23481;
  int D.23482;
  short int D.23487;
  struct MonoBasicBlock * * D.23489;
  struct MonoBasicBlock * D.23490;
  struct MonoBasicBlock * D.23491;
  struct MonoInst * D.23493;
  short unsigned int D.23496;
  struct MonoBasicBlock * D.23499;
  unsigned int D.23504;
  unsigned int D.23505;
  _Bool D.23508;
  _Bool D.23509;
  _Bool D.23510;
  unsigned int D.23513;
  int D.23516;
  struct MonoBasicBlock * * D.23517;
  short int D.23518;
  int D.23521;
  struct MonoBasicBlock * * D.23524;
  unsigned int i.22;
  unsigned int D.23526;
  struct MonoBasicBlock * * D.23527;
  struct MonoBasicBlock * D.23528;
  struct MonoMemPool * D.23531;
  int D.23532;
  int D.23533;
  const unsigned char * D.23534;
  unsigned char * D.23538;
  short int D.23539;
  int D.23540;
  struct MonoBasicBlock * target_bb;
  struct MonoInst * inst;

  target_bb = 0B;
  D.23477 = bb->region;
  if (D.23477 != 4294967295) goto <D.23478>; else goto <D.23479>;
  <D.23478>:
  bb->not_useless = 1;
  D.23480 = 0;
  return D.23480;
  <D.23479>:
  inst = bb->code;
  goto <D.21982>;
  <D.21981>:
  D.23481 = inst->opcode;
  D.23482 = (int) D.23481;
  switch (D.23482) <default: <D.21980>, case 316: <D.21977>, case 446: <D.21979>>
  <D.21977>:
  goto <D.21978>;
  <D.21979>:
  target_bb = inst->data.op[0].target_block;
  goto <D.21978>;
  <D.21980>:
  bb->not_useless = 1;
  D.23480 = 0;
  return D.23480;
  <D.21978>:
  inst = inst->next;
  <D.21982>:
  if (inst != 0B) goto <D.21981>; else goto <D.21983>;
  <D.21983>:
  if (target_bb == 0B) goto <D.23483>; else goto <D.23484>;
  <D.23483>:
  D.23487 = bb->out_count;
  if (D.23487 == 1) goto <D.23488>; else goto <D.23485>;
  <D.23488>:
  D.23489 = bb->out_bb;
  D.23490 = *D.23489;
  D.23491 = bb->next_bb;
  if (D.23490 == D.23491) goto <D.23492>; else goto <D.23485>;
  <D.23492>:
  target_bb = bb->next_bb;
  goto <D.23486>;
  <D.23485>:
  D.23480 = 0;
  return D.23480;
  <D.23486>:
  <D.23484>:
  D.23493 = previous_bb->last_ins;
  if (D.23493 != 0B) goto <D.23494>; else goto <D.23495>;
  <D.23494>:
  D.23493 = previous_bb->last_ins;
  D.23496 = D.23493->opcode;
  if (D.23496 == 370) goto <D.23497>; else goto <D.23498>;
  <D.23497>:
  D.23480 = 0;
  return D.23480;
  <D.23498>:
  <D.23495>:
  D.23499 = cfg->bb_entry;
  if (D.23499 == previous_bb) goto <D.23500>; else goto <D.23501>;
  <D.23500>:
  D.23491 = bb->next_bb;
  if (D.23491 != target_bb) goto <D.23502>; else goto <D.23503>;
  <D.23502>:
  D.23480 = 0;
  return D.23480;
  <D.23503>:
  <D.23501>:
  D.23504 = previous_bb->region;
  D.23505 = D.23504 & 240;
  if (D.23505 == 0) goto <D.23506>; else goto <D.23507>;
  <D.23506>:
  D.23480 = 0;
  return D.23480;
  <D.23507>:
  D.23508 = target_bb != 0B;
  D.23509 = target_bb != bb;
  D.23510 = D.23508 & D.23509;
  if (D.23510 != 0) goto <D.23511>; else goto <D.23512>;
  <D.23511>:
  {
    int i;

    D.23513 = cfg->verbose_level;
    if (D.23513 > 1) goto <D.23514>; else goto <D.23515>;
    <D.23514>:
    D.23516 = bb->block_num;
    printf ("remove_block_if_useless, removed BB%d\n", D.23516);
    <D.23515>:
    goto <D.21987>;
    <D.21986>:
    {
      struct MonoBasicBlock * in_bb;

      D.23517 = bb->in_bb;
      in_bb = *D.23517;
      mono_unlink_bblock (cfg, in_bb, bb);
      mono_link_bblock (cfg, in_bb, target_bb);
      replace_out_block_in_code (in_bb, bb, target_bb);
    }
    <D.21987>:
    D.23518 = bb->in_count;
    if (D.23518 != 0) goto <D.21986>; else goto <D.21988>;
    <D.21988>:
    mono_unlink_bblock (cfg, bb, target_bb);
    D.23499 = cfg->bb_entry;
    if (D.23499 != previous_bb) goto <D.23519>; else goto <D.23520>;
    <D.23519>:
    D.23521 = mono_bb_is_fall_through (cfg, previous_bb);
    if (D.23521 != 0) goto <D.23522>; else goto <D.23523>;
    <D.23522>:
    i = 0;
    goto <D.21992>;
    <D.21991>:
    D.23524 = previous_bb->out_bb;
    i.22 = (unsigned int) i;
    D.23526 = i.22 * 4;
    D.23527 = D.23524 + D.23526;
    D.23528 = *D.23527;
    if (D.23528 == target_bb) goto <D.23529>; else goto <D.23530>;
    <D.23529>:
    {
      struct MonoInst * jump;

      D.23531 = cfg->mempool;
      jump = mono_mempool_alloc0 (D.23531, 48);
      jump->opcode = 446;
      jump->dreg = -1;
      jump->sreg3 = -1;
      D.23532 = jump->sreg3;
      jump->sreg2 = D.23532;
      D.23533 = jump->sreg2;
      jump->sreg1 = D.23533;
      D.23534 = cfg->ip;
      jump->cil_code = D.23534;
      D.23493 = previous_bb->last_ins;
      if (D.23493 != 0B) goto <D.23535>; else goto <D.23536>;
      <D.23535>:
      D.23493 = previous_bb->last_ins;
      D.23493->next = jump;
      D.23493 = previous_bb->last_ins;
      jump->prev = D.23493;
      previous_bb->last_ins = jump;
      goto <D.23537>;
      <D.23536>:
      previous_bb->last_ins = jump;
      D.23493 = previous_bb->last_ins;
      previous_bb->code = D.23493;
      <D.23537>:
      D.23538 = previous_bb->cil_code;
      jump->cil_code = D.23538;
      jump->data.op[0].target_block = target_bb;
      goto <D.21990>;
    }
    <D.23530>:
    i = i + 1;
    <D.21992>:
    D.23539 = previous_bb->out_count;
    D.23540 = (int) D.23539;
    if (D.23540 > i) goto <D.21991>; else goto <D.21990>;
    <D.21990>:
    <D.23523>:
    <D.23520>:
    D.23491 = bb->next_bb;
    previous_bb->next_bb = D.23491;
    mono_nullify_basic_block (bb);
    D.23480 = 1;
    return D.23480;
  }
  <D.23512>:
  D.23480 = 0;
  return D.23480;
}


move_basic_block_to_end (struct MonoCompile * cfg, struct MonoBasicBlock * bb)
{
  struct MonoBasicBlock * D.23543;
  struct MonoBasicBlock * D.23547;
  struct MonoInst * D.23552;
  short unsigned int D.23554;
  _Bool D.23555;
  _Bool D.23556;
  _Bool D.23557;
  short unsigned int D.23559;
  short unsigned int D.23561;
  short unsigned int D.23562;
  _Bool D.23563;
  short unsigned int D.23564;
  _Bool D.23565;
  _Bool D.23566;
  short unsigned int D.23568;
  struct MonoMemPool * D.23569;
  int D.23570;
  int D.23571;
  const unsigned char * D.23572;
  struct MonoBasicBlock * bbn;
  struct MonoBasicBlock * next;

  next = bb->next_bb;
  bbn = cfg->bb_entry;
  goto <D.22028>;
  <D.22027>:
  bbn = bbn->next_bb;
  <D.22028>:
  D.23543 = bbn->next_bb;
  if (D.23543 != 0B) goto <D.23544>; else goto <D.22029>;
  <D.23544>:
  D.23543 = bbn->next_bb;
  if (D.23543 != bb) goto <D.22027>; else goto <D.22029>;
  <D.22029>:
  D.23543 = bbn->next_bb;
  if (D.23543 != 0B) goto <D.23545>; else goto <D.23546>;
  <D.23545>:
  D.23547 = bb->next_bb;
  bbn->next_bb = D.23547;
  <D.23546>:
  bbn = cfg->bb_entry;
  goto <D.22031>;
  <D.22030>:
  bbn = bbn->next_bb;
  <D.22031>:
  D.23543 = bbn->next_bb;
  if (D.23543 != 0B) goto <D.22030>; else goto <D.22032>;
  <D.22032>:
  bbn->next_bb = bb;
  bb->next_bb = 0B;
  if (next != 0B) goto <D.23550>; else goto <D.23551>;
  <D.23550>:
  D.23552 = bb->last_ins;
  if (D.23552 == 0B) goto <D.23548>; else goto <D.23553>;
  <D.23553>:
  D.23552 = bb->last_ins;
  D.23554 = D.23552->opcode;
  D.23555 = D.23554 != 802;
  D.23556 = D.23554 != 446;
  D.23557 = D.23555 & D.23556;
  if (D.23557 != 0) goto <D.23558>; else goto <D.23549>;
  <D.23558>:
  D.23552 = bb->last_ins;
  D.23559 = D.23552->opcode;
  if (D.23559 != 763) goto <D.23560>; else goto <D.23549>;
  <D.23560>:
  D.23552 = bb->last_ins;
  D.23561 = D.23552->opcode;
  D.23562 = D.23561 + 64981;
  D.23563 = D.23562 > 9;
  D.23564 = D.23561 + 64874;
  D.23565 = D.23564 > 9;
  D.23566 = D.23563 & D.23565;
  if (D.23566 != 0) goto <D.23567>; else goto <D.23549>;
  <D.23567>:
  D.23552 = bb->last_ins;
  D.23559 = D.23552->opcode;
  D.23568 = D.23559 + 64884;
  if (D.23568 > 9) goto <D.23548>; else goto <D.23549>;
  <D.23548>:
  {
    struct MonoInst * ins;

    D.23569 = cfg->mempool;
    ins = mono_mempool_alloc0 (D.23569, 48);
    ins->opcode = 446;
    ins->dreg = -1;
    ins->sreg3 = -1;
    D.23570 = ins->sreg3;
    ins->sreg2 = D.23570;
    D.23571 = ins->sreg2;
    ins->sreg1 = D.23571;
    D.23572 = cfg->ip;
    ins->cil_code = D.23572;
    D.23552 = bb->last_ins;
    if (D.23552 != 0B) goto <D.23573>; else goto <D.23574>;
    <D.23573>:
    D.23552 = bb->last_ins;
    D.23552->next = ins;
    D.23552 = bb->last_ins;
    ins->prev = D.23552;
    bb->last_ins = ins;
    goto <D.23575>;
    <D.23574>:
    bb->last_ins = ins;
    D.23552 = bb->last_ins;
    bb->code = D.23552;
    <D.23575>:
    mono_link_bblock (cfg, bb, next);
    ins->data.op[0].target_block = next;
  }
  <D.23549>:
  <D.23551>:
}


