mono_local_cprop (struct MonoCompile * cfg)
{
  unsigned int D.22406;
  unsigned int D.22407;
  unsigned int D.22408;
  struct MonoMemPool * D.22409;
  unsigned int D.22410;
  int D.22411;
  long unsigned int D.22416;
  long unsigned int D.22417;
  struct MonoInst * * D.22418;
  int D.22419;
  int D.22420;
  int D.22421;
  short unsigned int D.22422;
  int D.22423;
  int D.22424;
  signed char D.22425;
  long unsigned int D.22428;
  long unsigned int D.22429;
  struct MonoInst * * D.22430;
  int D.22431;
  struct MonoInst * D.22434;
  struct MonoInst * D.22437;
  struct MonoInst * D.22440;
  struct MonoInst * D.22443;
  _Bool D.22446;
  long int D.22447;
  long int D.22448;
  int D.22453;
  long unsigned int D.22454;
  long unsigned int D.22455;
  struct MonoInst * * D.22456;
  short unsigned int D.22457;
  _Bool D.22460;
  _Bool D.22461;
  _Bool D.22462;
  long unsigned int D.22465;
  long unsigned int D.22466;
  struct MonoInst * * D.22467;
  struct MonoInst * D.22468;
  short unsigned int D.22473;
  int D.22476;
  long unsigned int D.22477;
  long unsigned int D.22478;
  struct MonoInst * * D.22479;
  struct MonoInst * D.22480;
  long unsigned int D.22482;
  gint32 * D.22483;
  int D.22484;
  long unsigned int D.22485;
  gint32 * D.22486;
  int D.22487;
  int iftmp.0;
  unsigned int D.22491;
  unsigned int D.22492;
  struct MonoInst * * D.22494;
  struct MonoInst * * D.22495;
  struct MonoInst * D.22496;
  struct MonoInst * iftmp.1;
  unsigned char D.22502;
  int D.22503;
  int D.22504;
  _Bool D.22506;
  long int D.22507;
  long int D.22508;
  unsigned int D.22511;
  int D.22514;
  sizetype D.22515;
  const char * D.22516;
  char D.22517;
  _Bool D.22520;
  _Bool D.22521;
  _Bool D.22522;
  short unsigned int D.22531;
  _Bool D.22532;
  _Bool D.22533;
  _Bool D.22534;
  short unsigned int D.22536;
  int D.22538;
  long unsigned int D.22539;
  long unsigned int D.22540;
  struct MonoInst * * D.22541;
  struct MonoInst * D.22542;
  long unsigned int D.22544;
  gint32 * D.22545;
  int D.22546;
  int iftmp.2;
  unsigned int D.22550;
  struct MonoInst * * D.22552;
  struct MonoInst * D.22553;
  struct MonoInst * iftmp.3;
  unsigned char D.22559;
  int D.22560;
  int D.22561;
  _Bool D.22563;
  long int D.22564;
  long int D.22565;
  struct MonoInst * D.22572;
  short unsigned int D.22584;
  long int D.22587;
  int D.22588;
  long unsigned int D.22593;
  long unsigned int D.22594;
  struct MonoInst * * D.22595;
  struct MonoInst * D.22596;
  short unsigned int D.22598;
  long unsigned int D.22600;
  long unsigned int D.22601;
  struct MonoInst * * D.22602;
  struct MonoInst * D.22603;
  int D.22616;
  int D.22620;
  short unsigned int D.22623;
  long int D.22626;
  _Bool D.22630;
  _Bool D.22631;
  _Bool D.22632;
  _Bool D.22634;
  _Bool D.22635;
  _Bool D.22636;
  long int D.22637;
  const void * D.22638;
  int D.22643;
  long int D.22644;
  long int D.22645;
  int D.22646;
  _Bool D.22647;
  _Bool D.22648;
  _Bool D.22649;
  int D.22652;
  long int D.22655;
  long int D.22656;
  short unsigned int D.22659;
  _Bool D.22660;
  _Bool D.22661;
  _Bool D.22662;
  short unsigned int D.22664;
  short unsigned int D.22665;
  _Bool D.22666;
  _Bool D.22667;
  _Bool D.22668;
  unsigned int D.22672;
  struct MonoInst * D.22674;
  int D.22676;
  long int D.22677;
  long int D.22684;
  short unsigned int D.22696;
  _Bool D.22697;
  _Bool D.22698;
  _Bool D.22699;
  short unsigned int D.22708;
  _Bool D.22709;
  _Bool D.22710;
  _Bool D.22711;
  guint16 iftmp.4;
  unsigned int D.22745;
  guint16 iftmp.5;
  guint16 iftmp.6;
  long int D.22756;
  unsigned int c.7;
  int D.22762;
  int D.22763;
  long int D.22764;
  long int D.22768;
  unsigned int c.8;
  unsigned int D.22772;
  long int D.22773;
  struct MonoInst * D.22774;
  int D.22775;
  int D.22776;
  const unsigned char * D.22777;
  long int D.22778;
  struct MonoInst * D.22779;
  int D.22780;
  int D.22781;
  long int D.22782;
  struct MonoInst * D.22783;
  int D.22784;
  int D.22785;
  unsigned int D.22788;
  int D.22789;
  long int D.22790;
  long int D.22791;
  struct MonoInst * D.22792;
  int D.22793;
  int D.22794;
  long int D.22795;
  char D.22797;
  short unsigned int D.22802;
  int D.22805;
  unsigned int D.22806;
  long int D.22811;
  long int D.22812;
  int iftmp.9;
  unsigned int D.22820;
  struct MonoInst * * D.22822;
  struct MonoInst * D.22823;
  struct MonoInst * iftmp.10;
  unsigned char D.22829;
  int D.22830;
  int D.22831;
  _Bool D.22833;
  long int D.22834;
  long int D.22835;
  long unsigned int D.22838;
  gint32 * D.22839;
  short unsigned int D.22842;
  short unsigned int D.22843;
  _Bool D.22844;
  short unsigned int D.22845;
  _Bool D.22846;
  _Bool D.22847;
  short unsigned int D.22849;
  short unsigned int D.22851;
  short unsigned int D.22853;
  short unsigned int D.22855;
  struct MonoBasicBlock * bb;
  struct MonoInst * * defs;
  gint32 * def_index;
  int max;
  void restart = <<< error >>>;

  restart:
  D.22406 = cfg->next_vreg;
  max = (int) D.22406;
  D.22406 = cfg->next_vreg;
  D.22407 = D.22406 + 1;
  D.22408 = D.22407 * 8;
  D.22409 = cfg->mempool;
  defs = mono_mempool_alloc (D.22409, D.22408);
  D.22406 = cfg->next_vreg;
  D.22407 = D.22406 + 1;
  D.22410 = D.22407 * 4;
  D.22409 = cfg->mempool;
  def_index = mono_mempool_alloc (D.22409, D.22410);
  bb = cfg->bb_entry;
  goto <D.22330>;
  <D.22329>:
  {
    struct MonoInst * ins;
    int ins_index;
    int last_call_index;

    ins = bb->code;
    goto <D.22278>;
    <D.22277>:
    {
      int sregs[3];
      int num_sregs;
      int i;

      try
        {
          D.22411 = ins->dreg;
          if (D.22411 != -1) goto <D.22412>; else goto <D.22413>;
          <D.22412>:
          D.22411 = ins->dreg;
          if (D.22411 < max) goto <D.22414>; else goto <D.22415>;
          <D.22414>:
          D.22411 = ins->dreg;
          D.22416 = (long unsigned int) D.22411;
          D.22417 = D.22416 * 8;
          D.22418 = defs + D.22417;
          *D.22418 = 0B;
          <D.22415>:
          <D.22413>:
          D.22419 = ins->sreg1;
          sregs[0] = D.22419;
          D.22420 = ins->sreg2;
          sregs[1] = D.22420;
          D.22421 = ins->sreg3;
          sregs[2] = D.22421;
          D.22422 = ins->opcode;
          D.22423 = (int) D.22422;
          D.22424 = D.22423 + -313;
          D.22425 = ins_sreg_counts[D.22424];
          num_sregs = (int) D.22425;
          i = 0;
          goto <D.22275>;
          <D.22274>:
          {
            int sreg;

            sreg = sregs[i];
            if (sreg < max) goto <D.22426>; else goto <D.22427>;
            <D.22426>:
            D.22428 = (long unsigned int) sreg;
            D.22429 = D.22428 * 8;
            D.22430 = defs + D.22429;
            *D.22430 = 0B;
            <D.22427>:
          }
          i = i + 1;
          <D.22275>:
          if (i < num_sregs) goto <D.22274>; else goto <D.22276>;
          <D.22276>:
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    ins = ins->next;
    <D.22278>:
    if (ins != 0B) goto <D.22277>; else goto <D.22279>;
    <D.22279>:
    ins_index = 0;
    last_call_index = -1;
    ins = bb->code;
    goto <D.22327>;
    <D.22326>:
    {
      const char * spec;
      int regtype;
      int srcindex;
      int sreg;
      int num_sregs;
      int sregs[3];

      try
        {
          D.22422 = ins->opcode;
          D.22423 = (int) D.22422;
          D.22424 = D.22423 + -313;
          D.22431 = D.22424 * 4;
          spec = &ins_info[D.22431];
          D.22422 = ins->opcode;
          if (D.22422 == 316) goto <D.22432>; else goto <D.22433>;
          <D.22432>:
          D.22434 = ins->prev;
          if (D.22434 != 0B) goto <D.22435>; else goto <D.22436>;
          <D.22435>:
          D.22434 = ins->prev;
          D.22437 = ins->next;
          D.22434->next = D.22437;
          <D.22436>:
          D.22437 = ins->next;
          if (D.22437 != 0B) goto <D.22438>; else goto <D.22439>;
          <D.22438>:
          D.22437 = ins->next;
          D.22434 = ins->prev;
          D.22437->prev = D.22434;
          <D.22439>:
          D.22440 = bb->code;
          if (D.22440 == ins) goto <D.22441>; else goto <D.22442>;
          <D.22441>:
          D.22437 = ins->next;
          bb->code = D.22437;
          <D.22442>:
          D.22443 = bb->last_ins;
          if (D.22443 == ins) goto <D.22444>; else goto <D.22445>;
          <D.22444>:
          D.22434 = ins->prev;
          bb->last_ins = D.22434;
          <D.22445>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22421 = ins->sreg3;
          ins->sreg2 = D.22421;
          D.22420 = ins->sreg2;
          ins->sreg1 = D.22420;
          // predicted unlikely by continue predictor.
          goto <D.22286>;
          <D.22433>:
          D.22422 = ins->opcode;
          D.22446 = D.22422 <= 313;
          D.22447 = (long int) D.22446;
          D.22448 = __builtin_expect (D.22447, 0);
          if (D.22448 != 0) goto <D.22449>; else goto <D.22450>;
          <D.22449>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 105, "ins->opcode > MONO_CEE_LAST");
          <D.22450>:
          D.22422 = ins->opcode;
          if (D.22422 == 314) goto <D.22451>; else goto <D.22452>;
          <D.22451>:
          {
            struct MonoInst * var;

            var = ins->data.op[0].p;
            D.22453 = var->dreg;
            D.22454 = (long unsigned int) D.22453;
            D.22455 = D.22454 * 8;
            D.22456 = defs + D.22455;
            *D.22456 = 0B;
          }
          <D.22452>:
          D.22422 = ins->opcode;
          D.22457 = D.22422 + 65162;
          if (D.22457 <= 16) goto <D.22458>; else goto <D.22459>;
          <D.22458>:
          sreg = ins->dreg;
          regtype = 105;
          D.22460 = regtype == 105;
          D.22461 = sreg != -1;
          D.22462 = D.22460 & D.22461;
          if (D.22462 != 0) goto <D.22463>; else goto <D.22464>;
          <D.22463>:
          D.22465 = (long unsigned int) sreg;
          D.22466 = D.22465 * 8;
          D.22467 = defs + D.22466;
          D.22468 = *D.22467;
          if (D.22468 != 0B) goto <D.22469>; else goto <D.22470>;
          <D.22469>:
          {
            struct MonoInst * def;

            D.22465 = (long unsigned int) sreg;
            D.22466 = D.22465 * 8;
            D.22467 = defs + D.22466;
            def = *D.22467;
            D.22473 = def->opcode;
            if (D.22473 == 428) goto <D.22474>; else goto <D.22475>;
            <D.22474>:
            D.22476 = def->sreg1;
            D.22477 = (long unsigned int) D.22476;
            D.22478 = D.22477 * 8;
            D.22479 = defs + D.22478;
            D.22480 = *D.22479;
            if (D.22480 == 0B) goto <D.22471>; else goto <D.22481>;
            <D.22481>:
            D.22476 = def->sreg1;
            D.22477 = (long unsigned int) D.22476;
            D.22482 = D.22477 * 4;
            D.22483 = def_index + D.22482;
            D.22484 = *D.22483;
            D.22465 = (long unsigned int) sreg;
            D.22485 = D.22465 * 4;
            D.22486 = def_index + D.22485;
            D.22487 = *D.22486;
            if (D.22484 < D.22487) goto <D.22471>; else goto <D.22472>;
            <D.22471>:
            D.22476 = def->sreg1;
            D.22491 = (unsigned int) D.22476;
            D.22492 = cfg->vreg_to_inst_len;
            if (D.22491 < D.22492) goto <D.22493>; else goto <D.22489>;
            <D.22493>:
            D.22494 = cfg->vreg_to_inst;
            D.22476 = def->sreg1;
            D.22477 = (long unsigned int) D.22476;
            D.22478 = D.22477 * 8;
            D.22495 = D.22494 + D.22478;
            D.22496 = *D.22495;
            if (D.22496 != 0B) goto <D.22497>; else goto <D.22489>;
            <D.22497>:
            D.22476 = def->sreg1;
            D.22491 = (unsigned int) D.22476;
            D.22492 = cfg->vreg_to_inst_len;
            if (D.22491 < D.22492) goto <D.22499>; else goto <D.22500>;
            <D.22499>:
            D.22494 = cfg->vreg_to_inst;
            D.22476 = def->sreg1;
            D.22477 = (long unsigned int) D.22476;
            D.22478 = D.22477 * 8;
            D.22495 = D.22494 + D.22478;
            iftmp.1 = *D.22495;
            goto <D.22501>;
            <D.22500>:
            iftmp.1 = 0B;
            <D.22501>:
            D.22502 = iftmp.1->flags;
            D.22503 = (int) D.22502;
            D.22504 = D.22503 & 20;
            if (D.22504 != 0) goto <D.22505>; else goto <D.22489>;
            <D.22505>:
            iftmp.0 = 1;
            goto <D.22490>;
            <D.22489>:
            iftmp.0 = 0;
            <D.22490>:
            D.22506 = iftmp.0 != 0;
            D.22507 = (long int) D.22506;
            D.22508 = __builtin_expect (D.22507, 0);
            if (D.22508 == 0) goto <D.22509>; else goto <D.22510>;
            <D.22509>:
            {
              int vreg;

              vreg = def->sreg1;
              D.22511 = cfg->verbose_level;
              if (D.22511 > 2) goto <D.22512>; else goto <D.22513>;
              <D.22512>:
              printf ("CCOPY: R%d -> R%d\n", sreg, vreg);
              <D.22513>:
              ins->dreg = vreg;
            }
            <D.22510>:
            <D.22472>:
            <D.22475>:
          }
          <D.22470>:
          <D.22464>:
          <D.22459>:
          D.22419 = ins->sreg1;
          sregs[0] = D.22419;
          D.22420 = ins->sreg2;
          sregs[1] = D.22420;
          D.22421 = ins->sreg3;
          sregs[2] = D.22421;
          D.22422 = ins->opcode;
          D.22423 = (int) D.22422;
          D.22424 = D.22423 + -313;
          D.22425 = ins_sreg_counts[D.22424];
          num_sregs = (int) D.22425;
          srcindex = 0;
          goto <D.22297>;
          <D.22296>:
          {
            struct MonoInst * def;
            int nregs;

            D.22419 = ins->sreg1;
            sregs[0] = D.22419;
            D.22420 = ins->sreg2;
            sregs[1] = D.22420;
            D.22421 = ins->sreg3;
            sregs[2] = D.22421;
            D.22422 = ins->opcode;
            D.22423 = (int) D.22422;
            D.22424 = D.22423 + -313;
            D.22425 = ins_sreg_counts[D.22424];
            nregs = (int) D.22425;
            D.22514 = srcindex + 1;
            D.22515 = (sizetype) D.22514;
            D.22516 = spec + D.22515;
            D.22517 = *D.22516;
            regtype = (int) D.22517;
            sreg = sregs[srcindex];
            D.22520 = regtype == 32;
            D.22521 = sreg == -1;
            D.22522 = D.22520 | D.22521;
            if (D.22522 != 0) goto <D.22518>; else goto <D.22523>;
            <D.22523>:
            D.22465 = (long unsigned int) sreg;
            D.22466 = D.22465 * 8;
            D.22467 = defs + D.22466;
            D.22468 = *D.22467;
            if (D.22468 == 0B) goto <D.22518>; else goto <D.22519>;
            <D.22518>:
            // predicted unlikely by continue predictor.
            goto <D.22292>;
            <D.22519>:
            D.22465 = (long unsigned int) sreg;
            D.22466 = D.22465 * 8;
            D.22467 = defs + D.22466;
            def = *D.22467;
            D.22531 = def->opcode;
            D.22532 = D.22531 == 428;
            D.22533 = D.22531 == 430;
            D.22534 = D.22532 | D.22533;
            if (D.22534 != 0) goto <D.22530>; else goto <D.22535>;
            <D.22535>:
            D.22536 = def->opcode;
            if (D.22536 == 431) goto <D.22530>; else goto <D.22537>;
            <D.22537>:
            D.22536 = def->opcode;
            if (D.22536 == 962) goto <D.22530>; else goto <D.22529>;
            <D.22530>:
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22540 = D.22539 * 8;
            D.22541 = defs + D.22540;
            D.22542 = *D.22541;
            if (D.22542 == 0B) goto <D.22528>; else goto <D.22543>;
            <D.22543>:
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22544 = D.22539 * 4;
            D.22545 = def_index + D.22544;
            D.22546 = *D.22545;
            D.22465 = (long unsigned int) sreg;
            D.22485 = D.22465 * 4;
            D.22486 = def_index + D.22485;
            D.22487 = *D.22486;
            if (D.22546 < D.22487) goto <D.22528>; else goto <D.22529>;
            <D.22528>:
            D.22538 = def->sreg1;
            D.22550 = (unsigned int) D.22538;
            D.22492 = cfg->vreg_to_inst_len;
            if (D.22550 < D.22492) goto <D.22551>; else goto <D.22548>;
            <D.22551>:
            D.22494 = cfg->vreg_to_inst;
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22540 = D.22539 * 8;
            D.22552 = D.22494 + D.22540;
            D.22553 = *D.22552;
            if (D.22553 != 0B) goto <D.22554>; else goto <D.22548>;
            <D.22554>:
            D.22538 = def->sreg1;
            D.22550 = (unsigned int) D.22538;
            D.22492 = cfg->vreg_to_inst_len;
            if (D.22550 < D.22492) goto <D.22556>; else goto <D.22557>;
            <D.22556>:
            D.22494 = cfg->vreg_to_inst;
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22540 = D.22539 * 8;
            D.22552 = D.22494 + D.22540;
            iftmp.3 = *D.22552;
            goto <D.22558>;
            <D.22557>:
            iftmp.3 = 0B;
            <D.22558>:
            D.22559 = iftmp.3->flags;
            D.22560 = (int) D.22559;
            D.22561 = D.22560 & 20;
            if (D.22561 != 0) goto <D.22562>; else goto <D.22548>;
            <D.22562>:
            iftmp.2 = 1;
            goto <D.22549>;
            <D.22548>:
            iftmp.2 = 0;
            <D.22549>:
            D.22563 = iftmp.2 != 0;
            D.22564 = (long int) D.22563;
            D.22565 = __builtin_expect (D.22564, 0);
            if (D.22565 == 0) goto <D.22566>; else goto <D.22567>;
            <D.22566>:
            D.22538 = def->sreg1;
            D.22550 = (unsigned int) D.22538;
            D.22492 = cfg->vreg_to_inst_len;
            if (D.22550 < D.22492) goto <D.22568>; else goto <D.22526>;
            <D.22568>:
            D.22494 = cfg->vreg_to_inst;
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22540 = D.22539 * 8;
            D.22552 = D.22494 + D.22540;
            D.22553 = *D.22552;
            if (D.22553 != 0B) goto <D.22527>; else goto <D.22526>;
            <D.22526>:
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22540 = D.22539 * 8;
            D.22541 = defs + D.22540;
            D.22542 = *D.22541;
            if (D.22542 == 0B) goto <D.22527>; else goto <D.22569>;
            <D.22569>:
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22544 = D.22539 * 4;
            D.22545 = def_index + D.22544;
            D.22546 = *D.22545;
            if (D.22546 >= last_call_index) goto <D.22527>; else goto <D.22570>;
            <D.22570>:
            D.22536 = def->opcode;
            if (D.22536 == 431) goto <D.22527>; else goto <D.22525>;
            <D.22527>:
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22540 = D.22539 * 8;
            D.22541 = defs + D.22540;
            D.22542 = *D.22541;
            if (D.22542 == 0B) goto <D.22524>; else goto <D.22571>;
            <D.22571>:
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22540 = D.22539 * 8;
            D.22541 = defs + D.22540;
            D.22542 = *D.22541;
            D.22572 = D.22542->next;
            if (D.22572 != def) goto <D.22524>; else goto <D.22525>;
            <D.22524>:
            if (1 != 0) goto <D.22573>; else goto <D.22574>;
            <D.22573>:
            D.22536 = def->opcode;
            if (D.22536 != 430) goto <D.22575>; else goto <D.22576>;
            <D.22575>:
            {
              int vreg;

              vreg = def->sreg1;
              D.22511 = cfg->verbose_level;
              if (D.22511 > 2) goto <D.22577>; else goto <D.22578>;
              <D.22577>:
              printf ("CCOPY/2: R%d -> R%d\n", sreg, vreg);
              <D.22578>:
              sregs[srcindex] = vreg;
              mono_inst_set_src_registers (ins, &sregs);
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.22292>;
            }
            <D.22576>:
            <D.22574>:
            <D.22525>:
            <D.22567>:
            <D.22529>:
            D.22536 = def->opcode;
            D.22584 = D.22536 + 65174;
            if (D.22584 <= 1) goto <D.22585>; else goto <D.22579>;
            <D.22585>:
            if (srcindex == 0) goto <D.22586>; else goto <D.22580>;
            <D.22586>:
            D.22420 = ins->sreg2;
            if (D.22420 == -1) goto <D.22581>; else goto <D.22580>;
            <D.22580>:
            D.22587 = def->data.op[0].const_val;
            D.22588 = mono_arch_is_inst_imm (D.22587);
            if (D.22588 != 0) goto <D.22581>; else goto <D.22579>;
            <D.22579>:
            D.22536 = def->opcode;
            if (D.22536 == 365) goto <D.22581>; else goto <D.22582>;
            <D.22581>:
            {
              guint32 opcode2;

              if (srcindex == 1) goto <D.22591>; else goto <D.22589>;
              <D.22591>:
              D.22419 = ins->sreg1;
              if (D.22419 != -1) goto <D.22592>; else goto <D.22589>;
              <D.22592>:
              D.22419 = ins->sreg1;
              D.22593 = (long unsigned int) D.22419;
              D.22594 = D.22593 * 8;
              D.22595 = defs + D.22594;
              D.22596 = *D.22595;
              if (D.22596 != 0B) goto <D.22597>; else goto <D.22589>;
              <D.22597>:
              D.22419 = ins->sreg1;
              D.22593 = (long unsigned int) D.22419;
              D.22594 = D.22593 * 8;
              D.22595 = defs + D.22594;
              D.22596 = *D.22595;
              D.22598 = D.22596->opcode;
              if (D.22598 == 362) goto <D.22599>; else goto <D.22589>;
              <D.22599>:
              D.22420 = ins->sreg2;
              D.22600 = (long unsigned int) D.22420;
              D.22601 = D.22600 * 8;
              D.22602 = defs + D.22601;
              D.22603 = *D.22602;
              if (D.22603 != 0B) goto <D.22604>; else goto <D.22589>;
              <D.22604>:
              D.22420 = ins->sreg2;
              D.22600 = (long unsigned int) D.22420;
              D.22601 = D.22600 * 8;
              D.22602 = defs + D.22601;
              D.22603 = *D.22602;
              D.22419 = ins->sreg1;
              D.22593 = (long unsigned int) D.22419;
              D.22594 = D.22593 * 8;
              D.22595 = defs + D.22594;
              D.22596 = *D.22595;
              mono_constant_fold_ins (cfg, ins, D.22596, D.22603, 1);
              goto <D.22590>;
              <D.22589>:
              if (srcindex == 0) goto <D.22607>; else goto <D.22605>;
              <D.22607>:
              D.22420 = ins->sreg2;
              if (D.22420 != -1) goto <D.22608>; else goto <D.22605>;
              <D.22608>:
              D.22420 = ins->sreg2;
              D.22600 = (long unsigned int) D.22420;
              D.22601 = D.22600 * 8;
              D.22602 = defs + D.22601;
              D.22603 = *D.22602;
              if (D.22603 != 0B) goto <D.22609>; else goto <D.22605>;
              <D.22609>:
              {
                int opcode;

                D.22422 = ins->opcode;
                opcode = (int) D.22422;
                D.22420 = ins->sreg2;
                D.22600 = (long unsigned int) D.22420;
                D.22601 = D.22600 * 8;
                D.22602 = defs + D.22601;
                D.22603 = *D.22602;
                D.22419 = ins->sreg1;
                D.22593 = (long unsigned int) D.22419;
                D.22594 = D.22593 * 8;
                D.22595 = defs + D.22594;
                D.22596 = *D.22595;
                mono_constant_fold_ins (cfg, ins, D.22596, D.22603, 1);
                D.22422 = ins->opcode;
                D.22423 = (int) D.22422;
                if (D.22423 != opcode) goto <D.22610>; else goto <D.22611>;
                <D.22610>:
                srcindex = -1;
                // predicted unlikely by continue predictor.
                goto <D.22292>;
                <D.22611>:
              }
              goto <D.22606>;
              <D.22605>:
              if (srcindex == 0) goto <D.22612>; else goto <D.22613>;
              <D.22612>:
              D.22420 = ins->sreg2;
              if (D.22420 == -1) goto <D.22614>; else goto <D.22615>;
              <D.22614>:
              D.22419 = ins->sreg1;
              D.22593 = (long unsigned int) D.22419;
              D.22594 = D.22593 * 8;
              D.22595 = defs + D.22594;
              D.22596 = *D.22595;
              mono_constant_fold_ins (cfg, ins, D.22596, 0B, 1);
              <D.22615>:
              <D.22613>:
              <D.22606>:
              <D.22590>:
              D.22422 = ins->opcode;
              D.22423 = (int) D.22422;
              D.22616 = mono_op_to_op_imm (D.22423);
              opcode2 = (guint32) D.22616;
              if (opcode2 != 4294967295) goto <D.22619>; else goto <D.22617>;
              <D.22619>:
              D.22587 = def->data.op[0].const_val;
              D.22620 = mono_arch_is_inst_imm (D.22587);
              if (D.22620 != 0) goto <D.22621>; else goto <D.22617>;
              <D.22621>:
              if (srcindex == 1) goto <D.22618>; else goto <D.22622>;
              <D.22622>:
              D.22420 = ins->sreg2;
              if (D.22420 == -1) goto <D.22618>; else goto <D.22617>;
              <D.22618>:
              D.22623 = (short unsigned int) opcode2;
              ins->opcode = D.22623;
              if (0 != 0) goto <D.22624>; else goto <D.22625>;
              <D.22624>:
              D.22587 = def->data.op[0].const_val;
              ins->data.op[0].const_val = D.22587;
              D.22626 = def->data.op[1].const_val;
              ins->data.op[1].const_val = D.22626;
              goto <D.22627>;
              <D.22625>:
              D.22587 = def->data.op[0].const_val;
              ins->data.op[1].const_val = D.22587;
              <D.22627>:
              sregs[srcindex] = -1;
              mono_inst_set_src_registers (ins, &sregs);
              D.22630 = opcode2 == 343;
              D.22631 = opcode2 == 346;
              D.22632 = D.22630 | D.22631;
              if (D.22632 != 0) goto <D.22628>; else goto <D.22633>;
              <D.22633>:
              D.22634 = opcode2 == 352;
              D.22635 = opcode2 == 349;
              D.22636 = D.22634 | D.22635;
              if (D.22636 != 0) goto <D.22628>; else goto <D.22629>;
              <D.22628>:
              D.22637 = ins->data.op[1].const_val;
              D.22638 = (const void *) D.22637;
              MEM[(struct MonoCallInst *)ins].fptr = D.22638;
              <D.22629>:
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.22292>;
              <D.22617>:
              D.22422 = ins->opcode;
              if (D.22422 == 1037) goto <D.22639>; else goto <D.22640>;
              <D.22639>:
              if (srcindex == 1) goto <D.22641>; else goto <D.22642>;
              <D.22641>:
              ins->opcode = 542;
              D.22637 = ins->data.op[1].const_val;
              D.22587 = def->data.op[0].const_val;
              D.22643 = ins->backend.shift_amount;
              D.22644 = D.22587 << D.22643;
              D.22645 = D.22637 + D.22644;
              ins->data.op[1].const_val = D.22645;
              ins->sreg2 = -1;
              <D.22642>:
              <D.22640>:
              D.22422 = ins->opcode;
              D.22423 = (int) D.22422;
              D.22646 = mono_load_membase_to_load_mem (D.22423);
              opcode2 = (guint32) D.22646;
              D.22647 = srcindex == 0;
              D.22648 = opcode2 != 4294967295;
              D.22649 = D.22647 & D.22648;
              if (D.22649 != 0) goto <D.22650>; else goto <D.22651>;
              <D.22650>:
              D.22587 = def->data.op[0].const_val;
              D.22652 = mono_arch_is_inst_imm (D.22587);
              if (D.22652 != 0) goto <D.22653>; else goto <D.22654>;
              <D.22653>:
              D.22623 = (short unsigned int) opcode2;
              ins->opcode = D.22623;
              D.22587 = def->data.op[0].const_val;
              D.22655 = ins->data.op[0].const_val;
              D.22656 = D.22587 + D.22655;
              ins->data.op[1].const_val = D.22656;
              ins->sreg1 = -1;
              <D.22654>:
              <D.22651>:
            }
            goto <D.22583>;
            <D.22582>:
            D.22659 = def->opcode;
            D.22660 = D.22659 == 433;
            D.22661 = D.22659 == 542;
            D.22662 = D.22660 | D.22661;
            if (D.22662 != 0) goto <D.22663>; else goto <D.22657>;
            <D.22663>:
            D.22664 = ins->opcode;
            D.22665 = D.22664 + 65145;
            D.22666 = D.22665 <= 12;
            D.22667 = D.22664 == 1032;
            D.22668 = D.22666 | D.22667;
            if (D.22668 != 0) goto <D.22669>; else goto <D.22657>;
            <D.22669>:
            D.22538 = def->sreg1;
            D.22550 = (unsigned int) D.22538;
            D.22672 = cfg->frame_reg;
            if (D.22550 == D.22672) goto <D.22670>; else goto <D.22673>;
            <D.22673>:
            D.22674 = def->next;
            if (D.22674 == ins) goto <D.22675>; else goto <D.22671>;
            <D.22675>:
            D.22676 = def->dreg;
            D.22538 = def->sreg1;
            if (D.22676 != D.22538) goto <D.22670>; else goto <D.22671>;
            <D.22670>:
            D.22538 = def->sreg1;
            ins->sreg1 = D.22538;
            D.22655 = ins->data.op[0].const_val;
            D.22626 = def->data.op[1].const_val;
            D.22677 = D.22655 + D.22626;
            ins->data.op[0].const_val = D.22677;
            <D.22671>:
            goto <D.22658>;
            <D.22657>:
            D.22422 = ins->opcode;
            if (D.22422 == 630) goto <D.22680>; else goto <D.22678>;
            <D.22680>:
            D.22536 = def->opcode;
            if (D.22536 == 629) goto <D.22681>; else goto <D.22678>;
            <D.22681>:
            D.22674 = def->next;
            if (D.22674 == ins) goto <D.22682>; else goto <D.22678>;
            <D.22682>:
            D.22676 = def->dreg;
            D.22538 = def->sreg1;
            if (D.22676 != D.22538) goto <D.22683>; else goto <D.22678>;
            <D.22683>:
            D.22538 = def->sreg1;
            ins->sreg1 = D.22538;
            D.22637 = ins->data.op[1].const_val;
            D.22626 = def->data.op[1].const_val;
            D.22684 = D.22637 - D.22626;
            ins->data.op[1].const_val = D.22684;
            goto <D.22679>;
            <D.22678>:
            D.22422 = ins->opcode;
            if (D.22422 == 629) goto <D.22687>; else goto <D.22685>;
            <D.22687>:
            D.22536 = def->opcode;
            if (D.22536 == 630) goto <D.22688>; else goto <D.22685>;
            <D.22688>:
            D.22674 = def->next;
            if (D.22674 == ins) goto <D.22689>; else goto <D.22685>;
            <D.22689>:
            D.22676 = def->dreg;
            D.22538 = def->sreg1;
            if (D.22676 != D.22538) goto <D.22690>; else goto <D.22685>;
            <D.22690>:
            D.22538 = def->sreg1;
            ins->sreg1 = D.22538;
            D.22637 = ins->data.op[1].const_val;
            D.22626 = def->data.op[1].const_val;
            D.22684 = D.22637 - D.22626;
            ins->data.op[1].const_val = D.22684;
            goto <D.22686>;
            <D.22685>:
            D.22422 = ins->opcode;
            if (D.22422 == 375) goto <D.22695>; else goto <D.22691>;
            <D.22695>:
            D.22696 = def->opcode;
            D.22697 = D.22696 == 595;
            D.22698 = D.22696 == 584;
            D.22699 = D.22697 | D.22698;
            if (D.22699 != 0) goto <D.22692>; else goto <D.22700>;
            <D.22700>:
            D.22536 = def->opcode;
            if (D.22536 == 766) goto <D.22692>; else goto <D.22701>;
            <D.22701>:
            D.22536 = def->opcode;
            if (D.22536 == 507) goto <D.22692>; else goto <D.22691>;
            <D.22692>:
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22540 = D.22539 * 8;
            D.22541 = defs + D.22540;
            D.22542 = *D.22541;
            if (D.22542 == 0B) goto <D.22693>; else goto <D.22702>;
            <D.22702>:
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22544 = D.22539 * 4;
            D.22545 = def_index + D.22544;
            D.22546 = *D.22545;
            D.22465 = (long unsigned int) sreg;
            D.22485 = D.22465 * 4;
            D.22486 = def_index + D.22485;
            D.22487 = *D.22486;
            if (D.22546 < D.22487) goto <D.22693>; else goto <D.22691>;
            <D.22693>:
            D.22538 = def->sreg1;
            ins->sreg1 = D.22538;
            goto <D.22694>;
            <D.22691>:
            D.22422 = ins->opcode;
            if (D.22422 == 376) goto <D.22706>; else goto <D.22707>;
            <D.22706>:
            D.22708 = def->opcode;
            D.22709 = D.22708 == 594;
            D.22710 = D.22708 == 585;
            D.22711 = D.22709 | D.22710;
            if (D.22711 != 0) goto <D.22705>; else goto <D.22712>;
            <D.22712>:
            D.22536 = def->opcode;
            if (D.22536 == 766) goto <D.22705>; else goto <D.22713>;
            <D.22713>:
            D.22536 = def->opcode;
            if (D.22536 == 499) goto <D.22705>; else goto <D.22704>;
            <D.22705>:
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22540 = D.22539 * 8;
            D.22541 = defs + D.22540;
            D.22542 = *D.22541;
            if (D.22542 == 0B) goto <D.22703>; else goto <D.22714>;
            <D.22714>:
            D.22538 = def->sreg1;
            D.22539 = (long unsigned int) D.22538;
            D.22544 = D.22539 * 4;
            D.22545 = def_index + D.22544;
            D.22546 = *D.22545;
            D.22465 = (long unsigned int) sreg;
            D.22485 = D.22465 * 4;
            D.22486 = def_index + D.22485;
            D.22487 = *D.22486;
            if (D.22546 < D.22487) goto <D.22703>; else goto <D.22704>;
            <D.22703>:
            D.22538 = def->sreg1;
            ins->sreg1 = D.22538;
            <D.22704>:
            <D.22707>:
            <D.22694>:
            <D.22686>:
            <D.22679>:
            <D.22658>:
            <D.22583>:
          }
          <D.22292>:
          srcindex = srcindex + 1;
          <D.22297>:
          if (srcindex < num_sregs) goto <D.22296>; else goto <D.22298>;
          <D.22298>:
          D.22422 = ins->opcode;
          D.22423 = (int) D.22422;
          switch (D.22423) <default: <D.22796>, case 428: <D.22299>, case 433: <D.22302>, case 434: <D.22304>, case 435: <D.22308>, case 542: <D.22306>, case 543: <D.22307>, case 544: <D.22310>, case 629: <D.22303>, case 630: <D.22305>, case 631: <D.22309>, case 632: <D.22316>, case 633: <D.22313>, case 635: <D.22312>, case 962: <D.22300>>
          <D.22299>:
          <D.22300>:
          D.22411 = ins->dreg;
          D.22419 = ins->sreg1;
          if (D.22411 == D.22419) goto <D.22715>; else goto <D.22716>;
          <D.22715>:
          D.22434 = ins->prev;
          if (D.22434 != 0B) goto <D.22717>; else goto <D.22718>;
          <D.22717>:
          D.22434 = ins->prev;
          D.22437 = ins->next;
          D.22434->next = D.22437;
          <D.22718>:
          D.22437 = ins->next;
          if (D.22437 != 0B) goto <D.22719>; else goto <D.22720>;
          <D.22719>:
          D.22437 = ins->next;
          D.22434 = ins->prev;
          D.22437->prev = D.22434;
          <D.22720>:
          D.22440 = bb->code;
          if (D.22440 == ins) goto <D.22721>; else goto <D.22722>;
          <D.22721>:
          D.22437 = ins->next;
          bb->code = D.22437;
          <D.22722>:
          D.22443 = bb->last_ins;
          if (D.22443 == ins) goto <D.22723>; else goto <D.22724>;
          <D.22723>:
          D.22434 = ins->prev;
          bb->last_ins = D.22434;
          <D.22724>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22421 = ins->sreg3;
          ins->sreg2 = D.22421;
          D.22420 = ins->sreg2;
          ins->sreg1 = D.22420;
          D.22422 = ins->opcode;
          D.22423 = (int) D.22422;
          D.22424 = D.22423 + -313;
          D.22431 = D.22424 * 4;
          spec = &ins_info[D.22431];
          <D.22716>:
          goto <D.22301>;
          <D.22302>:
          <D.22303>:
          <D.22304>:
          <D.22305>:
          <D.22306>:
          <D.22307>:
          D.22637 = ins->data.op[1].const_val;
          if (D.22637 == 0) goto <D.22725>; else goto <D.22726>;
          <D.22725>:
          ins->opcode = 428;
          D.22422 = ins->opcode;
          D.22423 = (int) D.22422;
          D.22424 = D.22423 + -313;
          D.22431 = D.22424 * 4;
          spec = &ins_info[D.22431];
          <D.22726>:
          goto <D.22301>;
          <D.22308>:
          <D.22309>:
          <D.22310>:
          D.22637 = ins->data.op[1].const_val;
          if (D.22637 == 0) goto <D.22727>; else goto <D.22728>;
          <D.22727>:
          D.22422 = ins->opcode;
          if (D.22422 == 544) goto <D.22730>; else goto <D.22731>;
          <D.22730>:
          iftmp.4 = 363;
          goto <D.22732>;
          <D.22731>:
          iftmp.4 = 362;
          <D.22732>:
          ins->opcode = iftmp.4;
          ins->data.op[0].const_val = 0;
          ins->sreg1 = -1;
          goto <D.22733>;
          <D.22728>:
          D.22637 = ins->data.op[1].const_val;
          if (D.22637 == 1) goto <D.22734>; else goto <D.22735>;
          <D.22734>:
          ins->opcode = 428;
          goto <D.22736>;
          <D.22735>:
          D.22422 = ins->opcode;
          if (D.22422 == 631) goto <D.22739>; else goto <D.22737>;
          <D.22739>:
          D.22637 = ins->data.op[1].const_val;
          if (D.22637 == -1) goto <D.22740>; else goto <D.22737>;
          <D.22740>:
          ins->opcode = 582;
          goto <D.22738>;
          <D.22737>:
          D.22422 = ins->opcode;
          if (D.22422 == 544) goto <D.22743>; else goto <D.22741>;
          <D.22743>:
          D.22637 = ins->data.op[1].const_val;
          if (D.22637 == -1) goto <D.22744>; else goto <D.22741>;
          <D.22744>:
          ins->opcode = 496;
          goto <D.22742>;
          <D.22741>:
          {
            int power2;

            D.22637 = ins->data.op[1].const_val;
            D.22745 = (unsigned int) D.22637;
            power2 = mono_is_power_of_two (D.22745);
            if (power2 >= 0) goto <D.22746>; else goto <D.22747>;
            <D.22746>:
            D.22422 = ins->opcode;
            if (D.22422 != 435) goto <D.22749>; else goto <D.22750>;
            <D.22749>:
            D.22422 = ins->opcode;
            if (D.22422 == 544) goto <D.22752>; else goto <D.22753>;
            <D.22752>:
            iftmp.6 = 548;
            goto <D.22754>;
            <D.22753>:
            iftmp.6 = 639;
            <D.22754>:
            iftmp.5 = iftmp.6;
            goto <D.22755>;
            <D.22750>:
            iftmp.5 = 443;
            <D.22755>:
            ins->opcode = iftmp.5;
            D.22756 = (long int) power2;
            ins->data.op[1].const_val = D.22756;
            <D.22747>:
          }
          <D.22742>:
          <D.22738>:
          <D.22736>:
          <D.22733>:
          D.22422 = ins->opcode;
          D.22423 = (int) D.22422;
          D.22424 = D.22423 + -313;
          D.22431 = D.22424 * 4;
          spec = &ins_info[D.22431];
          goto <D.22301>;
          <D.22312>:
          <D.22313>:
          {
            int c;
            int power2;

            D.22637 = ins->data.op[1].const_val;
            c = (int) D.22637;
            c.7 = (unsigned int) c;
            power2 = mono_is_power_of_two (c.7);
            if (power2 >= 0) goto <D.22758>; else goto <D.22759>;
            <D.22758>:
            D.22422 = ins->opcode;
            if (D.22422 == 635) goto <D.22760>; else goto <D.22761>;
            <D.22760>:
            ins->opcode = 636;
            ins->sreg2 = -1;
            D.22762 = 1 << power2;
            D.22763 = D.22762 + -1;
            D.22764 = (long int) D.22763;
            ins->data.op[1].const_val = D.22764;
            goto <D.22765>;
            <D.22761>:
            D.22422 = ins->opcode;
            if (D.22422 == 633) goto <D.22766>; else goto <D.22767>;
            <D.22766>:
            ins->opcode = 641;
            ins->sreg2 = -1;
            D.22768 = (long int) power2;
            ins->data.op[1].const_val = D.22768;
            <D.22767>:
            <D.22765>:
            <D.22759>:
            D.22422 = ins->opcode;
            D.22423 = (int) D.22422;
            D.22424 = D.22423 + -313;
            D.22431 = D.22424 * 4;
            spec = &ins_info[D.22431];
            goto <D.22301>;
          }
          <D.22316>:
          {
            int c;
            int power2;
            struct MonoInst * tmp1;
            struct MonoInst * tmp2;
            struct MonoInst * tmp3;
            struct MonoInst * tmp4;

            D.22637 = ins->data.op[1].const_val;
            c = (int) D.22637;
            c.8 = (unsigned int) c;
            power2 = mono_is_power_of_two (c.8);
            if (power2 == 1) goto <D.22770>; else goto <D.22771>;
            <D.22770>:
            {
              int r1;

              D.22772 = mono_alloc_ireg (cfg);
              r1 = (int) D.22772;
              D.22409 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.22409, 80);
              tmp1->data.op[1].const_val = 0;
              D.22773 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.22773;
              tmp1->prev = 0B;
              D.22774 = tmp1->prev;
              tmp1->next = D.22774;
              tmp1->opcode = 641;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.22775 = tmp1->sreg3;
              tmp1->sreg2 = D.22775;
              D.22776 = tmp1->sreg2;
              tmp1->sreg1 = D.22776;
              D.22777 = cfg->ip;
              tmp1->cil_code = D.22777;
              tmp1->dreg = r1;
              D.22419 = ins->sreg1;
              tmp1->sreg1 = D.22419;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.22409 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.22409, 80);
              tmp2->data.op[1].const_val = 0;
              D.22778 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.22778;
              tmp2->prev = 0B;
              D.22779 = tmp2->prev;
              tmp2->next = D.22779;
              tmp2->opcode = 569;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.22780 = tmp2->sreg3;
              tmp2->sreg2 = D.22780;
              D.22781 = tmp2->sreg2;
              tmp2->sreg1 = D.22781;
              D.22777 = cfg->ip;
              tmp2->cil_code = D.22777;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.22419 = ins->sreg1;
              tmp2->sreg2 = D.22419;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.22409 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.22409, 80);
              tmp3->data.op[1].const_val = 0;
              D.22782 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.22782;
              tmp3->prev = 0B;
              D.22783 = tmp3->prev;
              tmp3->next = D.22783;
              tmp3->opcode = 640;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.22784 = tmp3->sreg3;
              tmp3->sreg2 = D.22784;
              D.22785 = tmp3->sreg2;
              tmp3->sreg1 = D.22785;
              D.22777 = cfg->ip;
              tmp3->cil_code = D.22777;
              D.22411 = ins->dreg;
              tmp3->dreg = D.22411;
              tmp3->sreg1 = r1;
              tmp3->data.op[1].const_val = 1;
              mono_bblock_insert_after_ins (bb, tmp2, tmp3);
              ins->opcode = 316;
              ins->dreg = -1;
              ins->sreg3 = -1;
              D.22421 = ins->sreg3;
              ins->sreg2 = D.22421;
              D.22420 = ins->sreg2;
              ins->sreg1 = D.22420;
              goto restart;
            }
            <D.22771>:
            if (power2 > 0) goto <D.22786>; else goto <D.22787>;
            <D.22786>:
            {
              int r1;

              D.22788 = mono_alloc_ireg (cfg);
              r1 = (int) D.22788;
              D.22409 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.22409, 80);
              tmp1->data.op[1].const_val = 0;
              D.22773 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.22773;
              tmp1->prev = 0B;
              D.22774 = tmp1->prev;
              tmp1->next = D.22774;
              tmp1->opcode = 640;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.22775 = tmp1->sreg3;
              tmp1->sreg2 = D.22775;
              D.22776 = tmp1->sreg2;
              tmp1->sreg1 = D.22776;
              D.22777 = cfg->ip;
              tmp1->cil_code = D.22777;
              tmp1->dreg = r1;
              D.22419 = ins->sreg1;
              tmp1->sreg1 = D.22419;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.22409 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.22409, 80);
              tmp2->data.op[1].const_val = 0;
              D.22778 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.22778;
              tmp2->prev = 0B;
              D.22779 = tmp2->prev;
              tmp2->next = D.22779;
              tmp2->opcode = 641;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.22780 = tmp2->sreg3;
              tmp2->sreg2 = D.22780;
              D.22781 = tmp2->sreg2;
              tmp2->sreg1 = D.22781;
              D.22777 = cfg->ip;
              tmp2->cil_code = D.22777;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.22789 = 32 - power2;
              D.22790 = (long int) D.22789;
              tmp2->data.op[1].const_val = D.22790;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.22409 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.22409, 80);
              tmp3->data.op[1].const_val = 0;
              D.22782 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.22782;
              tmp3->prev = 0B;
              D.22783 = tmp3->prev;
              tmp3->next = D.22783;
              tmp3->opcode = 569;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.22784 = tmp3->sreg3;
              tmp3->sreg2 = D.22784;
              D.22785 = tmp3->sreg2;
              tmp3->sreg1 = D.22785;
              D.22777 = cfg->ip;
              tmp3->cil_code = D.22777;
              tmp3->dreg = r1;
              tmp3->sreg1 = r1;
              D.22419 = ins->sreg1;
              tmp3->sreg2 = D.22419;
              mono_bblock_insert_after_ins (bb, tmp2, tmp3);
              D.22409 = cfg->mempool;
              tmp4 = mono_mempool_alloc (D.22409, 80);
              tmp4->data.op[1].const_val = 0;
              D.22791 = tmp4->data.op[1].const_val;
              tmp4->data.op[0].const_val = D.22791;
              tmp4->prev = 0B;
              D.22792 = tmp4->prev;
              tmp4->next = D.22792;
              tmp4->opcode = 640;
              tmp4->flags = 0;
              tmp4->type = 0;
              tmp4->dreg = -1;
              tmp4->sreg3 = -1;
              D.22793 = tmp4->sreg3;
              tmp4->sreg2 = D.22793;
              D.22794 = tmp4->sreg2;
              tmp4->sreg1 = D.22794;
              D.22777 = cfg->ip;
              tmp4->cil_code = D.22777;
              D.22411 = ins->dreg;
              tmp4->dreg = D.22411;
              tmp4->sreg1 = r1;
              D.22795 = (long int) power2;
              tmp4->data.op[1].const_val = D.22795;
              mono_bblock_insert_after_ins (bb, tmp3, tmp4);
              ins->opcode = 316;
              ins->dreg = -1;
              ins->sreg3 = -1;
              D.22421 = ins->sreg3;
              ins->sreg2 = D.22421;
              D.22420 = ins->sreg2;
              ins->sreg1 = D.22420;
              goto restart;
            }
            <D.22787>:
            goto <D.22301>;
          }
          <D.22796>:
          <D.22301>:
          D.22797 = *spec;
          if (D.22797 != 32) goto <D.22798>; else goto <D.22799>;
          <D.22798>:
          {
            struct MonoInst * def;

            D.22411 = ins->dreg;
            D.22416 = (long unsigned int) D.22411;
            D.22417 = D.22416 * 8;
            D.22418 = defs + D.22417;
            def = *D.22418;
            if (def != 0B) goto <D.22800>; else goto <D.22801>;
            <D.22800>:
            D.22802 = def->opcode;
            if (D.22802 == 433) goto <D.22803>; else goto <D.22804>;
            <D.22803>:
            D.22805 = def->sreg1;
            D.22806 = (unsigned int) D.22805;
            D.22672 = cfg->frame_reg;
            if (D.22806 == D.22672) goto <D.22807>; else goto <D.22808>;
            <D.22807>:
            D.22422 = ins->opcode;
            D.22457 = D.22422 + 65162;
            if (D.22457 <= 16) goto <D.22809>; else goto <D.22810>;
            <D.22809>:
            D.22805 = def->sreg1;
            ins->dreg = D.22805;
            D.22655 = ins->data.op[0].const_val;
            D.22811 = def->data.op[1].const_val;
            D.22812 = D.22655 + D.22811;
            ins->data.op[0].const_val = D.22812;
            <D.22810>:
            <D.22808>:
            <D.22804>:
            <D.22801>:
          }
          <D.22799>:
          D.22797 = *spec;
          if (D.22797 != 32) goto <D.22813>; else goto <D.22814>;
          <D.22813>:
          D.22422 = ins->opcode;
          D.22457 = D.22422 + 65162;
          if (D.22457 > 16) goto <D.22815>; else goto <D.22816>;
          <D.22815>:
          D.22411 = ins->dreg;
          D.22820 = (unsigned int) D.22411;
          D.22492 = cfg->vreg_to_inst_len;
          if (D.22820 < D.22492) goto <D.22821>; else goto <D.22818>;
          <D.22821>:
          D.22494 = cfg->vreg_to_inst;
          D.22411 = ins->dreg;
          D.22416 = (long unsigned int) D.22411;
          D.22417 = D.22416 * 8;
          D.22822 = D.22494 + D.22417;
          D.22823 = *D.22822;
          if (D.22823 != 0B) goto <D.22824>; else goto <D.22818>;
          <D.22824>:
          D.22411 = ins->dreg;
          D.22820 = (unsigned int) D.22411;
          D.22492 = cfg->vreg_to_inst_len;
          if (D.22820 < D.22492) goto <D.22826>; else goto <D.22827>;
          <D.22826>:
          D.22494 = cfg->vreg_to_inst;
          D.22411 = ins->dreg;
          D.22416 = (long unsigned int) D.22411;
          D.22417 = D.22416 * 8;
          D.22822 = D.22494 + D.22417;
          iftmp.10 = *D.22822;
          goto <D.22828>;
          <D.22827>:
          iftmp.10 = 0B;
          <D.22828>:
          D.22829 = iftmp.10->flags;
          D.22830 = (int) D.22829;
          D.22831 = D.22830 & 20;
          if (D.22831 != 0) goto <D.22832>; else goto <D.22818>;
          <D.22832>:
          iftmp.9 = 1;
          goto <D.22819>;
          <D.22818>:
          iftmp.9 = 0;
          <D.22819>:
          D.22833 = iftmp.9 != 0;
          D.22834 = (long int) D.22833;
          D.22835 = __builtin_expect (D.22834, 0);
          if (D.22835 == 0) goto <D.22836>; else goto <D.22837>;
          <D.22836>:
          D.22411 = ins->dreg;
          D.22416 = (long unsigned int) D.22411;
          D.22417 = D.22416 * 8;
          D.22418 = defs + D.22417;
          *D.22418 = ins;
          D.22411 = ins->dreg;
          D.22416 = (long unsigned int) D.22411;
          D.22838 = D.22416 * 4;
          D.22839 = def_index + D.22838;
          *D.22839 = ins_index;
          <D.22837>:
          <D.22816>:
          <D.22814>:
          D.22842 = ins->opcode;
          D.22843 = D.22842 + 65193;
          D.22844 = D.22843 <= 2;
          D.22845 = D.22842 + 65187;
          D.22846 = D.22845 <= 2;
          D.22847 = D.22844 | D.22846;
          if (D.22847 != 0) goto <D.22840>; else goto <D.22848>;
          <D.22848>:
          D.22422 = ins->opcode;
          D.22849 = D.22422 + 65184;
          if (D.22849 <= 2) goto <D.22840>; else goto <D.22850>;
          <D.22850>:
          D.22422 = ins->opcode;
          D.22851 = D.22422 + 65181;
          if (D.22851 <= 2) goto <D.22840>; else goto <D.22852>;
          <D.22852>:
          D.22422 = ins->opcode;
          D.22853 = D.22422 + 65190;
          if (D.22853 <= 2) goto <D.22840>; else goto <D.22854>;
          <D.22854>:
          D.22422 = ins->opcode;
          D.22855 = D.22422 + 65178;
          if (D.22855 <= 2) goto <D.22840>; else goto <D.22856>;
          <D.22856>:
          D.22422 = ins->opcode;
          if (D.22422 == 448) goto <D.22840>; else goto <D.22841>;
          <D.22840>:
          last_call_index = ins_index;
          <D.22841>:
          ins_index = ins_index + 1;
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    <D.22286>:
    ins = ins->next;
    <D.22327>:
    if (ins != 0B) goto <D.22326>; else goto <D.22328>;
    <D.22328>:
  }
  bb = bb->next_bb;
  <D.22330>:
  if (bb != 0B) goto <D.22329>; else goto <D.22331>;
  <D.22331>:
}


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

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


mono_local_deadce (struct MonoCompile * cfg)
{
  unsigned int D.22862;
  unsigned int D.22863;
  struct MonoMemPool * D.22864;
  short unsigned int D.22865;
  int D.22866;
  int D.22867;
  int D.22868;
  char D.22869;
  int D.22872;
  long unsigned int D.22873;
  long unsigned int D.22874;
  long unsigned int D.22875;
  int D.22876;
  long unsigned int D.22877;
  long unsigned int D.22878;
  long unsigned int D.22879;
  long unsigned int D.22880;
  long unsigned int D.22881;
  long unsigned int D.22882;
  int D.22883;
  int D.22884;
  int D.22885;
  signed char D.22886;
  int D.22887;
  long unsigned int D.22888;
  long unsigned int D.22889;
  long unsigned int D.22890;
  int D.22891;
  long unsigned int D.22892;
  long unsigned int D.22893;
  long unsigned int D.22894;
  struct MonoInst * iftmp.11;
  struct MonoInst * D.22901;
  struct MonoInst * D.22904;
  struct MonoInst * D.22907;
  struct MonoInst * D.22910;
  _Bool D.22913;
  long int D.22914;
  long int D.22915;
  short unsigned int D.22920;
  _Bool D.22921;
  _Bool D.22922;
  _Bool D.22923;
  struct MonoInst * D.22927;
  short unsigned int D.22929;
  int D.22930;
  int D.22931;
  int D.22932;
  unsigned int D.22935;
  unsigned int D.22936;
  struct MonoInst * * D.22938;
  long unsigned int D.22939;
  long unsigned int D.22940;
  struct MonoInst * * D.22941;
  struct MonoInst * D.22942;
  char D.22943;
  int D.22946;
  long unsigned int D.22949;
  long unsigned int D.22950;
  int D.22951;
  long unsigned int D.22952;
  long unsigned int D.22953;
  short unsigned int D.22956;
  char D.22959;
  int D.22960;
  int D.22961;
  int D.22964;
  unsigned int D.22967;
  int D.22970;
  int D.22979;
  long unsigned int D.22985;
  long unsigned int D.22986;
  long unsigned int D.22987;
  long unsigned int D.22988;
  unsigned int D.22991;
  long unsigned int D.22993;
  struct MonoInst * * D.22994;
  struct MonoInst * D.22995;
  unsigned char D.22997;
  unsigned char D.22998;
  int iftmp.12;
  struct MonoInst * iftmp.13;
  unsigned char D.23009;
  int D.23010;
  int D.23011;
  _Bool D.23013;
  long int D.23014;
  long int D.23015;
  long unsigned int D.23017;
  long unsigned int D.23018;
  long unsigned int D.23019;
  short unsigned int D.23020;
  _Bool D.23021;
  _Bool D.23022;
  _Bool D.23023;
  short unsigned int D.23029;
  _Bool D.23030;
  _Bool D.23031;
  _Bool D.23032;
  short unsigned int D.23059;
  int D.23062;
  int D.23063;
  long unsigned int D.23074;
  long unsigned int D.23075;
  long unsigned int D.23076;
  long unsigned int D.23079;
  long unsigned int D.23080;
  long unsigned int D.23081;
  int D.23082;
  long unsigned int D.23083;
  long unsigned int D.23084;
  long unsigned int D.23085;
  int D.23086;
  long unsigned int D.23087;
  long unsigned int D.23088;
  short unsigned int D.23089;
  long unsigned int D.23092;
  long unsigned int D.23093;
  long unsigned int D.23094;
  short unsigned int D.23097;
  short unsigned int D.23098;
  _Bool D.23099;
  short unsigned int D.23100;
  _Bool D.23101;
  _Bool D.23102;
  short unsigned int D.23104;
  short unsigned int D.23106;
  short unsigned int D.23108;
  short unsigned int D.23110;
  struct GSList * D.23112;
  void * D.23115;
  long int D.23116;
  unsigned int D.23117;
  long unsigned int D.23118;
  long unsigned int D.23119;
  int reg.14;
  int D.23121;
  long unsigned int D.23122;
  long unsigned int D.23123;
  struct GSList * D.23124;
  unsigned int D.23127;
  long unsigned int D.23128;
  long unsigned int D.23129;
  int reg.15;
  int D.23131;
  long unsigned int D.23132;
  long unsigned int D.23133;
  struct MonoInst * iftmp.16;
  struct MonoBasicBlock * bb;
  struct MonoInst * ins;
  struct MonoInst * prev;
  struct MonoBitSet * used;
  struct MonoBitSet * defined;

  D.22862 = cfg->next_vreg;
  D.22863 = D.22862 + 1;
  D.22864 = cfg->mempool;
  used = mono_bitset_mp_new_noinit (D.22864, D.22863);
  D.22862 = cfg->next_vreg;
  D.22863 = D.22862 + 1;
  D.22864 = cfg->mempool;
  defined = mono_bitset_mp_new_noinit (D.22864, D.22863);
  bb = cfg->bb_entry;
  goto <D.22403>;
  <D.22402>:
  ins = bb->code;
  goto <D.22371>;
  <D.22370>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.22865 = ins->opcode;
        D.22866 = (int) D.22865;
        D.22867 = D.22866 + -313;
        D.22868 = D.22867 * 4;
        spec = &ins_info[D.22868];
        D.22869 = *spec;
        if (D.22869 != 32) goto <D.22870>; else goto <D.22871>;
        <D.22870>:
        D.22872 = ins->dreg;
        D.22873 = (long unsigned int) D.22872;
        D.22874 = D.22873 / 64;
        D.22875 = used->data[D.22874];
        D.22872 = ins->dreg;
        D.22876 = D.22872 & 63;
        D.22877 = 1 << D.22876;
        D.22878 = ~D.22877;
        D.22879 = D.22875 & D.22878;
        used->data[D.22874] = D.22879;
        D.22872 = ins->dreg;
        D.22873 = (long unsigned int) D.22872;
        D.22880 = D.22873 / 64;
        D.22881 = defined->data[D.22880];
        D.22872 = ins->dreg;
        D.22876 = D.22872 & 63;
        D.22877 = 1 << D.22876;
        D.22878 = ~D.22877;
        D.22882 = D.22881 & D.22878;
        defined->data[D.22880] = D.22882;
        <D.22871>:
        D.22883 = ins->sreg1;
        sregs[0] = D.22883;
        D.22884 = ins->sreg2;
        sregs[1] = D.22884;
        D.22885 = ins->sreg3;
        sregs[2] = D.22885;
        D.22865 = ins->opcode;
        D.22866 = (int) D.22865;
        D.22867 = D.22866 + -313;
        D.22886 = ins_sreg_counts[D.22867];
        num_sregs = (int) D.22886;
        i = 0;
        goto <D.22368>;
        <D.22367>:
        D.22887 = sregs[i];
        D.22888 = (long unsigned int) D.22887;
        D.22889 = D.22888 / 64;
        D.22890 = used->data[D.22889];
        D.22887 = sregs[i];
        D.22891 = D.22887 & 63;
        D.22892 = 1 << D.22891;
        D.22893 = ~D.22892;
        D.22894 = D.22890 & D.22893;
        used->data[D.22889] = D.22894;
        i = i + 1;
        <D.22368>:
        if (i < num_sregs) goto <D.22367>; else goto <D.22369>;
        <D.22369>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  ins = ins->next;
  <D.22371>:
  if (ins != 0B) goto <D.22370>; else goto <D.22372>;
  <D.22372>:
  ins = bb->last_ins;
  if (ins != 0B) goto <D.22896>; else goto <D.22897>;
  <D.22896>:
  iftmp.11 = ins->prev;
  goto <D.22898>;
  <D.22897>:
  iftmp.11 = 0B;
  <D.22898>:
  prev = iftmp.11;
  goto <D.22400>;
  <D.22399>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.22865 = ins->opcode;
        D.22866 = (int) D.22865;
        D.22867 = D.22866 + -313;
        D.22868 = D.22867 * 4;
        spec = &ins_info[D.22868];
        D.22865 = ins->opcode;
        if (D.22865 == 316) goto <D.22899>; else goto <D.22900>;
        <D.22899>:
        D.22901 = ins->prev;
        if (D.22901 != 0B) goto <D.22902>; else goto <D.22903>;
        <D.22902>:
        D.22901 = ins->prev;
        D.22904 = ins->next;
        D.22901->next = D.22904;
        <D.22903>:
        D.22904 = ins->next;
        if (D.22904 != 0B) goto <D.22905>; else goto <D.22906>;
        <D.22905>:
        D.22904 = ins->next;
        D.22901 = ins->prev;
        D.22904->prev = D.22901;
        <D.22906>:
        D.22907 = bb->code;
        if (D.22907 == ins) goto <D.22908>; else goto <D.22909>;
        <D.22908>:
        D.22904 = ins->next;
        bb->code = D.22904;
        <D.22909>:
        D.22910 = bb->last_ins;
        if (D.22910 == ins) goto <D.22911>; else goto <D.22912>;
        <D.22911>:
        D.22901 = ins->prev;
        bb->last_ins = D.22901;
        <D.22912>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.22885 = ins->sreg3;
        ins->sreg2 = D.22885;
        D.22884 = ins->sreg2;
        ins->sreg1 = D.22884;
        // predicted unlikely by continue predictor.
        goto <D.22377>;
        <D.22900>:
        D.22865 = ins->opcode;
        D.22913 = D.22865 <= 313;
        D.22914 = (long int) D.22913;
        D.22915 = __builtin_expect (D.22914, 0);
        if (D.22915 != 0) goto <D.22916>; else goto <D.22917>;
        <D.22916>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 521, "ins->opcode > MONO_CEE_LAST");
        <D.22917>:
        D.22920 = ins->opcode;
        D.22921 = D.22920 == 428;
        D.22922 = D.22920 == 431;
        D.22923 = D.22921 | D.22922;
        if (D.22923 != 0) goto <D.22918>; else goto <D.22924>;
        <D.22924>:
        D.22865 = ins->opcode;
        if (D.22865 == 962) goto <D.22918>; else goto <D.22919>;
        <D.22918>:
        D.22901 = ins->prev;
        if (D.22901 != 0B) goto <D.22925>; else goto <D.22926>;
        <D.22925>:
        {
          struct MonoInst * def;
          const char * spec2;

          def = ins->prev;
          goto <D.22381>;
          <D.22380>:
          def = def->prev;
          <D.22381>:
          D.22927 = def->prev;
          if (D.22927 != 0B) goto <D.22928>; else goto <D.22382>;
          <D.22928>:
          D.22929 = def->opcode;
          if (D.22929 == 316) goto <D.22380>; else goto <D.22382>;
          <D.22382>:
          D.22929 = def->opcode;
          D.22930 = (int) D.22929;
          D.22931 = D.22930 + -313;
          D.22932 = D.22931 * 4;
          spec2 = &ins_info[D.22932];
          D.22883 = ins->sreg1;
          D.22935 = (unsigned int) D.22883;
          D.22936 = cfg->vreg_to_inst_len;
          if (D.22935 >= D.22936) goto <D.22933>; else goto <D.22937>;
          <D.22937>:
          D.22938 = cfg->vreg_to_inst;
          D.22883 = ins->sreg1;
          D.22939 = (long unsigned int) D.22883;
          D.22940 = D.22939 * 8;
          D.22941 = D.22938 + D.22940;
          D.22942 = *D.22941;
          if (D.22942 == 0B) goto <D.22933>; else goto <D.22934>;
          <D.22933>:
          D.22943 = *spec2;
          if (D.22943 != 32) goto <D.22944>; else goto <D.22945>;
          <D.22944>:
          D.22946 = def->dreg;
          D.22883 = ins->sreg1;
          if (D.22946 == D.22883) goto <D.22947>; else goto <D.22948>;
          <D.22947>:
          D.22883 = ins->sreg1;
          D.22939 = (long unsigned int) D.22883;
          D.22949 = D.22939 / 64;
          D.22950 = used->data[D.22949];
          D.22883 = ins->sreg1;
          D.22951 = D.22883 & 63;
          D.22952 = D.22950 >> D.22951;
          D.22953 = D.22952 & 1;
          if (D.22953 == 0) goto <D.22954>; else goto <D.22955>;
          <D.22954>:
          D.22929 = def->opcode;
          D.22956 = D.22929 + 65162;
          if (D.22956 > 16) goto <D.22957>; else goto <D.22958>;
          <D.22957>:
          D.22959 = *spec;
          D.22960 = (int) D.22959;
          D.22883 = ins->sreg1;
          D.22961 = reg_is_softreg (D.22883, D.22960);
          if (D.22961 != 0) goto <D.22962>; else goto <D.22963>;
          <D.22962>:
          D.22964 = mono_is_simd_accessor (def);
          if (D.22964 == 0) goto <D.22965>; else goto <D.22966>;
          <D.22965>:
          D.22967 = cfg->verbose_level;
          if (D.22967 > 2) goto <D.22968>; else goto <D.22969>;
          <D.22968>:
          D.22970 = bb->block_num;
          printf ("\tReverse copyprop in BB%d on ", D.22970);
          mono_print_ins (ins);
          <D.22969>:
          D.22872 = ins->dreg;
          def->dreg = D.22872;
          D.22901 = ins->prev;
          if (D.22901 != 0B) goto <D.22971>; else goto <D.22972>;
          <D.22971>:
          D.22901 = ins->prev;
          D.22904 = ins->next;
          D.22901->next = D.22904;
          <D.22972>:
          D.22904 = ins->next;
          if (D.22904 != 0B) goto <D.22973>; else goto <D.22974>;
          <D.22973>:
          D.22904 = ins->next;
          D.22901 = ins->prev;
          D.22904->prev = D.22901;
          <D.22974>:
          D.22907 = bb->code;
          if (D.22907 == ins) goto <D.22975>; else goto <D.22976>;
          <D.22975>:
          D.22904 = ins->next;
          bb->code = D.22904;
          <D.22976>:
          D.22910 = bb->last_ins;
          if (D.22910 == ins) goto <D.22977>; else goto <D.22978>;
          <D.22977>:
          D.22901 = ins->prev;
          bb->last_ins = D.22901;
          <D.22978>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22885 = ins->sreg3;
          ins->sreg2 = D.22885;
          D.22884 = ins->sreg2;
          ins->sreg1 = D.22884;
          D.22865 = ins->opcode;
          D.22866 = (int) D.22865;
          D.22867 = D.22866 + -313;
          D.22868 = D.22867 * 4;
          spec = &ins_info[D.22868];
          <D.22966>:
          <D.22963>:
          <D.22958>:
          <D.22955>:
          <D.22948>:
          <D.22945>:
          <D.22934>:
        }
        <D.22926>:
        <D.22919>:
        D.22959 = *spec;
        D.22960 = (int) D.22959;
        D.22872 = ins->dreg;
        D.22979 = reg_is_softreg_no_fpstack (D.22872, D.22960);
        if (D.22979 != 0) goto <D.22980>; else goto <D.22981>;
        <D.22980>:
        D.22872 = ins->dreg;
        D.22873 = (long unsigned int) D.22872;
        D.22985 = D.22873 / 64;
        D.22986 = used->data[D.22985];
        D.22872 = ins->dreg;
        D.22876 = D.22872 & 63;
        D.22987 = D.22986 >> D.22876;
        D.22988 = D.22987 & 1;
        if (D.22988 == 0) goto <D.22989>; else goto <D.22990>;
        <D.22989>:
        D.22872 = ins->dreg;
        D.22991 = (unsigned int) D.22872;
        D.22936 = cfg->vreg_to_inst_len;
        if (D.22991 >= D.22936) goto <D.22984>; else goto <D.22992>;
        <D.22992>:
        D.22938 = cfg->vreg_to_inst;
        D.22872 = ins->dreg;
        D.22873 = (long unsigned int) D.22872;
        D.22993 = D.22873 * 8;
        D.22994 = D.22938 + D.22993;
        D.22995 = *D.22994;
        if (D.22995 == 0B) goto <D.22984>; else goto <D.22996>;
        <D.22996>:
        D.22997 = BIT_FIELD_REF <*bb, 8, 1488>;
        D.22998 = D.22997 & 8;
        if (D.22998 == 0) goto <D.22999>; else goto <D.22983>;
        <D.22999>:
        D.22872 = ins->dreg;
        D.22991 = (unsigned int) D.22872;
        D.22936 = cfg->vreg_to_inst_len;
        if (D.22991 < D.22936) goto <D.23003>; else goto <D.23001>;
        <D.23003>:
        D.22938 = cfg->vreg_to_inst;
        D.22872 = ins->dreg;
        D.22873 = (long unsigned int) D.22872;
        D.22993 = D.22873 * 8;
        D.22994 = D.22938 + D.22993;
        D.22995 = *D.22994;
        if (D.22995 != 0B) goto <D.23004>; else goto <D.23001>;
        <D.23004>:
        D.22872 = ins->dreg;
        D.22991 = (unsigned int) D.22872;
        D.22936 = cfg->vreg_to_inst_len;
        if (D.22991 < D.22936) goto <D.23006>; else goto <D.23007>;
        <D.23006>:
        D.22938 = cfg->vreg_to_inst;
        D.22872 = ins->dreg;
        D.22873 = (long unsigned int) D.22872;
        D.22993 = D.22873 * 8;
        D.22994 = D.22938 + D.22993;
        iftmp.13 = *D.22994;
        goto <D.23008>;
        <D.23007>:
        iftmp.13 = 0B;
        <D.23008>:
        D.23009 = iftmp.13->flags;
        D.23010 = (int) D.23009;
        D.23011 = D.23010 & 20;
        if (D.23011 != 0) goto <D.23012>; else goto <D.23001>;
        <D.23012>:
        iftmp.12 = 1;
        goto <D.23002>;
        <D.23001>:
        iftmp.12 = 0;
        <D.23002>:
        D.23013 = iftmp.12 != 0;
        D.23014 = (long int) D.23013;
        D.23015 = __builtin_expect (D.23014, 0);
        if (D.23015 == 0) goto <D.23016>; else goto <D.22983>;
        <D.23016>:
        D.22872 = ins->dreg;
        D.22873 = (long unsigned int) D.22872;
        D.22985 = D.22873 / 64;
        D.23017 = defined->data[D.22985];
        D.22872 = ins->dreg;
        D.22876 = D.22872 & 63;
        D.23018 = D.23017 >> D.22876;
        D.23019 = D.23018 & 1;
        if (D.23019 != 0) goto <D.22984>; else goto <D.22983>;
        <D.22984>:
        D.23020 = ins->opcode;
        D.23021 = D.23020 == 428;
        D.23022 = D.23020 == 430;
        D.23023 = D.23021 | D.23022;
        if (D.23023 != 0) goto <D.22982>; else goto <D.23024>;
        <D.23024>:
        D.22865 = ins->opcode;
        if (D.22865 == 431) goto <D.22982>; else goto <D.23025>;
        <D.23025>:
        D.22865 = ins->opcode;
        if (D.22865 == 962) goto <D.22982>; else goto <D.23026>;
        <D.23026>:
        D.22865 = ins->opcode;
        if (D.22865 == 362) goto <D.22982>; else goto <D.23027>;
        <D.23027>:
        D.22865 = ins->opcode;
        if (D.22865 == 363) goto <D.22982>; else goto <D.23028>;
        <D.23028>:
        D.23029 = ins->opcode;
        D.23030 = D.23029 == 432;
        D.23031 = D.23029 == 963;
        D.23032 = D.23030 | D.23031;
        if (D.23032 != 0) goto <D.22982>; else goto <D.23033>;
        <D.23033>:
        D.22865 = ins->opcode;
        if (D.22865 == 433) goto <D.22982>; else goto <D.23034>;
        <D.23034>:
        D.22865 = ins->opcode;
        if (D.22865 == 365) goto <D.22982>; else goto <D.23035>;
        <D.23035>:
        D.22865 = ins->opcode;
        if (D.22865 == 542) goto <D.22982>; else goto <D.23036>;
        <D.23036>:
        D.22865 = ins->opcode;
        if (D.22865 == 630) goto <D.22982>; else goto <D.23037>;
        <D.23037>:
        D.22865 = ins->opcode;
        if (D.22865 == 629) goto <D.22982>; else goto <D.23038>;
        <D.23038>:
        D.22865 = ins->opcode;
        if (D.22865 == 496) goto <D.22982>; else goto <D.23039>;
        <D.23039>:
        D.22865 = ins->opcode;
        if (D.22865 == 570) goto <D.22982>; else goto <D.23040>;
        <D.23040>:
        D.22865 = ins->opcode;
        if (D.22865 == 979) goto <D.22982>; else goto <D.23041>;
        <D.23041>:
        D.22865 = ins->opcode;
        if (D.22865 == 639) goto <D.22982>; else goto <D.23042>;
        <D.23042>:
        D.22865 = ins->opcode;
        if (D.22865 == 640) goto <D.22982>; else goto <D.23043>;
        <D.23043>:
        D.22865 = ins->opcode;
        if (D.22865 == 641) goto <D.22982>; else goto <D.23044>;
        <D.23044>:
        D.22865 = ins->opcode;
        if (D.22865 == 636) goto <D.22982>; else goto <D.23045>;
        <D.23045>:
        D.22865 = ins->opcode;
        if (D.22865 == 595) goto <D.22982>; else goto <D.23046>;
        <D.23046>:
        D.22865 = ins->opcode;
        if (D.22865 == 584) goto <D.22982>; else goto <D.23047>;
        <D.23047>:
        D.22865 = ins->opcode;
        if (D.22865 == 766) goto <D.22982>; else goto <D.23048>;
        <D.23048>:
        D.22865 = ins->opcode;
        if (D.22865 == 507) goto <D.22982>; else goto <D.23049>;
        <D.23049>:
        D.22865 = ins->opcode;
        if (D.22865 == 594) goto <D.22982>; else goto <D.23050>;
        <D.23050>:
        D.22865 = ins->opcode;
        if (D.22865 == 585) goto <D.22982>; else goto <D.23051>;
        <D.23051>:
        D.22865 = ins->opcode;
        if (D.22865 == 499) goto <D.22982>; else goto <D.23052>;
        <D.23052>:
        D.22865 = ins->opcode;
        if (D.22865 == 314) goto <D.22982>; else goto <D.23053>;
        <D.23053>:
        D.22865 = ins->opcode;
        if (D.22865 == 319) goto <D.22982>; else goto <D.23054>;
        <D.23054>:
        D.22865 = ins->opcode;
        if (D.22865 == 316) goto <D.22982>; else goto <D.23055>;
        <D.23055>:
        D.22865 = ins->opcode;
        if (D.22865 == 769) goto <D.22982>; else goto <D.23056>;
        <D.23056>:
        D.22865 = ins->opcode;
        if (D.22865 == 803) goto <D.22982>; else goto <D.22983>;
        <D.22982>:
        D.22901 = ins->prev;
        if (D.22901 != 0B) goto <D.23057>; else goto <D.23058>;
        <D.23057>:
        D.22901 = ins->prev;
        D.23059 = D.22901->opcode;
        if (D.23059 == 327) goto <D.23060>; else goto <D.23061>;
        <D.23060>:
        {
          struct MonoInst * prev;

          prev = ins->prev;
          prev->opcode = 316;
          prev->dreg = -1;
          prev->sreg3 = -1;
          D.23062 = prev->sreg3;
          prev->sreg2 = D.23062;
          D.23063 = prev->sreg2;
          prev->sreg1 = D.23063;
        }
        <D.23061>:
        <D.23058>:
        D.22901 = ins->prev;
        if (D.22901 != 0B) goto <D.23064>; else goto <D.23065>;
        <D.23064>:
        D.22901 = ins->prev;
        D.22904 = ins->next;
        D.22901->next = D.22904;
        <D.23065>:
        D.22904 = ins->next;
        if (D.22904 != 0B) goto <D.23066>; else goto <D.23067>;
        <D.23066>:
        D.22904 = ins->next;
        D.22901 = ins->prev;
        D.22904->prev = D.22901;
        <D.23067>:
        D.22907 = bb->code;
        if (D.22907 == ins) goto <D.23068>; else goto <D.23069>;
        <D.23068>:
        D.22904 = ins->next;
        bb->code = D.22904;
        <D.23069>:
        D.22910 = bb->last_ins;
        if (D.22910 == ins) goto <D.23070>; else goto <D.23071>;
        <D.23070>:
        D.22901 = ins->prev;
        bb->last_ins = D.22901;
        <D.23071>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.22885 = ins->sreg3;
        ins->sreg2 = D.22885;
        D.22884 = ins->sreg2;
        ins->sreg1 = D.22884;
        D.22865 = ins->opcode;
        D.22866 = (int) D.22865;
        D.22867 = D.22866 + -313;
        D.22868 = D.22867 * 4;
        spec = &ins_info[D.22868];
        <D.22983>:
        <D.22990>:
        D.22959 = *spec;
        if (D.22959 != 32) goto <D.23072>; else goto <D.23073>;
        <D.23072>:
        D.22872 = ins->dreg;
        D.22873 = (long unsigned int) D.22872;
        D.23074 = D.22873 / 64;
        D.23075 = used->data[D.23074];
        D.22872 = ins->dreg;
        D.22876 = D.22872 & 63;
        D.22877 = 1 << D.22876;
        D.22878 = ~D.22877;
        D.23076 = D.23075 & D.22878;
        used->data[D.23074] = D.23076;
        <D.23073>:
        <D.22981>:
        D.22959 = *spec;
        if (D.22959 != 32) goto <D.23077>; else goto <D.23078>;
        <D.23077>:
        D.22872 = ins->dreg;
        D.22873 = (long unsigned int) D.22872;
        D.23079 = D.22873 / 64;
        D.23080 = defined->data[D.23079];
        D.22872 = ins->dreg;
        D.22876 = D.22872 & 63;
        D.22877 = 1 << D.22876;
        D.23081 = D.23080 | D.22877;
        defined->data[D.23079] = D.23081;
        <D.23078>:
        D.22883 = ins->sreg1;
        sregs[0] = D.22883;
        D.22884 = ins->sreg2;
        sregs[1] = D.22884;
        D.22885 = ins->sreg3;
        sregs[2] = D.22885;
        D.22865 = ins->opcode;
        D.22866 = (int) D.22865;
        D.22867 = D.22866 + -313;
        D.22886 = ins_sreg_counts[D.22867];
        num_sregs = (int) D.22886;
        i = 0;
        goto <D.22385>;
        <D.22384>:
        D.23082 = sregs[i];
        D.23083 = (long unsigned int) D.23082;
        D.23084 = D.23083 / 64;
        D.23085 = used->data[D.23084];
        D.23082 = sregs[i];
        D.23086 = D.23082 & 63;
        D.23087 = 1 << D.23086;
        D.23088 = D.23085 | D.23087;
        used->data[D.23084] = D.23088;
        i = i + 1;
        <D.22385>:
        if (i < num_sregs) goto <D.22384>; else goto <D.22386>;
        <D.22386>:
        D.22865 = ins->opcode;
        D.23089 = D.22865 + 65162;
        if (D.23089 <= 16) goto <D.23090>; else goto <D.23091>;
        <D.23090>:
        D.22872 = ins->dreg;
        D.22873 = (long unsigned int) D.22872;
        D.23092 = D.22873 / 64;
        D.23093 = used->data[D.23092];
        D.22872 = ins->dreg;
        D.22876 = D.22872 & 63;
        D.22877 = 1 << D.22876;
        D.23094 = D.23093 | D.22877;
        used->data[D.23092] = D.23094;
        <D.23091>:
        D.23097 = ins->opcode;
        D.23098 = D.23097 + 65193;
        D.23099 = D.23098 <= 2;
        D.23100 = D.23097 + 65187;
        D.23101 = D.23100 <= 2;
        D.23102 = D.23099 | D.23101;
        if (D.23102 != 0) goto <D.23095>; else goto <D.23103>;
        <D.23103>:
        D.22865 = ins->opcode;
        D.23104 = D.22865 + 65184;
        if (D.23104 <= 2) goto <D.23095>; else goto <D.23105>;
        <D.23105>:
        D.22865 = ins->opcode;
        D.23106 = D.22865 + 65181;
        if (D.23106 <= 2) goto <D.23095>; else goto <D.23107>;
        <D.23107>:
        D.22865 = ins->opcode;
        D.23108 = D.22865 + 65190;
        if (D.23108 <= 2) goto <D.23095>; else goto <D.23109>;
        <D.23109>:
        D.22865 = ins->opcode;
        D.23110 = D.22865 + 65178;
        if (D.23110 <= 2) goto <D.23095>; else goto <D.23111>;
        <D.23111>:
        D.22865 = ins->opcode;
        if (D.22865 == 448) goto <D.23095>; else goto <D.23096>;
        <D.23095>:
        {
          struct MonoCallInst * call;
          struct GSList * l;

          call = ins;
          D.23112 = call->out_ireg_args;
          if (D.23112 != 0B) goto <D.23113>; else goto <D.23114>;
          <D.23113>:
          l = call->out_ireg_args;
          goto <D.22392>;
          <D.22391>:
          {
            guint32 regpair;
            guint32 reg;

            D.23115 = l->data;
            D.23116 = (long int) D.23115;
            regpair = (guint32) D.23116;
            reg = regpair & 16777215;
            D.23117 = reg / 64;
            D.23118 = (long unsigned int) D.23117;
            D.23118 = (long unsigned int) D.23117;
            D.23119 = used->data[D.23118];
            reg.14 = (int) reg;
            D.23121 = reg.14 & 63;
            D.23122 = 1 << D.23121;
            D.23123 = D.23119 | D.23122;
            used->data[D.23118] = D.23123;
          }
          l = l->next;
          <D.22392>:
          if (l != 0B) goto <D.22391>; else goto <D.22393>;
          <D.22393>:
          <D.23114>:
          D.23124 = call->out_freg_args;
          if (D.23124 != 0B) goto <D.23125>; else goto <D.23126>;
          <D.23125>:
          l = call->out_freg_args;
          goto <D.22397>;
          <D.22396>:
          {
            guint32 regpair;
            guint32 reg;

            D.23115 = l->data;
            D.23116 = (long int) D.23115;
            regpair = (guint32) D.23116;
            reg = regpair & 16777215;
            D.23127 = reg / 64;
            D.23128 = (long unsigned int) D.23127;
            D.23128 = (long unsigned int) D.23127;
            D.23129 = used->data[D.23128];
            reg.15 = (int) reg;
            D.23131 = reg.15 & 63;
            D.23132 = 1 << D.23131;
            D.23133 = D.23129 | D.23132;
            used->data[D.23128] = D.23133;
          }
          l = l->next;
          <D.22397>:
          if (l != 0B) goto <D.22396>; else goto <D.22398>;
          <D.22398>:
          <D.23126>:
        }
        <D.23096>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  <D.22377>:
  ins = prev;
  if (ins != 0B) goto <D.23135>; else goto <D.23136>;
  <D.23135>:
  iftmp.16 = ins->prev;
  goto <D.23137>;
  <D.23136>:
  iftmp.16 = 0B;
  <D.23137>:
  prev = iftmp.16;
  <D.22400>:
  if (ins != 0B) goto <D.22399>; else goto <D.22401>;
  <D.22401>:
  bb = bb->next_bb;
  <D.22403>:
  if (bb != 0B) goto <D.22402>; else goto <D.22404>;
  <D.22404>:
}


mono_bitset_mp_new_noinit (struct MonoMemPool * mp, guint32 max_size)
{
  unsigned int D.23140;
  unsigned int size.17;
  struct MonoBitSet * D.23142;
  int size;
  void * mem;

  D.23140 = mono_bitset_alloc_size (max_size, 0);
  size = (int) D.23140;
  size.17 = (unsigned int) size;
  mem = mono_mempool_alloc (mp, size.17);
  D.23142 = mono_bitset_mem_new (mem, max_size, 1);
  return D.23142;
}


reg_is_softreg (int reg, const char spec)
{
  gboolean D.23144;
  int iftmp.18;
  _Bool iftmp.19;
  _Bool D.23153;
  _Bool D.23154;
  _Bool D.23155;
  _Bool D.23157;
  _Bool D.23158;

  D.23153 = spec == 105;
  D.23154 = spec == 102;
  D.23155 = D.23153 | D.23154;
  if (D.23155 != 0) goto <D.23150>; else goto <D.23156>;
  <D.23156>:
  if (spec == 120) goto <D.23150>; else goto <D.23151>;
  <D.23150>:
  iftmp.19 = 1;
  goto <D.23152>;
  <D.23151>:
  iftmp.19 = 0;
  <D.23152>:
  D.23157 = reg > 15;
  D.23158 = iftmp.19 & D.23157;
  if (D.23158 != 0) goto <D.23146>; else goto <D.23159>;
  <D.23159>:
  if (spec == 118) goto <D.23146>; else goto <D.23147>;
  <D.23146>:
  iftmp.18 = 1;
  goto <D.23148>;
  <D.23147>:
  iftmp.18 = 0;
  <D.23148>:
  D.23144 = iftmp.18;
  return D.23144;
}


mono_is_simd_accessor (struct MonoInst * ins)
{
  short unsigned int D.23161;
  int D.23162;
  gboolean D.23163;

  D.23161 = ins->opcode;
  D.23162 = (int) D.23161;
  switch (D.23162) <default: <D.22354>, case 932: <D.22343>, case 933: <D.22345>, case 934: <D.22346>, case 935: <D.22347>, case 936: <D.22348>, case 937: <D.22344>, case 939: <D.22349>, case 940: <D.22350>, case 941: <D.22351>, case 942: <D.22352>, case 943: <D.22353>>
  <D.22343>:
  <D.22344>:
  <D.22345>:
  <D.22346>:
  <D.22347>:
  <D.22348>:
  <D.22349>:
  <D.22350>:
  <D.22351>:
  <D.22352>:
  <D.22353>:
  D.23163 = 1;
  return D.23163;
  <D.22354>:
  D.23163 = 0;
  return D.23163;
}


reg_is_softreg_no_fpstack (int reg, const char spec)
{
  gboolean D.23165;
  int iftmp.20;
  _Bool iftmp.21;
  _Bool D.23174;
  _Bool D.23175;
  _Bool D.23176;
  _Bool D.23178;
  _Bool D.23179;

  D.23174 = spec == 105;
  D.23175 = spec == 102;
  D.23176 = D.23174 | D.23175;
  if (D.23176 != 0) goto <D.23171>; else goto <D.23177>;
  <D.23177>:
  if (spec == 120) goto <D.23171>; else goto <D.23172>;
  <D.23171>:
  iftmp.21 = 1;
  goto <D.23173>;
  <D.23172>:
  iftmp.21 = 0;
  <D.23173>:
  D.23178 = reg > 15;
  D.23179 = iftmp.21 & D.23178;
  if (D.23179 != 0) goto <D.23167>; else goto <D.23180>;
  <D.23180>:
  if (spec == 118) goto <D.23167>; else goto <D.23168>;
  <D.23167>:
  iftmp.20 = 1;
  goto <D.23169>;
  <D.23168>:
  iftmp.20 = 0;
  <D.23169>:
  D.23165 = iftmp.20;
  return D.23165;
}


