mono_local_cprop (struct MonoCompile * cfg)
{
  unsigned int D.22485;
  struct MonoMemPool * D.22486;
  unsigned int D.22487;
  unsigned int D.22488;
  unsigned int D.22489;
  int D.22490;
  long unsigned int D.22495;
  long unsigned int D.22496;
  struct MonoInst * * D.22497;
  int D.22498;
  int D.22499;
  int D.22500;
  short unsigned int D.22501;
  int D.22502;
  int D.22503;
  signed char D.22504;
  long unsigned int D.22507;
  long unsigned int D.22508;
  struct MonoInst * * D.22509;
  int D.22510;
  struct MonoInst * D.22513;
  struct MonoInst * D.22516;
  struct MonoInst * D.22519;
  struct MonoInst * D.22522;
  _Bool D.22525;
  long int D.22526;
  long int D.22527;
  int D.22532;
  long unsigned int D.22533;
  long unsigned int D.22534;
  struct MonoInst * * D.22535;
  short unsigned int D.22536;
  long unsigned int D.22543;
  long unsigned int D.22544;
  struct MonoInst * * D.22545;
  struct MonoInst * D.22546;
  short unsigned int D.22551;
  int D.22554;
  long unsigned int D.22555;
  long unsigned int D.22556;
  struct MonoInst * * D.22557;
  struct MonoInst * D.22558;
  long unsigned int D.22560;
  gint32 * D.22561;
  int D.22562;
  long unsigned int D.22563;
  gint32 * D.22564;
  int D.22565;
  int iftmp.0;
  unsigned int D.22569;
  unsigned int D.22570;
  struct MonoInst * * D.22572;
  struct MonoInst * * D.22573;
  struct MonoInst * D.22574;
  struct MonoInst * iftmp.1;
  unsigned char D.22580;
  int D.22581;
  int D.22582;
  _Bool D.22584;
  long int D.22585;
  long int D.22586;
  unsigned int D.22589;
  int D.22592;
  sizetype D.22593;
  const char * D.22594;
  char D.22595;
  short unsigned int D.22607;
  int D.22610;
  long unsigned int D.22611;
  long unsigned int D.22612;
  struct MonoInst * * D.22613;
  struct MonoInst * D.22614;
  long unsigned int D.22616;
  gint32 * D.22617;
  int D.22618;
  int iftmp.2;
  unsigned int D.22622;
  struct MonoInst * * D.22624;
  struct MonoInst * D.22625;
  struct MonoInst * iftmp.3;
  unsigned char D.22631;
  int D.22632;
  int D.22633;
  _Bool D.22635;
  long int D.22636;
  long int D.22637;
  struct MonoInst * D.22644;
  short unsigned int D.22654;
  long int D.22657;
  int D.22658;
  long unsigned int D.22663;
  long unsigned int D.22664;
  struct MonoInst * * D.22665;
  struct MonoInst * D.22666;
  short unsigned int D.22668;
  long unsigned int D.22670;
  long unsigned int D.22671;
  struct MonoInst * * D.22672;
  struct MonoInst * D.22673;
  int D.22686;
  int D.22690;
  short unsigned int D.22693;
  long int D.22696;
  long int D.22703;
  const void * D.22704;
  int D.22705;
  int D.22710;
  long int D.22713;
  long int D.22714;
  short unsigned int D.22719;
  unsigned int D.22723;
  struct MonoInst * D.22725;
  int D.22727;
  long int D.22728;
  long int D.22735;
  guint16 iftmp.4;
  unsigned int D.22790;
  guint16 iftmp.5;
  guint16 iftmp.6;
  long int D.22801;
  unsigned int c.7;
  int D.22807;
  int D.22808;
  long int D.22809;
  long int D.22813;
  unsigned int c.8;
  unsigned int D.22817;
  long int D.22818;
  struct MonoInst * D.22819;
  int D.22820;
  int D.22821;
  const unsigned char * D.22822;
  long int D.22823;
  struct MonoInst * D.22824;
  int D.22825;
  int D.22826;
  long int D.22827;
  struct MonoInst * D.22828;
  int D.22829;
  int D.22830;
  unsigned int D.22833;
  int D.22834;
  long int D.22835;
  long int D.22836;
  struct MonoInst * D.22837;
  int D.22838;
  int D.22839;
  long int D.22840;
  char D.22842;
  short unsigned int D.22847;
  int D.22850;
  unsigned int D.22851;
  long int D.22856;
  long int D.22857;
  int iftmp.9;
  unsigned int D.22865;
  struct MonoInst * * D.22867;
  struct MonoInst * D.22868;
  struct MonoInst * iftmp.10;
  unsigned char D.22874;
  int D.22875;
  int D.22876;
  _Bool D.22878;
  long int D.22879;
  long int D.22880;
  long unsigned int D.22883;
  gint32 * D.22884;
  short unsigned int D.22887;
  short unsigned int D.22889;
  short unsigned int D.22891;
  short unsigned int D.22893;
  short unsigned int D.22895;
  short unsigned int D.22897;
  struct MonoBasicBlock * bb;
  struct MonoInst * * defs;
  gint32 * def_index;
  int max;
  void restart = <<< error >>>;

  restart:
  D.22485 = cfg->next_vreg;
  max = (int) D.22485;
  D.22486 = cfg->mempool;
  D.22485 = cfg->next_vreg;
  D.22487 = D.22485 + 1;
  D.22488 = D.22487 * 8;
  defs = mono_mempool_alloc (D.22486, D.22488);
  D.22486 = cfg->mempool;
  D.22485 = cfg->next_vreg;
  D.22487 = D.22485 + 1;
  D.22489 = D.22487 * 4;
  def_index = mono_mempool_alloc (D.22486, D.22489);
  bb = cfg->bb_entry;
  goto <D.22420>;
  <D.22419>:
  {
    struct MonoInst * ins;
    int ins_index;
    int last_call_index;

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

      try
        {
          D.22490 = ins->dreg;
          if (D.22490 != -1) goto <D.22491>; else goto <D.22492>;
          <D.22491>:
          D.22490 = ins->dreg;
          if (D.22490 < max) goto <D.22493>; else goto <D.22494>;
          <D.22493>:
          D.22490 = ins->dreg;
          D.22495 = (long unsigned int) D.22490;
          D.22496 = D.22495 * 8;
          D.22497 = defs + D.22496;
          *D.22497 = 0B;
          <D.22494>:
          <D.22492>:
          D.22498 = ins->sreg1;
          sregs[0] = D.22498;
          D.22499 = ins->sreg2;
          sregs[1] = D.22499;
          D.22500 = ins->sreg3;
          sregs[2] = D.22500;
          D.22501 = ins->opcode;
          D.22502 = (int) D.22501;
          D.22503 = D.22502 + -313;
          D.22504 = ins_sreg_counts[D.22503];
          num_sregs = (int) D.22504;
          i = 0;
          goto <D.22365>;
          <D.22364>:
          {
            int sreg;

            sreg = sregs[i];
            if (sreg < max) goto <D.22505>; else goto <D.22506>;
            <D.22505>:
            D.22507 = (long unsigned int) sreg;
            D.22508 = D.22507 * 8;
            D.22509 = defs + D.22508;
            *D.22509 = 0B;
            <D.22506>:
          }
          i = i + 1;
          <D.22365>:
          if (i < num_sregs) goto <D.22364>; else goto <D.22366>;
          <D.22366>:
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    ins = ins->next;
    <D.22368>:
    if (ins != 0B) goto <D.22367>; else goto <D.22369>;
    <D.22369>:
    ins_index = 0;
    last_call_index = -1;
    ins = bb->code;
    goto <D.22417>;
    <D.22416>:
    {
      const char * spec;
      int regtype;
      int srcindex;
      int sreg;
      int num_sregs;
      int sregs[3];

      try
        {
          D.22501 = ins->opcode;
          D.22502 = (int) D.22501;
          D.22503 = D.22502 + -313;
          D.22510 = D.22503 * 4;
          spec = &ins_info[D.22510];
          D.22501 = ins->opcode;
          if (D.22501 == 316) goto <D.22511>; else goto <D.22512>;
          <D.22511>:
          D.22513 = ins->prev;
          if (D.22513 != 0B) goto <D.22514>; else goto <D.22515>;
          <D.22514>:
          D.22513 = ins->prev;
          D.22516 = ins->next;
          D.22513->next = D.22516;
          <D.22515>:
          D.22516 = ins->next;
          if (D.22516 != 0B) goto <D.22517>; else goto <D.22518>;
          <D.22517>:
          D.22516 = ins->next;
          D.22513 = ins->prev;
          D.22516->prev = D.22513;
          <D.22518>:
          D.22519 = bb->code;
          if (D.22519 == ins) goto <D.22520>; else goto <D.22521>;
          <D.22520>:
          D.22516 = ins->next;
          bb->code = D.22516;
          <D.22521>:
          D.22522 = bb->last_ins;
          if (D.22522 == ins) goto <D.22523>; else goto <D.22524>;
          <D.22523>:
          D.22513 = ins->prev;
          bb->last_ins = D.22513;
          <D.22524>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22500 = ins->sreg3;
          ins->sreg2 = D.22500;
          D.22499 = ins->sreg2;
          ins->sreg1 = D.22499;
          // predicted unlikely by continue predictor.
          goto <D.22376>;
          <D.22512>:
          D.22501 = ins->opcode;
          D.22525 = D.22501 <= 313;
          D.22526 = (long int) D.22525;
          D.22527 = __builtin_expect (D.22526, 0);
          if (D.22527 != 0) goto <D.22528>; else goto <D.22529>;
          <D.22528>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 105, "ins->opcode > MONO_CEE_LAST");
          <D.22529>:
          D.22501 = ins->opcode;
          if (D.22501 == 314) goto <D.22530>; else goto <D.22531>;
          <D.22530>:
          {
            struct MonoInst * var;

            var = ins->data.op[0].p;
            D.22532 = var->dreg;
            D.22533 = (long unsigned int) D.22532;
            D.22534 = D.22533 * 8;
            D.22535 = defs + D.22534;
            *D.22535 = 0B;
          }
          <D.22531>:
          D.22501 = ins->opcode;
          D.22536 = D.22501 + 65162;
          if (D.22536 <= 13) goto <D.22537>; else goto <D.22538>;
          <D.22537>:
          sreg = ins->dreg;
          regtype = 105;
          if (regtype == 105) goto <D.22539>; else goto <D.22540>;
          <D.22539>:
          if (sreg != -1) goto <D.22541>; else goto <D.22542>;
          <D.22541>:
          D.22543 = (long unsigned int) sreg;
          D.22544 = D.22543 * 8;
          D.22545 = defs + D.22544;
          D.22546 = *D.22545;
          if (D.22546 != 0B) goto <D.22547>; else goto <D.22548>;
          <D.22547>:
          {
            struct MonoInst * def;

            D.22543 = (long unsigned int) sreg;
            D.22544 = D.22543 * 8;
            D.22545 = defs + D.22544;
            def = *D.22545;
            D.22551 = def->opcode;
            if (D.22551 == 424) goto <D.22552>; else goto <D.22553>;
            <D.22552>:
            D.22554 = def->sreg1;
            D.22555 = (long unsigned int) D.22554;
            D.22556 = D.22555 * 8;
            D.22557 = defs + D.22556;
            D.22558 = *D.22557;
            if (D.22558 == 0B) goto <D.22549>; else goto <D.22559>;
            <D.22559>:
            D.22554 = def->sreg1;
            D.22555 = (long unsigned int) D.22554;
            D.22560 = D.22555 * 4;
            D.22561 = def_index + D.22560;
            D.22562 = *D.22561;
            D.22543 = (long unsigned int) sreg;
            D.22563 = D.22543 * 4;
            D.22564 = def_index + D.22563;
            D.22565 = *D.22564;
            if (D.22562 < D.22565) goto <D.22549>; else goto <D.22550>;
            <D.22549>:
            D.22554 = def->sreg1;
            D.22569 = (unsigned int) D.22554;
            D.22570 = cfg->vreg_to_inst_len;
            if (D.22569 < D.22570) goto <D.22571>; else goto <D.22567>;
            <D.22571>:
            D.22572 = cfg->vreg_to_inst;
            D.22554 = def->sreg1;
            D.22555 = (long unsigned int) D.22554;
            D.22556 = D.22555 * 8;
            D.22573 = D.22572 + D.22556;
            D.22574 = *D.22573;
            if (D.22574 != 0B) goto <D.22575>; else goto <D.22567>;
            <D.22575>:
            D.22554 = def->sreg1;
            D.22569 = (unsigned int) D.22554;
            D.22570 = cfg->vreg_to_inst_len;
            if (D.22569 < D.22570) goto <D.22577>; else goto <D.22578>;
            <D.22577>:
            D.22572 = cfg->vreg_to_inst;
            D.22554 = def->sreg1;
            D.22555 = (long unsigned int) D.22554;
            D.22556 = D.22555 * 8;
            D.22573 = D.22572 + D.22556;
            iftmp.1 = *D.22573;
            goto <D.22579>;
            <D.22578>:
            iftmp.1 = 0B;
            <D.22579>:
            D.22580 = iftmp.1->flags;
            D.22581 = (int) D.22580;
            D.22582 = D.22581 & 20;
            if (D.22582 != 0) goto <D.22583>; else goto <D.22567>;
            <D.22583>:
            iftmp.0 = 1;
            goto <D.22568>;
            <D.22567>:
            iftmp.0 = 0;
            <D.22568>:
            D.22584 = iftmp.0 != 0;
            D.22585 = (long int) D.22584;
            D.22586 = __builtin_expect (D.22585, 0);
            if (D.22586 == 0) goto <D.22587>; else goto <D.22588>;
            <D.22587>:
            {
              int vreg;

              vreg = def->sreg1;
              D.22589 = cfg->verbose_level;
              if (D.22589 > 2) goto <D.22590>; else goto <D.22591>;
              <D.22590>:
              printf ("CCOPY: R%d -> R%d\n", sreg, vreg);
              <D.22591>:
              ins->dreg = vreg;
            }
            <D.22588>:
            <D.22550>:
            <D.22553>:
          }
          <D.22548>:
          <D.22542>:
          <D.22540>:
          <D.22538>:
          D.22498 = ins->sreg1;
          sregs[0] = D.22498;
          D.22499 = ins->sreg2;
          sregs[1] = D.22499;
          D.22500 = ins->sreg3;
          sregs[2] = D.22500;
          D.22501 = ins->opcode;
          D.22502 = (int) D.22501;
          D.22503 = D.22502 + -313;
          D.22504 = ins_sreg_counts[D.22503];
          num_sregs = (int) D.22504;
          srcindex = 0;
          goto <D.22387>;
          <D.22386>:
          {
            struct MonoInst * def;
            int nregs;

            D.22498 = ins->sreg1;
            sregs[0] = D.22498;
            D.22499 = ins->sreg2;
            sregs[1] = D.22499;
            D.22500 = ins->sreg3;
            sregs[2] = D.22500;
            D.22501 = ins->opcode;
            D.22502 = (int) D.22501;
            D.22503 = D.22502 + -313;
            D.22504 = ins_sreg_counts[D.22503];
            nregs = (int) D.22504;
            D.22592 = srcindex + 1;
            D.22593 = (sizetype) D.22592;
            D.22594 = spec + D.22593;
            D.22595 = *D.22594;
            regtype = (int) D.22595;
            sreg = sregs[srcindex];
            if (regtype == 32) goto <D.22596>; else goto <D.22598>;
            <D.22598>:
            if (sreg == -1) goto <D.22596>; else goto <D.22599>;
            <D.22599>:
            D.22543 = (long unsigned int) sreg;
            D.22544 = D.22543 * 8;
            D.22545 = defs + D.22544;
            D.22546 = *D.22545;
            if (D.22546 == 0B) goto <D.22596>; else goto <D.22597>;
            <D.22596>:
            // predicted unlikely by continue predictor.
            goto <D.22382>;
            <D.22597>:
            D.22543 = (long unsigned int) sreg;
            D.22544 = D.22543 * 8;
            D.22545 = defs + D.22544;
            def = *D.22545;
            D.22607 = def->opcode;
            if (D.22607 == 424) goto <D.22606>; else goto <D.22608>;
            <D.22608>:
            D.22607 = def->opcode;
            if (D.22607 == 426) goto <D.22606>; else goto <D.22609>;
            <D.22609>:
            D.22607 = def->opcode;
            if (D.22607 == 427) goto <D.22606>; else goto <D.22605>;
            <D.22606>:
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22612 = D.22611 * 8;
            D.22613 = defs + D.22612;
            D.22614 = *D.22613;
            if (D.22614 == 0B) goto <D.22604>; else goto <D.22615>;
            <D.22615>:
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22616 = D.22611 * 4;
            D.22617 = def_index + D.22616;
            D.22618 = *D.22617;
            D.22543 = (long unsigned int) sreg;
            D.22563 = D.22543 * 4;
            D.22564 = def_index + D.22563;
            D.22565 = *D.22564;
            if (D.22618 < D.22565) goto <D.22604>; else goto <D.22605>;
            <D.22604>:
            D.22610 = def->sreg1;
            D.22622 = (unsigned int) D.22610;
            D.22570 = cfg->vreg_to_inst_len;
            if (D.22622 < D.22570) goto <D.22623>; else goto <D.22620>;
            <D.22623>:
            D.22572 = cfg->vreg_to_inst;
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22612 = D.22611 * 8;
            D.22624 = D.22572 + D.22612;
            D.22625 = *D.22624;
            if (D.22625 != 0B) goto <D.22626>; else goto <D.22620>;
            <D.22626>:
            D.22610 = def->sreg1;
            D.22622 = (unsigned int) D.22610;
            D.22570 = cfg->vreg_to_inst_len;
            if (D.22622 < D.22570) goto <D.22628>; else goto <D.22629>;
            <D.22628>:
            D.22572 = cfg->vreg_to_inst;
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22612 = D.22611 * 8;
            D.22624 = D.22572 + D.22612;
            iftmp.3 = *D.22624;
            goto <D.22630>;
            <D.22629>:
            iftmp.3 = 0B;
            <D.22630>:
            D.22631 = iftmp.3->flags;
            D.22632 = (int) D.22631;
            D.22633 = D.22632 & 20;
            if (D.22633 != 0) goto <D.22634>; else goto <D.22620>;
            <D.22634>:
            iftmp.2 = 1;
            goto <D.22621>;
            <D.22620>:
            iftmp.2 = 0;
            <D.22621>:
            D.22635 = iftmp.2 != 0;
            D.22636 = (long int) D.22635;
            D.22637 = __builtin_expect (D.22636, 0);
            if (D.22637 == 0) goto <D.22638>; else goto <D.22639>;
            <D.22638>:
            D.22610 = def->sreg1;
            D.22622 = (unsigned int) D.22610;
            D.22570 = cfg->vreg_to_inst_len;
            if (D.22622 < D.22570) goto <D.22640>; else goto <D.22602>;
            <D.22640>:
            D.22572 = cfg->vreg_to_inst;
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22612 = D.22611 * 8;
            D.22624 = D.22572 + D.22612;
            D.22625 = *D.22624;
            if (D.22625 != 0B) goto <D.22603>; else goto <D.22602>;
            <D.22602>:
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22612 = D.22611 * 8;
            D.22613 = defs + D.22612;
            D.22614 = *D.22613;
            if (D.22614 == 0B) goto <D.22603>; else goto <D.22641>;
            <D.22641>:
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22616 = D.22611 * 4;
            D.22617 = def_index + D.22616;
            D.22618 = *D.22617;
            if (D.22618 >= last_call_index) goto <D.22603>; else goto <D.22642>;
            <D.22642>:
            D.22607 = def->opcode;
            if (D.22607 == 427) goto <D.22603>; else goto <D.22601>;
            <D.22603>:
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22612 = D.22611 * 8;
            D.22613 = defs + D.22612;
            D.22614 = *D.22613;
            if (D.22614 == 0B) goto <D.22600>; else goto <D.22643>;
            <D.22643>:
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22612 = D.22611 * 8;
            D.22613 = defs + D.22612;
            D.22614 = *D.22613;
            D.22644 = D.22614->next;
            if (D.22644 != def) goto <D.22600>; else goto <D.22601>;
            <D.22600>:
            D.22607 = def->opcode;
            if (D.22607 != 426) goto <D.22645>; else goto <D.22646>;
            <D.22645>:
            {
              int vreg;

              vreg = def->sreg1;
              D.22589 = cfg->verbose_level;
              if (D.22589 > 2) goto <D.22647>; else goto <D.22648>;
              <D.22647>:
              printf ("CCOPY/2: R%d -> R%d\n", sreg, vreg);
              <D.22648>:
              sregs[srcindex] = vreg;
              mono_inst_set_src_registers (ins, &sregs);
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.22382>;
            }
            <D.22646>:
            <D.22601>:
            <D.22639>:
            <D.22605>:
            D.22607 = def->opcode;
            D.22654 = D.22607 + 65174;
            if (D.22654 <= 1) goto <D.22655>; else goto <D.22649>;
            <D.22655>:
            if (srcindex == 0) goto <D.22656>; else goto <D.22650>;
            <D.22656>:
            D.22499 = ins->sreg2;
            if (D.22499 == -1) goto <D.22651>; else goto <D.22650>;
            <D.22650>:
            D.22657 = def->data.op[0].const_val;
            D.22658 = mono_arch_is_inst_imm (D.22657);
            if (D.22658 != 0) goto <D.22651>; else goto <D.22649>;
            <D.22649>:
            D.22607 = def->opcode;
            if (D.22607 == 365) goto <D.22651>; else goto <D.22652>;
            <D.22651>:
            {
              guint32 opcode2;

              if (srcindex == 1) goto <D.22661>; else goto <D.22659>;
              <D.22661>:
              D.22498 = ins->sreg1;
              if (D.22498 != -1) goto <D.22662>; else goto <D.22659>;
              <D.22662>:
              D.22498 = ins->sreg1;
              D.22663 = (long unsigned int) D.22498;
              D.22664 = D.22663 * 8;
              D.22665 = defs + D.22664;
              D.22666 = *D.22665;
              if (D.22666 != 0B) goto <D.22667>; else goto <D.22659>;
              <D.22667>:
              D.22498 = ins->sreg1;
              D.22663 = (long unsigned int) D.22498;
              D.22664 = D.22663 * 8;
              D.22665 = defs + D.22664;
              D.22666 = *D.22665;
              D.22668 = D.22666->opcode;
              if (D.22668 == 362) goto <D.22669>; else goto <D.22659>;
              <D.22669>:
              D.22499 = ins->sreg2;
              D.22670 = (long unsigned int) D.22499;
              D.22671 = D.22670 * 8;
              D.22672 = defs + D.22671;
              D.22673 = *D.22672;
              if (D.22673 != 0B) goto <D.22674>; else goto <D.22659>;
              <D.22674>:
              D.22498 = ins->sreg1;
              D.22663 = (long unsigned int) D.22498;
              D.22664 = D.22663 * 8;
              D.22665 = defs + D.22664;
              D.22666 = *D.22665;
              D.22499 = ins->sreg2;
              D.22670 = (long unsigned int) D.22499;
              D.22671 = D.22670 * 8;
              D.22672 = defs + D.22671;
              D.22673 = *D.22672;
              mono_constant_fold_ins (cfg, ins, D.22666, D.22673, 1);
              goto <D.22660>;
              <D.22659>:
              if (srcindex == 0) goto <D.22677>; else goto <D.22675>;
              <D.22677>:
              D.22499 = ins->sreg2;
              if (D.22499 != -1) goto <D.22678>; else goto <D.22675>;
              <D.22678>:
              D.22499 = ins->sreg2;
              D.22670 = (long unsigned int) D.22499;
              D.22671 = D.22670 * 8;
              D.22672 = defs + D.22671;
              D.22673 = *D.22672;
              if (D.22673 != 0B) goto <D.22679>; else goto <D.22675>;
              <D.22679>:
              {
                int opcode;

                D.22501 = ins->opcode;
                opcode = (int) D.22501;
                D.22498 = ins->sreg1;
                D.22663 = (long unsigned int) D.22498;
                D.22664 = D.22663 * 8;
                D.22665 = defs + D.22664;
                D.22666 = *D.22665;
                D.22499 = ins->sreg2;
                D.22670 = (long unsigned int) D.22499;
                D.22671 = D.22670 * 8;
                D.22672 = defs + D.22671;
                D.22673 = *D.22672;
                mono_constant_fold_ins (cfg, ins, D.22666, D.22673, 1);
                D.22501 = ins->opcode;
                D.22502 = (int) D.22501;
                if (D.22502 != opcode) goto <D.22680>; else goto <D.22681>;
                <D.22680>:
                srcindex = -1;
                // predicted unlikely by continue predictor.
                goto <D.22382>;
                <D.22681>:
              }
              goto <D.22676>;
              <D.22675>:
              if (srcindex == 0) goto <D.22682>; else goto <D.22683>;
              <D.22682>:
              D.22499 = ins->sreg2;
              if (D.22499 == -1) goto <D.22684>; else goto <D.22685>;
              <D.22684>:
              D.22498 = ins->sreg1;
              D.22663 = (long unsigned int) D.22498;
              D.22664 = D.22663 * 8;
              D.22665 = defs + D.22664;
              D.22666 = *D.22665;
              mono_constant_fold_ins (cfg, ins, D.22666, 0B, 1);
              <D.22685>:
              <D.22683>:
              <D.22676>:
              <D.22660>:
              D.22501 = ins->opcode;
              D.22502 = (int) D.22501;
              D.22686 = mono_op_to_op_imm (D.22502);
              opcode2 = (guint32) D.22686;
              if (opcode2 != 4294967295) goto <D.22689>; else goto <D.22687>;
              <D.22689>:
              D.22657 = def->data.op[0].const_val;
              D.22690 = mono_arch_is_inst_imm (D.22657);
              if (D.22690 != 0) goto <D.22691>; else goto <D.22687>;
              <D.22691>:
              if (srcindex == 1) goto <D.22688>; else goto <D.22692>;
              <D.22692>:
              D.22499 = ins->sreg2;
              if (D.22499 == -1) goto <D.22688>; else goto <D.22687>;
              <D.22688>:
              D.22693 = (short unsigned int) opcode2;
              ins->opcode = D.22693;
              if (0 != 0) goto <D.22694>; else goto <D.22695>;
              <D.22694>:
              D.22657 = def->data.op[0].const_val;
              ins->data.op[0].const_val = D.22657;
              D.22696 = def->data.op[1].const_val;
              ins->data.op[1].const_val = D.22696;
              goto <D.22697>;
              <D.22695>:
              D.22657 = def->data.op[0].const_val;
              ins->data.op[1].const_val = D.22657;
              <D.22697>:
              sregs[srcindex] = -1;
              mono_inst_set_src_registers (ins, &sregs);
              if (opcode2 == 343) goto <D.22698>; else goto <D.22700>;
              <D.22700>:
              if (opcode2 == 346) goto <D.22698>; else goto <D.22701>;
              <D.22701>:
              if (opcode2 == 352) goto <D.22698>; else goto <D.22702>;
              <D.22702>:
              if (opcode2 == 349) goto <D.22698>; else goto <D.22699>;
              <D.22698>:
              D.22703 = ins->data.op[1].const_val;
              D.22704 = (const void *) D.22703;
              MEM[(struct MonoCallInst *)ins].fptr = D.22704;
              <D.22699>:
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.22382>;
              <D.22687>:
              D.22501 = ins->opcode;
              D.22502 = (int) D.22501;
              D.22705 = mono_load_membase_to_load_mem (D.22502);
              opcode2 = (guint32) D.22705;
              if (srcindex == 0) goto <D.22706>; else goto <D.22707>;
              <D.22706>:
              if (opcode2 != 4294967295) goto <D.22708>; else goto <D.22709>;
              <D.22708>:
              D.22657 = def->data.op[0].const_val;
              D.22710 = mono_arch_is_inst_imm (D.22657);
              if (D.22710 != 0) goto <D.22711>; else goto <D.22712>;
              <D.22711>:
              D.22693 = (short unsigned int) opcode2;
              ins->opcode = D.22693;
              D.22657 = def->data.op[0].const_val;
              D.22713 = ins->data.op[0].const_val;
              D.22714 = D.22657 + D.22713;
              ins->data.op[1].const_val = D.22714;
              ins->sreg1 = -1;
              <D.22712>:
              <D.22709>:
              <D.22707>:
            }
            goto <D.22653>;
            <D.22652>:
            D.22607 = def->opcode;
            if (D.22607 == 429) goto <D.22715>; else goto <D.22718>;
            <D.22718>:
            D.22607 = def->opcode;
            if (D.22607 == 538) goto <D.22715>; else goto <D.22716>;
            <D.22715>:
            D.22501 = ins->opcode;
            D.22719 = D.22501 + 65148;
            if (D.22719 <= 11) goto <D.22720>; else goto <D.22716>;
            <D.22720>:
            D.22610 = def->sreg1;
            D.22622 = (unsigned int) D.22610;
            D.22723 = cfg->frame_reg;
            if (D.22622 == D.22723) goto <D.22721>; else goto <D.22724>;
            <D.22724>:
            D.22725 = def->next;
            if (D.22725 == ins) goto <D.22726>; else goto <D.22722>;
            <D.22726>:
            D.22727 = def->dreg;
            D.22610 = def->sreg1;
            if (D.22727 != D.22610) goto <D.22721>; else goto <D.22722>;
            <D.22721>:
            D.22610 = def->sreg1;
            ins->sreg1 = D.22610;
            D.22713 = ins->data.op[0].const_val;
            D.22696 = def->data.op[1].const_val;
            D.22728 = D.22713 + D.22696;
            ins->data.op[0].const_val = D.22728;
            <D.22722>:
            goto <D.22717>;
            <D.22716>:
            D.22501 = ins->opcode;
            if (D.22501 == 626) goto <D.22731>; else goto <D.22729>;
            <D.22731>:
            D.22607 = def->opcode;
            if (D.22607 == 625) goto <D.22732>; else goto <D.22729>;
            <D.22732>:
            D.22725 = def->next;
            if (D.22725 == ins) goto <D.22733>; else goto <D.22729>;
            <D.22733>:
            D.22727 = def->dreg;
            D.22610 = def->sreg1;
            if (D.22727 != D.22610) goto <D.22734>; else goto <D.22729>;
            <D.22734>:
            D.22610 = def->sreg1;
            ins->sreg1 = D.22610;
            D.22703 = ins->data.op[1].const_val;
            D.22696 = def->data.op[1].const_val;
            D.22735 = D.22703 - D.22696;
            ins->data.op[1].const_val = D.22735;
            goto <D.22730>;
            <D.22729>:
            D.22501 = ins->opcode;
            if (D.22501 == 625) goto <D.22738>; else goto <D.22736>;
            <D.22738>:
            D.22607 = def->opcode;
            if (D.22607 == 626) goto <D.22739>; else goto <D.22736>;
            <D.22739>:
            D.22725 = def->next;
            if (D.22725 == ins) goto <D.22740>; else goto <D.22736>;
            <D.22740>:
            D.22727 = def->dreg;
            D.22610 = def->sreg1;
            if (D.22727 != D.22610) goto <D.22741>; else goto <D.22736>;
            <D.22741>:
            D.22610 = def->sreg1;
            ins->sreg1 = D.22610;
            D.22703 = ins->data.op[1].const_val;
            D.22696 = def->data.op[1].const_val;
            D.22735 = D.22703 - D.22696;
            ins->data.op[1].const_val = D.22735;
            goto <D.22737>;
            <D.22736>:
            D.22501 = ins->opcode;
            if (D.22501 == 375) goto <D.22746>; else goto <D.22742>;
            <D.22746>:
            D.22607 = def->opcode;
            if (D.22607 == 591) goto <D.22743>; else goto <D.22747>;
            <D.22747>:
            D.22607 = def->opcode;
            if (D.22607 == 580) goto <D.22743>; else goto <D.22748>;
            <D.22748>:
            D.22607 = def->opcode;
            if (D.22607 == 762) goto <D.22743>; else goto <D.22749>;
            <D.22749>:
            D.22607 = def->opcode;
            if (D.22607 == 503) goto <D.22743>; else goto <D.22742>;
            <D.22743>:
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22612 = D.22611 * 8;
            D.22613 = defs + D.22612;
            D.22614 = *D.22613;
            if (D.22614 == 0B) goto <D.22744>; else goto <D.22750>;
            <D.22750>:
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22616 = D.22611 * 4;
            D.22617 = def_index + D.22616;
            D.22618 = *D.22617;
            D.22543 = (long unsigned int) sreg;
            D.22563 = D.22543 * 4;
            D.22564 = def_index + D.22563;
            D.22565 = *D.22564;
            if (D.22618 < D.22565) goto <D.22744>; else goto <D.22742>;
            <D.22744>:
            D.22610 = def->sreg1;
            ins->sreg1 = D.22610;
            goto <D.22745>;
            <D.22742>:
            D.22501 = ins->opcode;
            if (D.22501 == 376) goto <D.22754>; else goto <D.22755>;
            <D.22754>:
            D.22607 = def->opcode;
            if (D.22607 == 590) goto <D.22753>; else goto <D.22756>;
            <D.22756>:
            D.22607 = def->opcode;
            if (D.22607 == 581) goto <D.22753>; else goto <D.22757>;
            <D.22757>:
            D.22607 = def->opcode;
            if (D.22607 == 762) goto <D.22753>; else goto <D.22758>;
            <D.22758>:
            D.22607 = def->opcode;
            if (D.22607 == 495) goto <D.22753>; else goto <D.22752>;
            <D.22753>:
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22612 = D.22611 * 8;
            D.22613 = defs + D.22612;
            D.22614 = *D.22613;
            if (D.22614 == 0B) goto <D.22751>; else goto <D.22759>;
            <D.22759>:
            D.22610 = def->sreg1;
            D.22611 = (long unsigned int) D.22610;
            D.22616 = D.22611 * 4;
            D.22617 = def_index + D.22616;
            D.22618 = *D.22617;
            D.22543 = (long unsigned int) sreg;
            D.22563 = D.22543 * 4;
            D.22564 = def_index + D.22563;
            D.22565 = *D.22564;
            if (D.22618 < D.22565) goto <D.22751>; else goto <D.22752>;
            <D.22751>:
            D.22610 = def->sreg1;
            ins->sreg1 = D.22610;
            <D.22752>:
            <D.22755>:
            <D.22745>:
            <D.22737>:
            <D.22730>:
            <D.22717>:
            <D.22653>:
          }
          <D.22382>:
          srcindex = srcindex + 1;
          <D.22387>:
          if (srcindex < num_sregs) goto <D.22386>; else goto <D.22388>;
          <D.22388>:
          D.22501 = ins->opcode;
          D.22502 = (int) D.22501;
          switch (D.22502) <default: <D.22841>, case 424: <D.22389>, case 429: <D.22392>, case 430: <D.22394>, case 431: <D.22398>, case 538: <D.22396>, case 539: <D.22397>, case 540: <D.22400>, case 625: <D.22393>, case 626: <D.22395>, case 627: <D.22399>, case 628: <D.22406>, case 629: <D.22403>, case 631: <D.22402>, case 800: <D.22390>>
          <D.22389>:
          <D.22390>:
          D.22490 = ins->dreg;
          D.22498 = ins->sreg1;
          if (D.22490 == D.22498) goto <D.22760>; else goto <D.22761>;
          <D.22760>:
          D.22513 = ins->prev;
          if (D.22513 != 0B) goto <D.22762>; else goto <D.22763>;
          <D.22762>:
          D.22513 = ins->prev;
          D.22516 = ins->next;
          D.22513->next = D.22516;
          <D.22763>:
          D.22516 = ins->next;
          if (D.22516 != 0B) goto <D.22764>; else goto <D.22765>;
          <D.22764>:
          D.22516 = ins->next;
          D.22513 = ins->prev;
          D.22516->prev = D.22513;
          <D.22765>:
          D.22519 = bb->code;
          if (D.22519 == ins) goto <D.22766>; else goto <D.22767>;
          <D.22766>:
          D.22516 = ins->next;
          bb->code = D.22516;
          <D.22767>:
          D.22522 = bb->last_ins;
          if (D.22522 == ins) goto <D.22768>; else goto <D.22769>;
          <D.22768>:
          D.22513 = ins->prev;
          bb->last_ins = D.22513;
          <D.22769>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22500 = ins->sreg3;
          ins->sreg2 = D.22500;
          D.22499 = ins->sreg2;
          ins->sreg1 = D.22499;
          D.22501 = ins->opcode;
          D.22502 = (int) D.22501;
          D.22503 = D.22502 + -313;
          D.22510 = D.22503 * 4;
          spec = &ins_info[D.22510];
          <D.22761>:
          goto <D.22391>;
          <D.22392>:
          <D.22393>:
          <D.22394>:
          <D.22395>:
          <D.22396>:
          <D.22397>:
          D.22703 = ins->data.op[1].const_val;
          if (D.22703 == 0) goto <D.22770>; else goto <D.22771>;
          <D.22770>:
          ins->opcode = 424;
          D.22501 = ins->opcode;
          D.22502 = (int) D.22501;
          D.22503 = D.22502 + -313;
          D.22510 = D.22503 * 4;
          spec = &ins_info[D.22510];
          <D.22771>:
          goto <D.22391>;
          <D.22398>:
          <D.22399>:
          <D.22400>:
          D.22703 = ins->data.op[1].const_val;
          if (D.22703 == 0) goto <D.22772>; else goto <D.22773>;
          <D.22772>:
          D.22501 = ins->opcode;
          if (D.22501 == 540) goto <D.22775>; else goto <D.22776>;
          <D.22775>:
          iftmp.4 = 363;
          goto <D.22777>;
          <D.22776>:
          iftmp.4 = 362;
          <D.22777>:
          ins->opcode = iftmp.4;
          ins->data.op[0].const_val = 0;
          ins->sreg1 = -1;
          goto <D.22778>;
          <D.22773>:
          D.22703 = ins->data.op[1].const_val;
          if (D.22703 == 1) goto <D.22779>; else goto <D.22780>;
          <D.22779>:
          ins->opcode = 424;
          goto <D.22781>;
          <D.22780>:
          D.22501 = ins->opcode;
          if (D.22501 == 627) goto <D.22784>; else goto <D.22782>;
          <D.22784>:
          D.22703 = ins->data.op[1].const_val;
          if (D.22703 == -1) goto <D.22785>; else goto <D.22782>;
          <D.22785>:
          ins->opcode = 578;
          goto <D.22783>;
          <D.22782>:
          D.22501 = ins->opcode;
          if (D.22501 == 540) goto <D.22788>; else goto <D.22786>;
          <D.22788>:
          D.22703 = ins->data.op[1].const_val;
          if (D.22703 == -1) goto <D.22789>; else goto <D.22786>;
          <D.22789>:
          ins->opcode = 492;
          goto <D.22787>;
          <D.22786>:
          {
            int power2;

            D.22703 = ins->data.op[1].const_val;
            D.22790 = (unsigned int) D.22703;
            power2 = mono_is_power_of_two (D.22790);
            if (power2 >= 0) goto <D.22791>; else goto <D.22792>;
            <D.22791>:
            D.22501 = ins->opcode;
            if (D.22501 != 431) goto <D.22794>; else goto <D.22795>;
            <D.22794>:
            D.22501 = ins->opcode;
            if (D.22501 == 540) goto <D.22797>; else goto <D.22798>;
            <D.22797>:
            iftmp.6 = 544;
            goto <D.22799>;
            <D.22798>:
            iftmp.6 = 635;
            <D.22799>:
            iftmp.5 = iftmp.6;
            goto <D.22800>;
            <D.22795>:
            iftmp.5 = 439;
            <D.22800>:
            ins->opcode = iftmp.5;
            D.22801 = (long int) power2;
            ins->data.op[1].const_val = D.22801;
            <D.22792>:
          }
          <D.22787>:
          <D.22783>:
          <D.22781>:
          <D.22778>:
          D.22501 = ins->opcode;
          D.22502 = (int) D.22501;
          D.22503 = D.22502 + -313;
          D.22510 = D.22503 * 4;
          spec = &ins_info[D.22510];
          goto <D.22391>;
          <D.22402>:
          <D.22403>:
          {
            int c;
            int power2;

            D.22703 = ins->data.op[1].const_val;
            c = (int) D.22703;
            c.7 = (unsigned int) c;
            power2 = mono_is_power_of_two (c.7);
            if (power2 >= 0) goto <D.22803>; else goto <D.22804>;
            <D.22803>:
            D.22501 = ins->opcode;
            if (D.22501 == 631) goto <D.22805>; else goto <D.22806>;
            <D.22805>:
            ins->opcode = 632;
            ins->sreg2 = -1;
            D.22807 = 1 << power2;
            D.22808 = D.22807 + -1;
            D.22809 = (long int) D.22808;
            ins->data.op[1].const_val = D.22809;
            goto <D.22810>;
            <D.22806>:
            D.22501 = ins->opcode;
            if (D.22501 == 629) goto <D.22811>; else goto <D.22812>;
            <D.22811>:
            ins->opcode = 637;
            ins->sreg2 = -1;
            D.22813 = (long int) power2;
            ins->data.op[1].const_val = D.22813;
            <D.22812>:
            <D.22810>:
            <D.22804>:
            D.22501 = ins->opcode;
            D.22502 = (int) D.22501;
            D.22503 = D.22502 + -313;
            D.22510 = D.22503 * 4;
            spec = &ins_info[D.22510];
            goto <D.22391>;
          }
          <D.22406>:
          {
            int c;
            int power2;
            struct MonoInst * tmp1;
            struct MonoInst * tmp2;
            struct MonoInst * tmp3;
            struct MonoInst * tmp4;

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

              D.22817 = mono_alloc_ireg (cfg);
              r1 = (int) D.22817;
              D.22486 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.22486, 80);
              tmp1->data.op[1].const_val = 0;
              D.22818 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.22818;
              tmp1->prev = 0B;
              D.22819 = tmp1->prev;
              tmp1->next = D.22819;
              tmp1->opcode = 637;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.22820 = tmp1->sreg3;
              tmp1->sreg2 = D.22820;
              D.22821 = tmp1->sreg2;
              tmp1->sreg1 = D.22821;
              D.22822 = cfg->ip;
              tmp1->cil_code = D.22822;
              tmp1->dreg = r1;
              D.22498 = ins->sreg1;
              tmp1->sreg1 = D.22498;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.22486 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.22486, 80);
              tmp2->data.op[1].const_val = 0;
              D.22823 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.22823;
              tmp2->prev = 0B;
              D.22824 = tmp2->prev;
              tmp2->next = D.22824;
              tmp2->opcode = 565;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.22825 = tmp2->sreg3;
              tmp2->sreg2 = D.22825;
              D.22826 = tmp2->sreg2;
              tmp2->sreg1 = D.22826;
              D.22822 = cfg->ip;
              tmp2->cil_code = D.22822;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.22498 = ins->sreg1;
              tmp2->sreg2 = D.22498;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.22486 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.22486, 80);
              tmp3->data.op[1].const_val = 0;
              D.22827 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.22827;
              tmp3->prev = 0B;
              D.22828 = tmp3->prev;
              tmp3->next = D.22828;
              tmp3->opcode = 636;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.22829 = tmp3->sreg3;
              tmp3->sreg2 = D.22829;
              D.22830 = tmp3->sreg2;
              tmp3->sreg1 = D.22830;
              D.22822 = cfg->ip;
              tmp3->cil_code = D.22822;
              D.22490 = ins->dreg;
              tmp3->dreg = D.22490;
              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.22500 = ins->sreg3;
              ins->sreg2 = D.22500;
              D.22499 = ins->sreg2;
              ins->sreg1 = D.22499;
              goto restart;
            }
            <D.22816>:
            if (power2 > 0) goto <D.22831>; else goto <D.22832>;
            <D.22831>:
            {
              int r1;

              D.22833 = mono_alloc_ireg (cfg);
              r1 = (int) D.22833;
              D.22486 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.22486, 80);
              tmp1->data.op[1].const_val = 0;
              D.22818 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.22818;
              tmp1->prev = 0B;
              D.22819 = tmp1->prev;
              tmp1->next = D.22819;
              tmp1->opcode = 636;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.22820 = tmp1->sreg3;
              tmp1->sreg2 = D.22820;
              D.22821 = tmp1->sreg2;
              tmp1->sreg1 = D.22821;
              D.22822 = cfg->ip;
              tmp1->cil_code = D.22822;
              tmp1->dreg = r1;
              D.22498 = ins->sreg1;
              tmp1->sreg1 = D.22498;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.22486 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.22486, 80);
              tmp2->data.op[1].const_val = 0;
              D.22823 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.22823;
              tmp2->prev = 0B;
              D.22824 = tmp2->prev;
              tmp2->next = D.22824;
              tmp2->opcode = 637;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.22825 = tmp2->sreg3;
              tmp2->sreg2 = D.22825;
              D.22826 = tmp2->sreg2;
              tmp2->sreg1 = D.22826;
              D.22822 = cfg->ip;
              tmp2->cil_code = D.22822;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.22834 = 32 - power2;
              D.22835 = (long int) D.22834;
              tmp2->data.op[1].const_val = D.22835;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.22486 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.22486, 80);
              tmp3->data.op[1].const_val = 0;
              D.22827 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.22827;
              tmp3->prev = 0B;
              D.22828 = tmp3->prev;
              tmp3->next = D.22828;
              tmp3->opcode = 565;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.22829 = tmp3->sreg3;
              tmp3->sreg2 = D.22829;
              D.22830 = tmp3->sreg2;
              tmp3->sreg1 = D.22830;
              D.22822 = cfg->ip;
              tmp3->cil_code = D.22822;
              tmp3->dreg = r1;
              tmp3->sreg1 = r1;
              D.22498 = ins->sreg1;
              tmp3->sreg2 = D.22498;
              mono_bblock_insert_after_ins (bb, tmp2, tmp3);
              D.22486 = cfg->mempool;
              tmp4 = mono_mempool_alloc (D.22486, 80);
              tmp4->data.op[1].const_val = 0;
              D.22836 = tmp4->data.op[1].const_val;
              tmp4->data.op[0].const_val = D.22836;
              tmp4->prev = 0B;
              D.22837 = tmp4->prev;
              tmp4->next = D.22837;
              tmp4->opcode = 636;
              tmp4->flags = 0;
              tmp4->type = 0;
              tmp4->dreg = -1;
              tmp4->sreg3 = -1;
              D.22838 = tmp4->sreg3;
              tmp4->sreg2 = D.22838;
              D.22839 = tmp4->sreg2;
              tmp4->sreg1 = D.22839;
              D.22822 = cfg->ip;
              tmp4->cil_code = D.22822;
              D.22490 = ins->dreg;
              tmp4->dreg = D.22490;
              tmp4->sreg1 = r1;
              D.22840 = (long int) power2;
              tmp4->data.op[1].const_val = D.22840;
              mono_bblock_insert_after_ins (bb, tmp3, tmp4);
              ins->opcode = 316;
              ins->dreg = -1;
              ins->sreg3 = -1;
              D.22500 = ins->sreg3;
              ins->sreg2 = D.22500;
              D.22499 = ins->sreg2;
              ins->sreg1 = D.22499;
              goto restart;
            }
            <D.22832>:
            goto <D.22391>;
          }
          <D.22841>:
          <D.22391>:
          D.22842 = *spec;
          if (D.22842 != 32) goto <D.22843>; else goto <D.22844>;
          <D.22843>:
          {
            struct MonoInst * def;

            D.22490 = ins->dreg;
            D.22495 = (long unsigned int) D.22490;
            D.22496 = D.22495 * 8;
            D.22497 = defs + D.22496;
            def = *D.22497;
            if (def != 0B) goto <D.22845>; else goto <D.22846>;
            <D.22845>:
            D.22847 = def->opcode;
            if (D.22847 == 429) goto <D.22848>; else goto <D.22849>;
            <D.22848>:
            D.22850 = def->sreg1;
            D.22851 = (unsigned int) D.22850;
            D.22723 = cfg->frame_reg;
            if (D.22851 == D.22723) goto <D.22852>; else goto <D.22853>;
            <D.22852>:
            D.22501 = ins->opcode;
            D.22536 = D.22501 + 65162;
            if (D.22536 <= 13) goto <D.22854>; else goto <D.22855>;
            <D.22854>:
            D.22850 = def->sreg1;
            ins->dreg = D.22850;
            D.22713 = ins->data.op[0].const_val;
            D.22856 = def->data.op[1].const_val;
            D.22857 = D.22713 + D.22856;
            ins->data.op[0].const_val = D.22857;
            <D.22855>:
            <D.22853>:
            <D.22849>:
            <D.22846>:
          }
          <D.22844>:
          D.22842 = *spec;
          if (D.22842 != 32) goto <D.22858>; else goto <D.22859>;
          <D.22858>:
          D.22501 = ins->opcode;
          D.22536 = D.22501 + 65162;
          if (D.22536 > 13) goto <D.22860>; else goto <D.22861>;
          <D.22860>:
          D.22490 = ins->dreg;
          D.22865 = (unsigned int) D.22490;
          D.22570 = cfg->vreg_to_inst_len;
          if (D.22865 < D.22570) goto <D.22866>; else goto <D.22863>;
          <D.22866>:
          D.22572 = cfg->vreg_to_inst;
          D.22490 = ins->dreg;
          D.22495 = (long unsigned int) D.22490;
          D.22496 = D.22495 * 8;
          D.22867 = D.22572 + D.22496;
          D.22868 = *D.22867;
          if (D.22868 != 0B) goto <D.22869>; else goto <D.22863>;
          <D.22869>:
          D.22490 = ins->dreg;
          D.22865 = (unsigned int) D.22490;
          D.22570 = cfg->vreg_to_inst_len;
          if (D.22865 < D.22570) goto <D.22871>; else goto <D.22872>;
          <D.22871>:
          D.22572 = cfg->vreg_to_inst;
          D.22490 = ins->dreg;
          D.22495 = (long unsigned int) D.22490;
          D.22496 = D.22495 * 8;
          D.22867 = D.22572 + D.22496;
          iftmp.10 = *D.22867;
          goto <D.22873>;
          <D.22872>:
          iftmp.10 = 0B;
          <D.22873>:
          D.22874 = iftmp.10->flags;
          D.22875 = (int) D.22874;
          D.22876 = D.22875 & 20;
          if (D.22876 != 0) goto <D.22877>; else goto <D.22863>;
          <D.22877>:
          iftmp.9 = 1;
          goto <D.22864>;
          <D.22863>:
          iftmp.9 = 0;
          <D.22864>:
          D.22878 = iftmp.9 != 0;
          D.22879 = (long int) D.22878;
          D.22880 = __builtin_expect (D.22879, 0);
          if (D.22880 == 0) goto <D.22881>; else goto <D.22882>;
          <D.22881>:
          D.22490 = ins->dreg;
          D.22495 = (long unsigned int) D.22490;
          D.22496 = D.22495 * 8;
          D.22497 = defs + D.22496;
          *D.22497 = ins;
          D.22490 = ins->dreg;
          D.22495 = (long unsigned int) D.22490;
          D.22883 = D.22495 * 4;
          D.22884 = def_index + D.22883;
          *D.22884 = ins_index;
          <D.22882>:
          <D.22861>:
          <D.22859>:
          D.22501 = ins->opcode;
          D.22887 = D.22501 + 65193;
          if (D.22887 <= 2) goto <D.22885>; else goto <D.22888>;
          <D.22888>:
          D.22501 = ins->opcode;
          D.22889 = D.22501 + 65187;
          if (D.22889 <= 2) goto <D.22885>; else goto <D.22890>;
          <D.22890>:
          D.22501 = ins->opcode;
          D.22891 = D.22501 + 65184;
          if (D.22891 <= 2) goto <D.22885>; else goto <D.22892>;
          <D.22892>:
          D.22501 = ins->opcode;
          D.22893 = D.22501 + 65181;
          if (D.22893 <= 2) goto <D.22885>; else goto <D.22894>;
          <D.22894>:
          D.22501 = ins->opcode;
          D.22895 = D.22501 + 65190;
          if (D.22895 <= 2) goto <D.22885>; else goto <D.22896>;
          <D.22896>:
          D.22501 = ins->opcode;
          D.22897 = D.22501 + 65178;
          if (D.22897 <= 2) goto <D.22885>; else goto <D.22898>;
          <D.22898>:
          D.22501 = ins->opcode;
          if (D.22501 == 444) goto <D.22885>; else goto <D.22886>;
          <D.22885>:
          last_call_index = ins_index;
          <D.22886>:
          ins_index = ins_index + 1;
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    <D.22376>:
    ins = ins->next;
    <D.22417>:
    if (ins != 0B) goto <D.22416>; else goto <D.22418>;
    <D.22418>:
  }
  bb = bb->next_bb;
  <D.22420>:
  if (bb != 0B) goto <D.22419>; else goto <D.22421>;
  <D.22421>:
}


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

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


mono_local_deadce (struct MonoCompile * cfg)
{
  struct MonoMemPool * D.22904;
  unsigned int D.22905;
  unsigned int D.22906;
  short unsigned int D.22907;
  int D.22908;
  int D.22909;
  int D.22910;
  char D.22911;
  int D.22914;
  long unsigned int D.22915;
  long unsigned int D.22916;
  long unsigned int D.22917;
  int D.22918;
  long unsigned int D.22919;
  long unsigned int D.22920;
  long unsigned int D.22921;
  long unsigned int D.22922;
  long unsigned int D.22923;
  long unsigned int D.22924;
  int D.22925;
  int D.22926;
  int D.22927;
  signed char D.22928;
  int D.22929;
  long unsigned int D.22930;
  long unsigned int D.22931;
  long unsigned int D.22932;
  int D.22933;
  long unsigned int D.22934;
  long unsigned int D.22935;
  long unsigned int D.22936;
  struct MonoInst * iftmp.11;
  struct MonoInst * D.22943;
  struct MonoInst * D.22946;
  struct MonoInst * D.22949;
  struct MonoInst * D.22952;
  _Bool D.22955;
  long int D.22956;
  long int D.22957;
  struct MonoInst * D.22965;
  short unsigned int D.22967;
  int D.22968;
  int D.22969;
  int D.22970;
  unsigned int D.22973;
  unsigned int D.22974;
  struct MonoInst * * D.22976;
  long unsigned int D.22977;
  long unsigned int D.22978;
  struct MonoInst * * D.22979;
  struct MonoInst * D.22980;
  char D.22981;
  int D.22984;
  long unsigned int D.22987;
  long unsigned int D.22988;
  int D.22989;
  long unsigned int D.22990;
  long unsigned int D.22991;
  short unsigned int D.22994;
  char D.22997;
  int D.22998;
  int D.23001;
  unsigned int D.23004;
  int D.23007;
  int D.23016;
  long unsigned int D.23022;
  long unsigned int D.23023;
  long unsigned int D.23024;
  long unsigned int D.23025;
  unsigned int D.23028;
  long unsigned int D.23030;
  struct MonoInst * * D.23031;
  struct MonoInst * D.23032;
  long unsigned int D.23034;
  long unsigned int D.23035;
  int iftmp.12;
  struct MonoInst * iftmp.13;
  unsigned char D.23046;
  int D.23047;
  int D.23048;
  _Bool D.23050;
  long int D.23051;
  long int D.23052;
  long unsigned int D.23054;
  long unsigned int D.23055;
  long unsigned int D.23056;
  short unsigned int D.23088;
  int D.23091;
  int D.23092;
  long unsigned int D.23103;
  long unsigned int D.23104;
  long unsigned int D.23105;
  long unsigned int D.23108;
  long unsigned int D.23109;
  long unsigned int D.23110;
  int D.23111;
  long unsigned int D.23112;
  long unsigned int D.23113;
  long unsigned int D.23114;
  int D.23115;
  long unsigned int D.23116;
  long unsigned int D.23117;
  short unsigned int D.23118;
  long unsigned int D.23121;
  long unsigned int D.23122;
  long unsigned int D.23123;
  short unsigned int D.23126;
  short unsigned int D.23128;
  short unsigned int D.23130;
  short unsigned int D.23132;
  short unsigned int D.23134;
  short unsigned int D.23136;
  struct GSList * D.23138;
  void * D.23141;
  long int D.23142;
  unsigned int D.23143;
  long unsigned int D.23144;
  long unsigned int D.23145;
  int reg.14;
  int D.23147;
  long unsigned int D.23148;
  long unsigned int D.23149;
  struct GSList * D.23150;
  unsigned int D.23153;
  long unsigned int D.23154;
  long unsigned int D.23155;
  int reg.15;
  int D.23157;
  long unsigned int D.23158;
  long unsigned int D.23159;
  struct MonoInst * iftmp.16;
  struct MonoBasicBlock * bb;
  struct MonoInst * ins;
  struct MonoInst * prev;
  struct MonoBitSet * used;
  struct MonoBitSet * defined;

  D.22904 = cfg->mempool;
  D.22905 = cfg->next_vreg;
  D.22906 = D.22905 + 1;
  used = mono_bitset_mp_new_noinit (D.22904, D.22906);
  D.22904 = cfg->mempool;
  D.22905 = cfg->next_vreg;
  D.22906 = D.22905 + 1;
  defined = mono_bitset_mp_new_noinit (D.22904, D.22906);
  bb = cfg->bb_entry;
  goto <D.22482>;
  <D.22481>:
  ins = bb->code;
  goto <D.22450>;
  <D.22449>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.22907 = ins->opcode;
        D.22908 = (int) D.22907;
        D.22909 = D.22908 + -313;
        D.22910 = D.22909 * 4;
        spec = &ins_info[D.22910];
        D.22911 = *spec;
        if (D.22911 != 32) goto <D.22912>; else goto <D.22913>;
        <D.22912>:
        D.22914 = ins->dreg;
        D.22915 = (long unsigned int) D.22914;
        D.22916 = D.22915 / 64;
        D.22917 = used->data[D.22916];
        D.22914 = ins->dreg;
        D.22918 = D.22914 & 63;
        D.22919 = 1 << D.22918;
        D.22920 = ~D.22919;
        D.22921 = D.22917 & D.22920;
        used->data[D.22916] = D.22921;
        D.22914 = ins->dreg;
        D.22915 = (long unsigned int) D.22914;
        D.22922 = D.22915 / 64;
        D.22923 = defined->data[D.22922];
        D.22914 = ins->dreg;
        D.22918 = D.22914 & 63;
        D.22919 = 1 << D.22918;
        D.22920 = ~D.22919;
        D.22924 = D.22923 & D.22920;
        defined->data[D.22922] = D.22924;
        <D.22913>:
        D.22925 = ins->sreg1;
        sregs[0] = D.22925;
        D.22926 = ins->sreg2;
        sregs[1] = D.22926;
        D.22927 = ins->sreg3;
        sregs[2] = D.22927;
        D.22907 = ins->opcode;
        D.22908 = (int) D.22907;
        D.22909 = D.22908 + -313;
        D.22928 = ins_sreg_counts[D.22909];
        num_sregs = (int) D.22928;
        i = 0;
        goto <D.22447>;
        <D.22446>:
        D.22929 = sregs[i];
        D.22930 = (long unsigned int) D.22929;
        D.22931 = D.22930 / 64;
        D.22932 = used->data[D.22931];
        D.22929 = sregs[i];
        D.22933 = D.22929 & 63;
        D.22934 = 1 << D.22933;
        D.22935 = ~D.22934;
        D.22936 = D.22932 & D.22935;
        used->data[D.22931] = D.22936;
        i = i + 1;
        <D.22447>:
        if (i < num_sregs) goto <D.22446>; else goto <D.22448>;
        <D.22448>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  ins = ins->next;
  <D.22450>:
  if (ins != 0B) goto <D.22449>; else goto <D.22451>;
  <D.22451>:
  ins = bb->last_ins;
  if (ins != 0B) goto <D.22938>; else goto <D.22939>;
  <D.22938>:
  iftmp.11 = ins->prev;
  goto <D.22940>;
  <D.22939>:
  iftmp.11 = 0B;
  <D.22940>:
  prev = iftmp.11;
  goto <D.22479>;
  <D.22478>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.22907 = ins->opcode;
        D.22908 = (int) D.22907;
        D.22909 = D.22908 + -313;
        D.22910 = D.22909 * 4;
        spec = &ins_info[D.22910];
        D.22907 = ins->opcode;
        if (D.22907 == 316) goto <D.22941>; else goto <D.22942>;
        <D.22941>:
        D.22943 = ins->prev;
        if (D.22943 != 0B) goto <D.22944>; else goto <D.22945>;
        <D.22944>:
        D.22943 = ins->prev;
        D.22946 = ins->next;
        D.22943->next = D.22946;
        <D.22945>:
        D.22946 = ins->next;
        if (D.22946 != 0B) goto <D.22947>; else goto <D.22948>;
        <D.22947>:
        D.22946 = ins->next;
        D.22943 = ins->prev;
        D.22946->prev = D.22943;
        <D.22948>:
        D.22949 = bb->code;
        if (D.22949 == ins) goto <D.22950>; else goto <D.22951>;
        <D.22950>:
        D.22946 = ins->next;
        bb->code = D.22946;
        <D.22951>:
        D.22952 = bb->last_ins;
        if (D.22952 == ins) goto <D.22953>; else goto <D.22954>;
        <D.22953>:
        D.22943 = ins->prev;
        bb->last_ins = D.22943;
        <D.22954>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.22927 = ins->sreg3;
        ins->sreg2 = D.22927;
        D.22926 = ins->sreg2;
        ins->sreg1 = D.22926;
        // predicted unlikely by continue predictor.
        goto <D.22456>;
        <D.22942>:
        D.22907 = ins->opcode;
        D.22955 = D.22907 <= 313;
        D.22956 = (long int) D.22955;
        D.22957 = __builtin_expect (D.22956, 0);
        if (D.22957 != 0) goto <D.22958>; else goto <D.22959>;
        <D.22958>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 521, "ins->opcode > MONO_CEE_LAST");
        <D.22959>:
        D.22907 = ins->opcode;
        if (D.22907 == 424) goto <D.22960>; else goto <D.22962>;
        <D.22962>:
        D.22907 = ins->opcode;
        if (D.22907 == 427) goto <D.22960>; else goto <D.22961>;
        <D.22960>:
        D.22943 = ins->prev;
        if (D.22943 != 0B) goto <D.22963>; else goto <D.22964>;
        <D.22963>:
        {
          struct MonoInst * def;
          const char * spec2;

          def = ins->prev;
          goto <D.22460>;
          <D.22459>:
          def = def->prev;
          <D.22460>:
          D.22965 = def->prev;
          if (D.22965 != 0B) goto <D.22966>; else goto <D.22461>;
          <D.22966>:
          D.22967 = def->opcode;
          if (D.22967 == 316) goto <D.22459>; else goto <D.22461>;
          <D.22461>:
          D.22967 = def->opcode;
          D.22968 = (int) D.22967;
          D.22969 = D.22968 + -313;
          D.22970 = D.22969 * 4;
          spec2 = &ins_info[D.22970];
          D.22925 = ins->sreg1;
          D.22973 = (unsigned int) D.22925;
          D.22974 = cfg->vreg_to_inst_len;
          if (D.22973 >= D.22974) goto <D.22971>; else goto <D.22975>;
          <D.22975>:
          D.22976 = cfg->vreg_to_inst;
          D.22925 = ins->sreg1;
          D.22977 = (long unsigned int) D.22925;
          D.22978 = D.22977 * 8;
          D.22979 = D.22976 + D.22978;
          D.22980 = *D.22979;
          if (D.22980 == 0B) goto <D.22971>; else goto <D.22972>;
          <D.22971>:
          D.22981 = *spec2;
          if (D.22981 != 32) goto <D.22982>; else goto <D.22983>;
          <D.22982>:
          D.22984 = def->dreg;
          D.22925 = ins->sreg1;
          if (D.22984 == D.22925) goto <D.22985>; else goto <D.22986>;
          <D.22985>:
          D.22925 = ins->sreg1;
          D.22977 = (long unsigned int) D.22925;
          D.22987 = D.22977 / 64;
          D.22988 = used->data[D.22987];
          D.22925 = ins->sreg1;
          D.22989 = D.22925 & 63;
          D.22990 = D.22988 >> D.22989;
          D.22991 = D.22990 & 1;
          if (D.22991 == 0) goto <D.22992>; else goto <D.22993>;
          <D.22992>:
          D.22967 = def->opcode;
          D.22994 = D.22967 + 65162;
          if (D.22994 > 13) goto <D.22995>; else goto <D.22996>;
          <D.22995>:
          D.22925 = ins->sreg1;
          D.22997 = *spec;
          D.22998 = reg_is_softreg (D.22925, D.22997);
          if (D.22998 != 0) goto <D.22999>; else goto <D.23000>;
          <D.22999>:
          D.23001 = mono_is_simd_accessor (def);
          if (D.23001 == 0) goto <D.23002>; else goto <D.23003>;
          <D.23002>:
          D.23004 = cfg->verbose_level;
          if (D.23004 > 2) goto <D.23005>; else goto <D.23006>;
          <D.23005>:
          D.23007 = bb->block_num;
          printf ("\tReverse copyprop in BB%d on ", D.23007);
          mono_print_ins (ins);
          <D.23006>:
          D.22914 = ins->dreg;
          def->dreg = D.22914;
          D.22943 = ins->prev;
          if (D.22943 != 0B) goto <D.23008>; else goto <D.23009>;
          <D.23008>:
          D.22943 = ins->prev;
          D.22946 = ins->next;
          D.22943->next = D.22946;
          <D.23009>:
          D.22946 = ins->next;
          if (D.22946 != 0B) goto <D.23010>; else goto <D.23011>;
          <D.23010>:
          D.22946 = ins->next;
          D.22943 = ins->prev;
          D.22946->prev = D.22943;
          <D.23011>:
          D.22949 = bb->code;
          if (D.22949 == ins) goto <D.23012>; else goto <D.23013>;
          <D.23012>:
          D.22946 = ins->next;
          bb->code = D.22946;
          <D.23013>:
          D.22952 = bb->last_ins;
          if (D.22952 == ins) goto <D.23014>; else goto <D.23015>;
          <D.23014>:
          D.22943 = ins->prev;
          bb->last_ins = D.22943;
          <D.23015>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22927 = ins->sreg3;
          ins->sreg2 = D.22927;
          D.22926 = ins->sreg2;
          ins->sreg1 = D.22926;
          D.22907 = ins->opcode;
          D.22908 = (int) D.22907;
          D.22909 = D.22908 + -313;
          D.22910 = D.22909 * 4;
          spec = &ins_info[D.22910];
          <D.23003>:
          <D.23000>:
          <D.22996>:
          <D.22993>:
          <D.22986>:
          <D.22983>:
          <D.22972>:
        }
        <D.22964>:
        <D.22961>:
        D.22914 = ins->dreg;
        D.22997 = *spec;
        D.23016 = reg_is_softreg_no_fpstack (D.22914, D.22997);
        if (D.23016 != 0) goto <D.23017>; else goto <D.23018>;
        <D.23017>:
        D.22914 = ins->dreg;
        D.22915 = (long unsigned int) D.22914;
        D.23022 = D.22915 / 64;
        D.23023 = used->data[D.23022];
        D.22914 = ins->dreg;
        D.22918 = D.22914 & 63;
        D.23024 = D.23023 >> D.22918;
        D.23025 = D.23024 & 1;
        if (D.23025 == 0) goto <D.23026>; else goto <D.23027>;
        <D.23026>:
        D.22914 = ins->dreg;
        D.23028 = (unsigned int) D.22914;
        D.22974 = cfg->vreg_to_inst_len;
        if (D.23028 >= D.22974) goto <D.23021>; else goto <D.23029>;
        <D.23029>:
        D.22976 = cfg->vreg_to_inst;
        D.22914 = ins->dreg;
        D.22915 = (long unsigned int) D.22914;
        D.23030 = D.22915 * 8;
        D.23031 = D.22976 + D.23030;
        D.23032 = *D.23031;
        if (D.23032 == 0B) goto <D.23021>; else goto <D.23033>;
        <D.23033>:
        D.23034 = BIT_FIELD_REF <*bb, 64, 1472>;
        D.23035 = D.23034 & 524288;
        if (D.23035 == 0) goto <D.23036>; else goto <D.23020>;
        <D.23036>:
        D.22914 = ins->dreg;
        D.23028 = (unsigned int) D.22914;
        D.22974 = cfg->vreg_to_inst_len;
        if (D.23028 < D.22974) goto <D.23040>; else goto <D.23038>;
        <D.23040>:
        D.22976 = cfg->vreg_to_inst;
        D.22914 = ins->dreg;
        D.22915 = (long unsigned int) D.22914;
        D.23030 = D.22915 * 8;
        D.23031 = D.22976 + D.23030;
        D.23032 = *D.23031;
        if (D.23032 != 0B) goto <D.23041>; else goto <D.23038>;
        <D.23041>:
        D.22914 = ins->dreg;
        D.23028 = (unsigned int) D.22914;
        D.22974 = cfg->vreg_to_inst_len;
        if (D.23028 < D.22974) goto <D.23043>; else goto <D.23044>;
        <D.23043>:
        D.22976 = cfg->vreg_to_inst;
        D.22914 = ins->dreg;
        D.22915 = (long unsigned int) D.22914;
        D.23030 = D.22915 * 8;
        D.23031 = D.22976 + D.23030;
        iftmp.13 = *D.23031;
        goto <D.23045>;
        <D.23044>:
        iftmp.13 = 0B;
        <D.23045>:
        D.23046 = iftmp.13->flags;
        D.23047 = (int) D.23046;
        D.23048 = D.23047 & 20;
        if (D.23048 != 0) goto <D.23049>; else goto <D.23038>;
        <D.23049>:
        iftmp.12 = 1;
        goto <D.23039>;
        <D.23038>:
        iftmp.12 = 0;
        <D.23039>:
        D.23050 = iftmp.12 != 0;
        D.23051 = (long int) D.23050;
        D.23052 = __builtin_expect (D.23051, 0);
        if (D.23052 == 0) goto <D.23053>; else goto <D.23020>;
        <D.23053>:
        D.22914 = ins->dreg;
        D.22915 = (long unsigned int) D.22914;
        D.23022 = D.22915 / 64;
        D.23054 = defined->data[D.23022];
        D.22914 = ins->dreg;
        D.22918 = D.22914 & 63;
        D.23055 = D.23054 >> D.22918;
        D.23056 = D.23055 & 1;
        if (D.23056 != 0) goto <D.23021>; else goto <D.23020>;
        <D.23021>:
        D.22907 = ins->opcode;
        if (D.22907 == 424) goto <D.23019>; else goto <D.23057>;
        <D.23057>:
        D.22907 = ins->opcode;
        if (D.22907 == 426) goto <D.23019>; else goto <D.23058>;
        <D.23058>:
        D.22907 = ins->opcode;
        if (D.22907 == 427) goto <D.23019>; else goto <D.23059>;
        <D.23059>:
        D.22907 = ins->opcode;
        if (D.22907 == 362) goto <D.23019>; else goto <D.23060>;
        <D.23060>:
        D.22907 = ins->opcode;
        if (D.22907 == 363) goto <D.23019>; else goto <D.23061>;
        <D.23061>:
        D.22907 = ins->opcode;
        if (D.22907 == 428) goto <D.23019>; else goto <D.23062>;
        <D.23062>:
        D.22907 = ins->opcode;
        if (D.22907 == 429) goto <D.23019>; else goto <D.23063>;
        <D.23063>:
        D.22907 = ins->opcode;
        if (D.22907 == 365) goto <D.23019>; else goto <D.23064>;
        <D.23064>:
        D.22907 = ins->opcode;
        if (D.22907 == 538) goto <D.23019>; else goto <D.23065>;
        <D.23065>:
        D.22907 = ins->opcode;
        if (D.22907 == 626) goto <D.23019>; else goto <D.23066>;
        <D.23066>:
        D.22907 = ins->opcode;
        if (D.22907 == 625) goto <D.23019>; else goto <D.23067>;
        <D.23067>:
        D.22907 = ins->opcode;
        if (D.22907 == 492) goto <D.23019>; else goto <D.23068>;
        <D.23068>:
        D.22907 = ins->opcode;
        if (D.22907 == 566) goto <D.23019>; else goto <D.23069>;
        <D.23069>:
        D.22907 = ins->opcode;
        if (D.22907 == 817) goto <D.23019>; else goto <D.23070>;
        <D.23070>:
        D.22907 = ins->opcode;
        if (D.22907 == 635) goto <D.23019>; else goto <D.23071>;
        <D.23071>:
        D.22907 = ins->opcode;
        if (D.22907 == 636) goto <D.23019>; else goto <D.23072>;
        <D.23072>:
        D.22907 = ins->opcode;
        if (D.22907 == 637) goto <D.23019>; else goto <D.23073>;
        <D.23073>:
        D.22907 = ins->opcode;
        if (D.22907 == 632) goto <D.23019>; else goto <D.23074>;
        <D.23074>:
        D.22907 = ins->opcode;
        if (D.22907 == 591) goto <D.23019>; else goto <D.23075>;
        <D.23075>:
        D.22907 = ins->opcode;
        if (D.22907 == 580) goto <D.23019>; else goto <D.23076>;
        <D.23076>:
        D.22907 = ins->opcode;
        if (D.22907 == 762) goto <D.23019>; else goto <D.23077>;
        <D.23077>:
        D.22907 = ins->opcode;
        if (D.22907 == 503) goto <D.23019>; else goto <D.23078>;
        <D.23078>:
        D.22907 = ins->opcode;
        if (D.22907 == 590) goto <D.23019>; else goto <D.23079>;
        <D.23079>:
        D.22907 = ins->opcode;
        if (D.22907 == 581) goto <D.23019>; else goto <D.23080>;
        <D.23080>:
        D.22907 = ins->opcode;
        if (D.22907 == 495) goto <D.23019>; else goto <D.23081>;
        <D.23081>:
        D.22907 = ins->opcode;
        if (D.22907 == 314) goto <D.23019>; else goto <D.23082>;
        <D.23082>:
        D.22907 = ins->opcode;
        if (D.22907 == 319) goto <D.23019>; else goto <D.23083>;
        <D.23083>:
        D.22907 = ins->opcode;
        if (D.22907 == 316) goto <D.23019>; else goto <D.23084>;
        <D.23084>:
        D.22907 = ins->opcode;
        if (D.22907 == 765) goto <D.23019>; else goto <D.23085>;
        <D.23085>:
        D.22907 = ins->opcode;
        if (D.22907 == 799) goto <D.23019>; else goto <D.23020>;
        <D.23019>:
        D.22943 = ins->prev;
        if (D.22943 != 0B) goto <D.23086>; else goto <D.23087>;
        <D.23086>:
        D.22943 = ins->prev;
        D.23088 = D.22943->opcode;
        if (D.23088 == 327) goto <D.23089>; else goto <D.23090>;
        <D.23089>:
        {
          struct MonoInst * prev;

          prev = ins->prev;
          prev->opcode = 316;
          prev->dreg = -1;
          prev->sreg3 = -1;
          D.23091 = prev->sreg3;
          prev->sreg2 = D.23091;
          D.23092 = prev->sreg2;
          prev->sreg1 = D.23092;
        }
        <D.23090>:
        <D.23087>:
        D.22943 = ins->prev;
        if (D.22943 != 0B) goto <D.23093>; else goto <D.23094>;
        <D.23093>:
        D.22943 = ins->prev;
        D.22946 = ins->next;
        D.22943->next = D.22946;
        <D.23094>:
        D.22946 = ins->next;
        if (D.22946 != 0B) goto <D.23095>; else goto <D.23096>;
        <D.23095>:
        D.22946 = ins->next;
        D.22943 = ins->prev;
        D.22946->prev = D.22943;
        <D.23096>:
        D.22949 = bb->code;
        if (D.22949 == ins) goto <D.23097>; else goto <D.23098>;
        <D.23097>:
        D.22946 = ins->next;
        bb->code = D.22946;
        <D.23098>:
        D.22952 = bb->last_ins;
        if (D.22952 == ins) goto <D.23099>; else goto <D.23100>;
        <D.23099>:
        D.22943 = ins->prev;
        bb->last_ins = D.22943;
        <D.23100>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.22927 = ins->sreg3;
        ins->sreg2 = D.22927;
        D.22926 = ins->sreg2;
        ins->sreg1 = D.22926;
        D.22907 = ins->opcode;
        D.22908 = (int) D.22907;
        D.22909 = D.22908 + -313;
        D.22910 = D.22909 * 4;
        spec = &ins_info[D.22910];
        <D.23020>:
        <D.23027>:
        D.22997 = *spec;
        if (D.22997 != 32) goto <D.23101>; else goto <D.23102>;
        <D.23101>:
        D.22914 = ins->dreg;
        D.22915 = (long unsigned int) D.22914;
        D.23103 = D.22915 / 64;
        D.23104 = used->data[D.23103];
        D.22914 = ins->dreg;
        D.22918 = D.22914 & 63;
        D.22919 = 1 << D.22918;
        D.22920 = ~D.22919;
        D.23105 = D.23104 & D.22920;
        used->data[D.23103] = D.23105;
        <D.23102>:
        <D.23018>:
        D.22997 = *spec;
        if (D.22997 != 32) goto <D.23106>; else goto <D.23107>;
        <D.23106>:
        D.22914 = ins->dreg;
        D.22915 = (long unsigned int) D.22914;
        D.23108 = D.22915 / 64;
        D.23109 = defined->data[D.23108];
        D.22914 = ins->dreg;
        D.22918 = D.22914 & 63;
        D.22919 = 1 << D.22918;
        D.23110 = D.23109 | D.22919;
        defined->data[D.23108] = D.23110;
        <D.23107>:
        D.22925 = ins->sreg1;
        sregs[0] = D.22925;
        D.22926 = ins->sreg2;
        sregs[1] = D.22926;
        D.22927 = ins->sreg3;
        sregs[2] = D.22927;
        D.22907 = ins->opcode;
        D.22908 = (int) D.22907;
        D.22909 = D.22908 + -313;
        D.22928 = ins_sreg_counts[D.22909];
        num_sregs = (int) D.22928;
        i = 0;
        goto <D.22464>;
        <D.22463>:
        D.23111 = sregs[i];
        D.23112 = (long unsigned int) D.23111;
        D.23113 = D.23112 / 64;
        D.23114 = used->data[D.23113];
        D.23111 = sregs[i];
        D.23115 = D.23111 & 63;
        D.23116 = 1 << D.23115;
        D.23117 = D.23114 | D.23116;
        used->data[D.23113] = D.23117;
        i = i + 1;
        <D.22464>:
        if (i < num_sregs) goto <D.22463>; else goto <D.22465>;
        <D.22465>:
        D.22907 = ins->opcode;
        D.23118 = D.22907 + 65162;
        if (D.23118 <= 13) goto <D.23119>; else goto <D.23120>;
        <D.23119>:
        D.22914 = ins->dreg;
        D.22915 = (long unsigned int) D.22914;
        D.23121 = D.22915 / 64;
        D.23122 = used->data[D.23121];
        D.22914 = ins->dreg;
        D.22918 = D.22914 & 63;
        D.22919 = 1 << D.22918;
        D.23123 = D.23122 | D.22919;
        used->data[D.23121] = D.23123;
        <D.23120>:
        D.22907 = ins->opcode;
        D.23126 = D.22907 + 65193;
        if (D.23126 <= 2) goto <D.23124>; else goto <D.23127>;
        <D.23127>:
        D.22907 = ins->opcode;
        D.23128 = D.22907 + 65187;
        if (D.23128 <= 2) goto <D.23124>; else goto <D.23129>;
        <D.23129>:
        D.22907 = ins->opcode;
        D.23130 = D.22907 + 65184;
        if (D.23130 <= 2) goto <D.23124>; else goto <D.23131>;
        <D.23131>:
        D.22907 = ins->opcode;
        D.23132 = D.22907 + 65181;
        if (D.23132 <= 2) goto <D.23124>; else goto <D.23133>;
        <D.23133>:
        D.22907 = ins->opcode;
        D.23134 = D.22907 + 65190;
        if (D.23134 <= 2) goto <D.23124>; else goto <D.23135>;
        <D.23135>:
        D.22907 = ins->opcode;
        D.23136 = D.22907 + 65178;
        if (D.23136 <= 2) goto <D.23124>; else goto <D.23137>;
        <D.23137>:
        D.22907 = ins->opcode;
        if (D.22907 == 444) goto <D.23124>; else goto <D.23125>;
        <D.23124>:
        {
          struct MonoCallInst * call;
          struct GSList * l;

          call = ins;
          D.23138 = call->out_ireg_args;
          if (D.23138 != 0B) goto <D.23139>; else goto <D.23140>;
          <D.23139>:
          l = call->out_ireg_args;
          goto <D.22471>;
          <D.22470>:
          {
            guint32 regpair;
            guint32 reg;

            D.23141 = l->data;
            D.23142 = (long int) D.23141;
            regpair = (guint32) D.23142;
            reg = regpair & 16777215;
            D.23143 = reg / 64;
            D.23144 = (long unsigned int) D.23143;
            D.23144 = (long unsigned int) D.23143;
            D.23145 = used->data[D.23144];
            reg.14 = (int) reg;
            D.23147 = reg.14 & 63;
            D.23148 = 1 << D.23147;
            D.23149 = D.23145 | D.23148;
            used->data[D.23144] = D.23149;
          }
          l = l->next;
          <D.22471>:
          if (l != 0B) goto <D.22470>; else goto <D.22472>;
          <D.22472>:
          <D.23140>:
          D.23150 = call->out_freg_args;
          if (D.23150 != 0B) goto <D.23151>; else goto <D.23152>;
          <D.23151>:
          l = call->out_freg_args;
          goto <D.22476>;
          <D.22475>:
          {
            guint32 regpair;
            guint32 reg;

            D.23141 = l->data;
            D.23142 = (long int) D.23141;
            regpair = (guint32) D.23142;
            reg = regpair & 16777215;
            D.23153 = reg / 64;
            D.23154 = (long unsigned int) D.23153;
            D.23154 = (long unsigned int) D.23153;
            D.23155 = used->data[D.23154];
            reg.15 = (int) reg;
            D.23157 = reg.15 & 63;
            D.23158 = 1 << D.23157;
            D.23159 = D.23155 | D.23158;
            used->data[D.23154] = D.23159;
          }
          l = l->next;
          <D.22476>:
          if (l != 0B) goto <D.22475>; else goto <D.22477>;
          <D.22477>:
          <D.23152>:
        }
        <D.23125>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  <D.22456>:
  ins = prev;
  if (ins != 0B) goto <D.23161>; else goto <D.23162>;
  <D.23161>:
  iftmp.16 = ins->prev;
  goto <D.23163>;
  <D.23162>:
  iftmp.16 = 0B;
  <D.23163>:
  prev = iftmp.16;
  <D.22479>:
  if (ins != 0B) goto <D.22478>; else goto <D.22480>;
  <D.22480>:
  bb = bb->next_bb;
  <D.22482>:
  if (bb != 0B) goto <D.22481>; else goto <D.22483>;
  <D.22483>:
}


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

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


reg_is_softreg (int reg, const char spec)
{
  gboolean D.23170;
  int iftmp.18;

  if (spec == 105) goto <D.23172>; else goto <D.23177>;
  <D.23177>:
  if (spec == 102) goto <D.23172>; else goto <D.23173>;
  <D.23172>:
  if (reg > 31) goto <D.23174>; else goto <D.23173>;
  <D.23173>:
  if (spec == 118) goto <D.23174>; else goto <D.23175>;
  <D.23174>:
  iftmp.18 = 1;
  goto <D.23176>;
  <D.23175>:
  iftmp.18 = 0;
  <D.23176>:
  D.23170 = iftmp.18;
  return D.23170;
}


mono_is_simd_accessor (struct MonoInst * ins)
{
  short unsigned int D.23179;
  int D.23180;
  gboolean D.23181;

  D.23179 = ins->opcode;
  D.23180 = (int) D.23179;
  switch (D.23180) <default: <D.22433>>
  <D.22433>:
  D.23181 = 0;
  return D.23181;
}


reg_is_softreg_no_fpstack (int reg, const char spec)
{
  gboolean D.23183;
  int iftmp.19;

  if (spec == 105) goto <D.23185>; else goto <D.23190>;
  <D.23190>:
  if (spec == 102) goto <D.23185>; else goto <D.23186>;
  <D.23185>:
  if (reg > 31) goto <D.23187>; else goto <D.23186>;
  <D.23186>:
  if (spec == 118) goto <D.23187>; else goto <D.23188>;
  <D.23187>:
  iftmp.19 = 1;
  goto <D.23189>;
  <D.23188>:
  iftmp.19 = 0;
  <D.23189>:
  D.23183 = iftmp.19;
  return D.23183;
}


