mono_local_cprop (struct MonoCompile * cfg)
{
  unsigned int D.21634;
  struct MonoMemPool * D.21635;
  unsigned int D.21636;
  unsigned int D.21637;
  int D.21638;
  unsigned int D.21643;
  unsigned int D.21644;
  struct MonoInst * * D.21645;
  sizetype D.21646;
  sizetype D.21647;
  sizetype D.21648;
  struct MonoInst * * D.21649;
  int D.21650;
  int D.21651;
  int D.21652;
  short unsigned int D.21653;
  int D.21654;
  int D.21655;
  signed char D.21656;
  unsigned int sreg.0;
  unsigned int D.21660;
  struct MonoInst * * D.21661;
  sizetype sreg.1;
  sizetype D.21663;
  sizetype D.21664;
  struct MonoInst * * D.21665;
  int D.21666;
  struct MonoInst * D.21669;
  struct MonoInst * D.21672;
  struct MonoInst * D.21675;
  struct MonoInst * D.21678;
  _Bool D.21681;
  long int D.21682;
  long int D.21683;
  int D.21688;
  unsigned int D.21689;
  unsigned int D.21690;
  struct MonoInst * * D.21691;
  short unsigned int D.21692;
  unsigned int sreg.2;
  unsigned int D.21700;
  struct MonoInst * * D.21701;
  struct MonoInst * D.21702;
  short unsigned int D.21707;
  int D.21710;
  unsigned int D.21711;
  unsigned int D.21712;
  struct MonoInst * * D.21713;
  struct MonoInst * D.21714;
  gint32 * D.21716;
  int D.21717;
  gint32 * D.21718;
  int D.21719;
  int iftmp.3;
  unsigned int D.21723;
  unsigned int D.21724;
  struct MonoInst * * D.21726;
  struct MonoInst * * D.21727;
  struct MonoInst * D.21728;
  struct MonoInst * iftmp.4;
  unsigned char D.21734;
  int D.21735;
  int D.21736;
  _Bool D.21738;
  long int D.21739;
  long int D.21740;
  unsigned int D.21743;
  int D.21746;
  sizetype D.21747;
  const char * D.21748;
  char D.21749;
  short unsigned int D.21761;
  int D.21764;
  unsigned int D.21765;
  unsigned int D.21766;
  struct MonoInst * * D.21767;
  struct MonoInst * D.21768;
  gint32 * D.21770;
  int D.21771;
  int iftmp.5;
  unsigned int D.21775;
  struct MonoInst * * D.21777;
  struct MonoInst * D.21778;
  struct MonoInst * iftmp.6;
  unsigned char D.21784;
  int D.21785;
  int D.21786;
  _Bool D.21788;
  long int D.21789;
  long int D.21790;
  struct MonoInst * D.21797;
  int D.21809;
  long long int D.21810;
  int D.21811;
  unsigned int D.21816;
  unsigned int D.21817;
  struct MonoInst * * D.21818;
  struct MonoInst * D.21819;
  short unsigned int D.21821;
  unsigned int D.21823;
  unsigned int D.21824;
  struct MonoInst * * D.21825;
  struct MonoInst * D.21826;
  int D.21839;
  int D.21843;
  short unsigned int D.21846;
  int D.21849;
  int D.21856;
  const void * D.21857;
  int D.21858;
  int D.21863;
  int D.21866;
  int D.21867;
  short unsigned int D.21872;
  unsigned int D.21876;
  struct MonoInst * D.21878;
  int D.21880;
  int D.21881;
  int D.21888;
  guint16 iftmp.7;
  unsigned int D.21941;
  guint16 iftmp.8;
  guint16 iftmp.9;
  unsigned int c.10;
  int D.21957;
  int D.21958;
  unsigned int c.11;
  unsigned int D.21965;
  int D.21966;
  struct MonoInst * D.21967;
  int D.21968;
  int D.21969;
  const unsigned char * D.21970;
  int D.21971;
  struct MonoInst * D.21972;
  int D.21973;
  int D.21974;
  int D.21975;
  struct MonoInst * D.21976;
  int D.21977;
  int D.21978;
  unsigned int D.21981;
  int D.21982;
  int D.21983;
  struct MonoInst * D.21984;
  int D.21985;
  int D.21986;
  char D.21988;
  short unsigned int D.21993;
  int D.21996;
  unsigned int D.21997;
  int D.22002;
  int D.22003;
  int iftmp.12;
  unsigned int D.22011;
  struct MonoInst * * D.22013;
  struct MonoInst * D.22014;
  struct MonoInst * iftmp.13;
  unsigned char D.22020;
  int D.22021;
  int D.22022;
  _Bool D.22024;
  long int D.22025;
  long int D.22026;
  gint32 * D.22029;
  short unsigned int D.22032;
  short unsigned int D.22034;
  short unsigned int D.22036;
  short unsigned int D.22038;
  short unsigned int D.22040;
  short unsigned int D.22042;
  struct MonoBasicBlock * bb;
  struct MonoInst * * defs;
  gint32 * def_index;
  int max;
  void restart = <<< error >>>;

  restart:
  D.21634 = cfg->next_vreg;
  max = (int) D.21634;
  D.21635 = cfg->mempool;
  D.21634 = cfg->next_vreg;
  D.21636 = D.21634 + 1;
  D.21637 = D.21636 * 4;
  defs = mono_mempool_alloc (D.21635, D.21637);
  D.21635 = cfg->mempool;
  D.21634 = cfg->next_vreg;
  D.21636 = D.21634 + 1;
  D.21637 = D.21636 * 4;
  def_index = mono_mempool_alloc (D.21635, D.21637);
  bb = cfg->bb_entry;
  goto <D.21569>;
  <D.21568>:
  {
    struct MonoInst * ins;
    int ins_index;
    int last_call_index;

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

      try
        {
          D.21638 = ins->dreg;
          if (D.21638 != -1) goto <D.21639>; else goto <D.21640>;
          <D.21639>:
          D.21638 = ins->dreg;
          if (D.21638 < max) goto <D.21641>; else goto <D.21642>;
          <D.21641>:
          D.21638 = ins->dreg;
          D.21643 = (unsigned int) D.21638;
          D.21644 = D.21643 * 4;
          D.21645 = defs + D.21644;
          *D.21645 = 0B;
          D.21638 = ins->dreg;
          D.21646 = (sizetype) D.21638;
          D.21647 = D.21646 + 1;
          D.21648 = D.21647 * 4;
          D.21649 = defs + D.21648;
          *D.21649 = 0B;
          <D.21642>:
          <D.21640>:
          D.21650 = ins->sreg1;
          sregs[0] = D.21650;
          D.21651 = ins->sreg2;
          sregs[1] = D.21651;
          D.21652 = ins->sreg3;
          sregs[2] = D.21652;
          D.21653 = ins->opcode;
          D.21654 = (int) D.21653;
          D.21655 = D.21654 + -313;
          D.21656 = ins_sreg_counts[D.21655];
          num_sregs = (int) D.21656;
          i = 0;
          goto <D.21517>;
          <D.21516>:
          {
            int sreg;

            sreg = sregs[i];
            if (sreg < max) goto <D.21657>; else goto <D.21658>;
            <D.21657>:
            sreg.0 = (unsigned int) sreg;
            D.21660 = sreg.0 * 4;
            D.21661 = defs + D.21660;
            *D.21661 = 0B;
            sreg.1 = (sizetype) sreg;
            D.21663 = sreg.1 + 1;
            D.21664 = D.21663 * 4;
            D.21665 = defs + D.21664;
            *D.21665 = 0B;
            <D.21658>:
          }
          i = i + 1;
          <D.21517>:
          if (i < num_sregs) goto <D.21516>; else goto <D.21518>;
          <D.21518>:
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    ins = ins->next;
    <D.21520>:
    if (ins != 0B) goto <D.21519>; else goto <D.21521>;
    <D.21521>:
    ins_index = 0;
    last_call_index = -1;
    ins = bb->code;
    goto <D.21566>;
    <D.21565>:
    {
      const char * spec;
      int regtype;
      int srcindex;
      int sreg;
      int num_sregs;
      int sregs[3];

      try
        {
          D.21653 = ins->opcode;
          D.21654 = (int) D.21653;
          D.21655 = D.21654 + -313;
          D.21666 = D.21655 * 4;
          spec = &ins_info[D.21666];
          D.21653 = ins->opcode;
          if (D.21653 == 316) goto <D.21667>; else goto <D.21668>;
          <D.21667>:
          D.21669 = ins->prev;
          if (D.21669 != 0B) goto <D.21670>; else goto <D.21671>;
          <D.21670>:
          D.21669 = ins->prev;
          D.21672 = ins->next;
          D.21669->next = D.21672;
          <D.21671>:
          D.21672 = ins->next;
          if (D.21672 != 0B) goto <D.21673>; else goto <D.21674>;
          <D.21673>:
          D.21672 = ins->next;
          D.21669 = ins->prev;
          D.21672->prev = D.21669;
          <D.21674>:
          D.21675 = bb->code;
          if (D.21675 == ins) goto <D.21676>; else goto <D.21677>;
          <D.21676>:
          D.21672 = ins->next;
          bb->code = D.21672;
          <D.21677>:
          D.21678 = bb->last_ins;
          if (D.21678 == ins) goto <D.21679>; else goto <D.21680>;
          <D.21679>:
          D.21669 = ins->prev;
          bb->last_ins = D.21669;
          <D.21680>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.21652 = ins->sreg3;
          ins->sreg2 = D.21652;
          D.21651 = ins->sreg2;
          ins->sreg1 = D.21651;
          // predicted unlikely by continue predictor.
          goto <D.21528>;
          <D.21668>:
          D.21653 = ins->opcode;
          D.21681 = D.21653 <= 313;
          D.21682 = (long int) D.21681;
          D.21683 = __builtin_expect (D.21682, 0);
          if (D.21683 != 0) goto <D.21684>; else goto <D.21685>;
          <D.21684>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 105, "ins->opcode > MONO_CEE_LAST");
          <D.21685>:
          D.21653 = ins->opcode;
          if (D.21653 == 314) goto <D.21686>; else goto <D.21687>;
          <D.21686>:
          {
            struct MonoInst * var;

            var = ins->data.op[0].p;
            D.21688 = var->dreg;
            D.21689 = (unsigned int) D.21688;
            D.21690 = D.21689 * 4;
            D.21691 = defs + D.21690;
            *D.21691 = 0B;
          }
          <D.21687>:
          D.21653 = ins->opcode;
          D.21692 = D.21653 + 65162;
          if (D.21692 <= 13) goto <D.21693>; else goto <D.21694>;
          <D.21693>:
          sreg = ins->dreg;
          regtype = 105;
          if (regtype == 105) goto <D.21695>; else goto <D.21696>;
          <D.21695>:
          if (sreg != -1) goto <D.21697>; else goto <D.21698>;
          <D.21697>:
          sreg.2 = (unsigned int) sreg;
          D.21700 = sreg.2 * 4;
          D.21701 = defs + D.21700;
          D.21702 = *D.21701;
          if (D.21702 != 0B) goto <D.21703>; else goto <D.21704>;
          <D.21703>:
          {
            struct MonoInst * def;

            sreg.2 = (unsigned int) sreg;
            D.21700 = sreg.2 * 4;
            D.21701 = defs + D.21700;
            def = *D.21701;
            D.21707 = def->opcode;
            if (D.21707 == 424) goto <D.21708>; else goto <D.21709>;
            <D.21708>:
            D.21710 = def->sreg1;
            D.21711 = (unsigned int) D.21710;
            D.21712 = D.21711 * 4;
            D.21713 = defs + D.21712;
            D.21714 = *D.21713;
            if (D.21714 == 0B) goto <D.21705>; else goto <D.21715>;
            <D.21715>:
            D.21710 = def->sreg1;
            D.21711 = (unsigned int) D.21710;
            D.21712 = D.21711 * 4;
            D.21716 = def_index + D.21712;
            D.21717 = *D.21716;
            sreg.2 = (unsigned int) sreg;
            D.21700 = sreg.2 * 4;
            D.21718 = def_index + D.21700;
            D.21719 = *D.21718;
            if (D.21717 < D.21719) goto <D.21705>; else goto <D.21706>;
            <D.21705>:
            D.21710 = def->sreg1;
            D.21723 = (unsigned int) D.21710;
            D.21724 = cfg->vreg_to_inst_len;
            if (D.21723 < D.21724) goto <D.21725>; else goto <D.21721>;
            <D.21725>:
            D.21726 = cfg->vreg_to_inst;
            D.21710 = def->sreg1;
            D.21711 = (unsigned int) D.21710;
            D.21712 = D.21711 * 4;
            D.21727 = D.21726 + D.21712;
            D.21728 = *D.21727;
            if (D.21728 != 0B) goto <D.21729>; else goto <D.21721>;
            <D.21729>:
            D.21710 = def->sreg1;
            D.21723 = (unsigned int) D.21710;
            D.21724 = cfg->vreg_to_inst_len;
            if (D.21723 < D.21724) goto <D.21731>; else goto <D.21732>;
            <D.21731>:
            D.21726 = cfg->vreg_to_inst;
            D.21710 = def->sreg1;
            D.21711 = (unsigned int) D.21710;
            D.21712 = D.21711 * 4;
            D.21727 = D.21726 + D.21712;
            iftmp.4 = *D.21727;
            goto <D.21733>;
            <D.21732>:
            iftmp.4 = 0B;
            <D.21733>:
            D.21734 = iftmp.4->flags;
            D.21735 = (int) D.21734;
            D.21736 = D.21735 & 20;
            if (D.21736 != 0) goto <D.21737>; else goto <D.21721>;
            <D.21737>:
            iftmp.3 = 1;
            goto <D.21722>;
            <D.21721>:
            iftmp.3 = 0;
            <D.21722>:
            D.21738 = iftmp.3 != 0;
            D.21739 = (long int) D.21738;
            D.21740 = __builtin_expect (D.21739, 0);
            if (D.21740 == 0) goto <D.21741>; else goto <D.21742>;
            <D.21741>:
            {
              int vreg;

              vreg = def->sreg1;
              D.21743 = cfg->verbose_level;
              if (D.21743 > 2) goto <D.21744>; else goto <D.21745>;
              <D.21744>:
              printf ("CCOPY: R%d -> R%d\n", sreg, vreg);
              <D.21745>:
              ins->dreg = vreg;
            }
            <D.21742>:
            <D.21706>:
            <D.21709>:
          }
          <D.21704>:
          <D.21698>:
          <D.21696>:
          <D.21694>:
          D.21650 = ins->sreg1;
          sregs[0] = D.21650;
          D.21651 = ins->sreg2;
          sregs[1] = D.21651;
          D.21652 = ins->sreg3;
          sregs[2] = D.21652;
          D.21653 = ins->opcode;
          D.21654 = (int) D.21653;
          D.21655 = D.21654 + -313;
          D.21656 = ins_sreg_counts[D.21655];
          num_sregs = (int) D.21656;
          srcindex = 0;
          goto <D.21539>;
          <D.21538>:
          {
            struct MonoInst * def;
            int nregs;

            D.21650 = ins->sreg1;
            sregs[0] = D.21650;
            D.21651 = ins->sreg2;
            sregs[1] = D.21651;
            D.21652 = ins->sreg3;
            sregs[2] = D.21652;
            D.21653 = ins->opcode;
            D.21654 = (int) D.21653;
            D.21655 = D.21654 + -313;
            D.21656 = ins_sreg_counts[D.21655];
            nregs = (int) D.21656;
            D.21746 = srcindex + 1;
            D.21747 = (sizetype) D.21746;
            D.21748 = spec + D.21747;
            D.21749 = *D.21748;
            regtype = (int) D.21749;
            sreg = sregs[srcindex];
            if (regtype == 32) goto <D.21750>; else goto <D.21752>;
            <D.21752>:
            if (sreg == -1) goto <D.21750>; else goto <D.21753>;
            <D.21753>:
            sreg.2 = (unsigned int) sreg;
            D.21700 = sreg.2 * 4;
            D.21701 = defs + D.21700;
            D.21702 = *D.21701;
            if (D.21702 == 0B) goto <D.21750>; else goto <D.21751>;
            <D.21750>:
            // predicted unlikely by continue predictor.
            goto <D.21534>;
            <D.21751>:
            sreg.2 = (unsigned int) sreg;
            D.21700 = sreg.2 * 4;
            D.21701 = defs + D.21700;
            def = *D.21701;
            D.21761 = def->opcode;
            if (D.21761 == 424) goto <D.21760>; else goto <D.21762>;
            <D.21762>:
            D.21761 = def->opcode;
            if (D.21761 == 426) goto <D.21760>; else goto <D.21763>;
            <D.21763>:
            D.21761 = def->opcode;
            if (D.21761 == 427) goto <D.21760>; else goto <D.21759>;
            <D.21760>:
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21767 = defs + D.21766;
            D.21768 = *D.21767;
            if (D.21768 == 0B) goto <D.21758>; else goto <D.21769>;
            <D.21769>:
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21770 = def_index + D.21766;
            D.21771 = *D.21770;
            sreg.2 = (unsigned int) sreg;
            D.21700 = sreg.2 * 4;
            D.21718 = def_index + D.21700;
            D.21719 = *D.21718;
            if (D.21771 < D.21719) goto <D.21758>; else goto <D.21759>;
            <D.21758>:
            D.21764 = def->sreg1;
            D.21775 = (unsigned int) D.21764;
            D.21724 = cfg->vreg_to_inst_len;
            if (D.21775 < D.21724) goto <D.21776>; else goto <D.21773>;
            <D.21776>:
            D.21726 = cfg->vreg_to_inst;
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21777 = D.21726 + D.21766;
            D.21778 = *D.21777;
            if (D.21778 != 0B) goto <D.21779>; else goto <D.21773>;
            <D.21779>:
            D.21764 = def->sreg1;
            D.21775 = (unsigned int) D.21764;
            D.21724 = cfg->vreg_to_inst_len;
            if (D.21775 < D.21724) goto <D.21781>; else goto <D.21782>;
            <D.21781>:
            D.21726 = cfg->vreg_to_inst;
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21777 = D.21726 + D.21766;
            iftmp.6 = *D.21777;
            goto <D.21783>;
            <D.21782>:
            iftmp.6 = 0B;
            <D.21783>:
            D.21784 = iftmp.6->flags;
            D.21785 = (int) D.21784;
            D.21786 = D.21785 & 20;
            if (D.21786 != 0) goto <D.21787>; else goto <D.21773>;
            <D.21787>:
            iftmp.5 = 1;
            goto <D.21774>;
            <D.21773>:
            iftmp.5 = 0;
            <D.21774>:
            D.21788 = iftmp.5 != 0;
            D.21789 = (long int) D.21788;
            D.21790 = __builtin_expect (D.21789, 0);
            if (D.21790 == 0) goto <D.21791>; else goto <D.21792>;
            <D.21791>:
            D.21764 = def->sreg1;
            D.21775 = (unsigned int) D.21764;
            D.21724 = cfg->vreg_to_inst_len;
            if (D.21775 < D.21724) goto <D.21793>; else goto <D.21756>;
            <D.21793>:
            D.21726 = cfg->vreg_to_inst;
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21777 = D.21726 + D.21766;
            D.21778 = *D.21777;
            if (D.21778 != 0B) goto <D.21757>; else goto <D.21756>;
            <D.21756>:
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21767 = defs + D.21766;
            D.21768 = *D.21767;
            if (D.21768 == 0B) goto <D.21757>; else goto <D.21794>;
            <D.21794>:
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21770 = def_index + D.21766;
            D.21771 = *D.21770;
            if (D.21771 >= last_call_index) goto <D.21757>; else goto <D.21795>;
            <D.21795>:
            D.21761 = def->opcode;
            if (D.21761 == 427) goto <D.21757>; else goto <D.21755>;
            <D.21757>:
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21767 = defs + D.21766;
            D.21768 = *D.21767;
            if (D.21768 == 0B) goto <D.21754>; else goto <D.21796>;
            <D.21796>:
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21767 = defs + D.21766;
            D.21768 = *D.21767;
            D.21797 = D.21768->next;
            if (D.21797 != def) goto <D.21754>; else goto <D.21755>;
            <D.21754>:
            D.21761 = def->opcode;
            if (D.21761 != 426) goto <D.21798>; else goto <D.21799>;
            <D.21798>:
            {
              int vreg;

              vreg = def->sreg1;
              D.21743 = cfg->verbose_level;
              if (D.21743 > 2) goto <D.21800>; else goto <D.21801>;
              <D.21800>:
              printf ("CCOPY/2: R%d -> R%d\n", sreg, vreg);
              <D.21801>:
              sregs[srcindex] = vreg;
              mono_inst_set_src_registers (ins, &sregs);
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.21534>;
            }
            <D.21799>:
            <D.21755>:
            <D.21792>:
            <D.21759>:
            D.21761 = def->opcode;
            if (D.21761 == 362) goto <D.21807>; else goto <D.21802>;
            <D.21807>:
            if (srcindex == 0) goto <D.21808>; else goto <D.21803>;
            <D.21808>:
            D.21651 = ins->sreg2;
            if (D.21651 == -1) goto <D.21804>; else goto <D.21803>;
            <D.21803>:
            D.21809 = def->data.op[0].const_val;
            D.21810 = (long long int) D.21809;
            D.21811 = mono_arch_is_inst_imm (D.21810);
            if (D.21811 != 0) goto <D.21804>; else goto <D.21802>;
            <D.21802>:
            D.21761 = def->opcode;
            if (D.21761 == 365) goto <D.21804>; else goto <D.21805>;
            <D.21804>:
            {
              guint32 opcode2;

              if (srcindex == 1) goto <D.21814>; else goto <D.21812>;
              <D.21814>:
              D.21650 = ins->sreg1;
              if (D.21650 != -1) goto <D.21815>; else goto <D.21812>;
              <D.21815>:
              D.21650 = ins->sreg1;
              D.21816 = (unsigned int) D.21650;
              D.21817 = D.21816 * 4;
              D.21818 = defs + D.21817;
              D.21819 = *D.21818;
              if (D.21819 != 0B) goto <D.21820>; else goto <D.21812>;
              <D.21820>:
              D.21650 = ins->sreg1;
              D.21816 = (unsigned int) D.21650;
              D.21817 = D.21816 * 4;
              D.21818 = defs + D.21817;
              D.21819 = *D.21818;
              D.21821 = D.21819->opcode;
              if (D.21821 == 362) goto <D.21822>; else goto <D.21812>;
              <D.21822>:
              D.21651 = ins->sreg2;
              D.21823 = (unsigned int) D.21651;
              D.21824 = D.21823 * 4;
              D.21825 = defs + D.21824;
              D.21826 = *D.21825;
              if (D.21826 != 0B) goto <D.21827>; else goto <D.21812>;
              <D.21827>:
              D.21650 = ins->sreg1;
              D.21816 = (unsigned int) D.21650;
              D.21817 = D.21816 * 4;
              D.21818 = defs + D.21817;
              D.21819 = *D.21818;
              D.21651 = ins->sreg2;
              D.21823 = (unsigned int) D.21651;
              D.21824 = D.21823 * 4;
              D.21825 = defs + D.21824;
              D.21826 = *D.21825;
              mono_constant_fold_ins (cfg, ins, D.21819, D.21826, 1);
              goto <D.21813>;
              <D.21812>:
              if (srcindex == 0) goto <D.21830>; else goto <D.21828>;
              <D.21830>:
              D.21651 = ins->sreg2;
              if (D.21651 != -1) goto <D.21831>; else goto <D.21828>;
              <D.21831>:
              D.21651 = ins->sreg2;
              D.21823 = (unsigned int) D.21651;
              D.21824 = D.21823 * 4;
              D.21825 = defs + D.21824;
              D.21826 = *D.21825;
              if (D.21826 != 0B) goto <D.21832>; else goto <D.21828>;
              <D.21832>:
              {
                int opcode;

                D.21653 = ins->opcode;
                opcode = (int) D.21653;
                D.21650 = ins->sreg1;
                D.21816 = (unsigned int) D.21650;
                D.21817 = D.21816 * 4;
                D.21818 = defs + D.21817;
                D.21819 = *D.21818;
                D.21651 = ins->sreg2;
                D.21823 = (unsigned int) D.21651;
                D.21824 = D.21823 * 4;
                D.21825 = defs + D.21824;
                D.21826 = *D.21825;
                mono_constant_fold_ins (cfg, ins, D.21819, D.21826, 1);
                D.21653 = ins->opcode;
                D.21654 = (int) D.21653;
                if (D.21654 != opcode) goto <D.21833>; else goto <D.21834>;
                <D.21833>:
                srcindex = -1;
                // predicted unlikely by continue predictor.
                goto <D.21534>;
                <D.21834>:
              }
              goto <D.21829>;
              <D.21828>:
              if (srcindex == 0) goto <D.21835>; else goto <D.21836>;
              <D.21835>:
              D.21651 = ins->sreg2;
              if (D.21651 == -1) goto <D.21837>; else goto <D.21838>;
              <D.21837>:
              D.21650 = ins->sreg1;
              D.21816 = (unsigned int) D.21650;
              D.21817 = D.21816 * 4;
              D.21818 = defs + D.21817;
              D.21819 = *D.21818;
              mono_constant_fold_ins (cfg, ins, D.21819, 0B, 1);
              <D.21838>:
              <D.21836>:
              <D.21829>:
              <D.21813>:
              D.21653 = ins->opcode;
              D.21654 = (int) D.21653;
              D.21839 = mono_op_to_op_imm (D.21654);
              opcode2 = (guint32) D.21839;
              if (opcode2 != 4294967295) goto <D.21842>; else goto <D.21840>;
              <D.21842>:
              D.21809 = def->data.op[0].const_val;
              D.21810 = (long long int) D.21809;
              D.21843 = mono_arch_is_inst_imm (D.21810);
              if (D.21843 != 0) goto <D.21844>; else goto <D.21840>;
              <D.21844>:
              if (srcindex == 1) goto <D.21841>; else goto <D.21845>;
              <D.21845>:
              D.21651 = ins->sreg2;
              if (D.21651 == -1) goto <D.21841>; else goto <D.21840>;
              <D.21841>:
              D.21846 = (short unsigned int) opcode2;
              ins->opcode = D.21846;
              D.21761 = def->opcode;
              if (D.21761 == 363) goto <D.21847>; else goto <D.21848>;
              <D.21847>:
              D.21809 = def->data.op[0].const_val;
              ins->data.op[0].const_val = D.21809;
              D.21849 = def->data.op[1].const_val;
              ins->data.op[1].const_val = D.21849;
              goto <D.21850>;
              <D.21848>:
              D.21809 = def->data.op[0].const_val;
              ins->data.op[1].const_val = D.21809;
              <D.21850>:
              sregs[srcindex] = -1;
              mono_inst_set_src_registers (ins, &sregs);
              if (opcode2 == 343) goto <D.21851>; else goto <D.21853>;
              <D.21853>:
              if (opcode2 == 346) goto <D.21851>; else goto <D.21854>;
              <D.21854>:
              if (opcode2 == 352) goto <D.21851>; else goto <D.21855>;
              <D.21855>:
              if (opcode2 == 349) goto <D.21851>; else goto <D.21852>;
              <D.21851>:
              D.21856 = ins->data.op[1].const_val;
              D.21857 = (const void *) D.21856;
              MEM[(struct MonoCallInst *)ins].fptr = D.21857;
              <D.21852>:
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.21534>;
              <D.21840>:
              D.21653 = ins->opcode;
              D.21654 = (int) D.21653;
              D.21858 = mono_load_membase_to_load_mem (D.21654);
              opcode2 = (guint32) D.21858;
              if (srcindex == 0) goto <D.21859>; else goto <D.21860>;
              <D.21859>:
              if (opcode2 != 4294967295) goto <D.21861>; else goto <D.21862>;
              <D.21861>:
              D.21809 = def->data.op[0].const_val;
              D.21810 = (long long int) D.21809;
              D.21863 = mono_arch_is_inst_imm (D.21810);
              if (D.21863 != 0) goto <D.21864>; else goto <D.21865>;
              <D.21864>:
              D.21846 = (short unsigned int) opcode2;
              ins->opcode = D.21846;
              D.21809 = def->data.op[0].const_val;
              D.21866 = ins->data.op[0].const_val;
              D.21867 = D.21809 + D.21866;
              ins->data.op[1].const_val = D.21867;
              ins->sreg1 = -1;
              <D.21865>:
              <D.21862>:
              <D.21860>:
            }
            goto <D.21806>;
            <D.21805>:
            D.21761 = def->opcode;
            if (D.21761 == 429) goto <D.21868>; else goto <D.21871>;
            <D.21871>:
            D.21761 = def->opcode;
            if (D.21761 == 538) goto <D.21868>; else goto <D.21869>;
            <D.21868>:
            D.21653 = ins->opcode;
            D.21872 = D.21653 + 65148;
            if (D.21872 <= 11) goto <D.21873>; else goto <D.21869>;
            <D.21873>:
            D.21764 = def->sreg1;
            D.21775 = (unsigned int) D.21764;
            D.21876 = cfg->frame_reg;
            if (D.21775 == D.21876) goto <D.21874>; else goto <D.21877>;
            <D.21877>:
            D.21878 = def->next;
            if (D.21878 == ins) goto <D.21879>; else goto <D.21875>;
            <D.21879>:
            D.21880 = def->dreg;
            D.21764 = def->sreg1;
            if (D.21880 != D.21764) goto <D.21874>; else goto <D.21875>;
            <D.21874>:
            D.21764 = def->sreg1;
            ins->sreg1 = D.21764;
            D.21866 = ins->data.op[0].const_val;
            D.21849 = def->data.op[1].const_val;
            D.21881 = D.21866 + D.21849;
            ins->data.op[0].const_val = D.21881;
            <D.21875>:
            goto <D.21870>;
            <D.21869>:
            D.21653 = ins->opcode;
            if (D.21653 == 626) goto <D.21884>; else goto <D.21882>;
            <D.21884>:
            D.21761 = def->opcode;
            if (D.21761 == 625) goto <D.21885>; else goto <D.21882>;
            <D.21885>:
            D.21878 = def->next;
            if (D.21878 == ins) goto <D.21886>; else goto <D.21882>;
            <D.21886>:
            D.21880 = def->dreg;
            D.21764 = def->sreg1;
            if (D.21880 != D.21764) goto <D.21887>; else goto <D.21882>;
            <D.21887>:
            D.21764 = def->sreg1;
            ins->sreg1 = D.21764;
            D.21856 = ins->data.op[1].const_val;
            D.21849 = def->data.op[1].const_val;
            D.21888 = D.21856 - D.21849;
            ins->data.op[1].const_val = D.21888;
            goto <D.21883>;
            <D.21882>:
            D.21653 = ins->opcode;
            if (D.21653 == 625) goto <D.21891>; else goto <D.21889>;
            <D.21891>:
            D.21761 = def->opcode;
            if (D.21761 == 626) goto <D.21892>; else goto <D.21889>;
            <D.21892>:
            D.21878 = def->next;
            if (D.21878 == ins) goto <D.21893>; else goto <D.21889>;
            <D.21893>:
            D.21880 = def->dreg;
            D.21764 = def->sreg1;
            if (D.21880 != D.21764) goto <D.21894>; else goto <D.21889>;
            <D.21894>:
            D.21764 = def->sreg1;
            ins->sreg1 = D.21764;
            D.21856 = ins->data.op[1].const_val;
            D.21849 = def->data.op[1].const_val;
            D.21888 = D.21856 - D.21849;
            ins->data.op[1].const_val = D.21888;
            goto <D.21890>;
            <D.21889>:
            D.21653 = ins->opcode;
            if (D.21653 == 375) goto <D.21899>; else goto <D.21895>;
            <D.21899>:
            D.21761 = def->opcode;
            if (D.21761 == 591) goto <D.21896>; else goto <D.21900>;
            <D.21900>:
            D.21761 = def->opcode;
            if (D.21761 == 580) goto <D.21896>; else goto <D.21901>;
            <D.21901>:
            D.21761 = def->opcode;
            if (D.21761 == 762) goto <D.21896>; else goto <D.21895>;
            <D.21896>:
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21767 = defs + D.21766;
            D.21768 = *D.21767;
            if (D.21768 == 0B) goto <D.21897>; else goto <D.21902>;
            <D.21902>:
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21770 = def_index + D.21766;
            D.21771 = *D.21770;
            sreg.2 = (unsigned int) sreg;
            D.21700 = sreg.2 * 4;
            D.21718 = def_index + D.21700;
            D.21719 = *D.21718;
            if (D.21771 < D.21719) goto <D.21897>; else goto <D.21895>;
            <D.21897>:
            D.21764 = def->sreg1;
            ins->sreg1 = D.21764;
            goto <D.21898>;
            <D.21895>:
            D.21653 = ins->opcode;
            if (D.21653 == 376) goto <D.21906>; else goto <D.21907>;
            <D.21906>:
            D.21761 = def->opcode;
            if (D.21761 == 590) goto <D.21905>; else goto <D.21908>;
            <D.21908>:
            D.21761 = def->opcode;
            if (D.21761 == 581) goto <D.21905>; else goto <D.21909>;
            <D.21909>:
            D.21761 = def->opcode;
            if (D.21761 == 762) goto <D.21905>; else goto <D.21904>;
            <D.21905>:
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21767 = defs + D.21766;
            D.21768 = *D.21767;
            if (D.21768 == 0B) goto <D.21903>; else goto <D.21910>;
            <D.21910>:
            D.21764 = def->sreg1;
            D.21765 = (unsigned int) D.21764;
            D.21766 = D.21765 * 4;
            D.21770 = def_index + D.21766;
            D.21771 = *D.21770;
            sreg.2 = (unsigned int) sreg;
            D.21700 = sreg.2 * 4;
            D.21718 = def_index + D.21700;
            D.21719 = *D.21718;
            if (D.21771 < D.21719) goto <D.21903>; else goto <D.21904>;
            <D.21903>:
            D.21764 = def->sreg1;
            ins->sreg1 = D.21764;
            <D.21904>:
            <D.21907>:
            <D.21898>:
            <D.21890>:
            <D.21883>:
            <D.21870>:
            <D.21806>:
          }
          <D.21534>:
          srcindex = srcindex + 1;
          <D.21539>:
          if (srcindex < num_sregs) goto <D.21538>; else goto <D.21540>;
          <D.21540>:
          D.21653 = ins->opcode;
          D.21654 = (int) D.21653;
          switch (D.21654) <default: <D.21987>, case 424: <D.21541>, case 429: <D.21544>, case 430: <D.21546>, case 431: <D.21548>, case 625: <D.21545>, case 626: <D.21547>, case 627: <D.21549>, case 628: <D.21555>, case 629: <D.21552>, case 631: <D.21551>, case 800: <D.21542>>
          <D.21541>:
          <D.21542>:
          D.21638 = ins->dreg;
          D.21650 = ins->sreg1;
          if (D.21638 == D.21650) goto <D.21911>; else goto <D.21912>;
          <D.21911>:
          D.21669 = ins->prev;
          if (D.21669 != 0B) goto <D.21913>; else goto <D.21914>;
          <D.21913>:
          D.21669 = ins->prev;
          D.21672 = ins->next;
          D.21669->next = D.21672;
          <D.21914>:
          D.21672 = ins->next;
          if (D.21672 != 0B) goto <D.21915>; else goto <D.21916>;
          <D.21915>:
          D.21672 = ins->next;
          D.21669 = ins->prev;
          D.21672->prev = D.21669;
          <D.21916>:
          D.21675 = bb->code;
          if (D.21675 == ins) goto <D.21917>; else goto <D.21918>;
          <D.21917>:
          D.21672 = ins->next;
          bb->code = D.21672;
          <D.21918>:
          D.21678 = bb->last_ins;
          if (D.21678 == ins) goto <D.21919>; else goto <D.21920>;
          <D.21919>:
          D.21669 = ins->prev;
          bb->last_ins = D.21669;
          <D.21920>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.21652 = ins->sreg3;
          ins->sreg2 = D.21652;
          D.21651 = ins->sreg2;
          ins->sreg1 = D.21651;
          D.21653 = ins->opcode;
          D.21654 = (int) D.21653;
          D.21655 = D.21654 + -313;
          D.21666 = D.21655 * 4;
          spec = &ins_info[D.21666];
          <D.21912>:
          goto <D.21543>;
          <D.21544>:
          <D.21545>:
          <D.21546>:
          <D.21547>:
          D.21856 = ins->data.op[1].const_val;
          if (D.21856 == 0) goto <D.21921>; else goto <D.21922>;
          <D.21921>:
          ins->opcode = 424;
          D.21653 = ins->opcode;
          D.21654 = (int) D.21653;
          D.21655 = D.21654 + -313;
          D.21666 = D.21655 * 4;
          spec = &ins_info[D.21666];
          <D.21922>:
          goto <D.21543>;
          <D.21548>:
          <D.21549>:
          D.21856 = ins->data.op[1].const_val;
          if (D.21856 == 0) goto <D.21923>; else goto <D.21924>;
          <D.21923>:
          D.21653 = ins->opcode;
          if (D.21653 == 540) goto <D.21926>; else goto <D.21927>;
          <D.21926>:
          iftmp.7 = 363;
          goto <D.21928>;
          <D.21927>:
          iftmp.7 = 362;
          <D.21928>:
          ins->opcode = iftmp.7;
          ins->data.op[0].const_val = 0;
          ins->sreg1 = -1;
          goto <D.21929>;
          <D.21924>:
          D.21856 = ins->data.op[1].const_val;
          if (D.21856 == 1) goto <D.21930>; else goto <D.21931>;
          <D.21930>:
          ins->opcode = 424;
          goto <D.21932>;
          <D.21931>:
          D.21653 = ins->opcode;
          if (D.21653 == 627) goto <D.21935>; else goto <D.21933>;
          <D.21935>:
          D.21856 = ins->data.op[1].const_val;
          if (D.21856 == -1) goto <D.21936>; else goto <D.21933>;
          <D.21936>:
          ins->opcode = 578;
          goto <D.21934>;
          <D.21933>:
          D.21653 = ins->opcode;
          if (D.21653 == 540) goto <D.21939>; else goto <D.21937>;
          <D.21939>:
          D.21856 = ins->data.op[1].const_val;
          if (D.21856 == -1) goto <D.21940>; else goto <D.21937>;
          <D.21940>:
          ins->opcode = 492;
          goto <D.21938>;
          <D.21937>:
          {
            int power2;

            D.21856 = ins->data.op[1].const_val;
            D.21941 = (unsigned int) D.21856;
            power2 = mono_is_power_of_two (D.21941);
            if (power2 >= 0) goto <D.21942>; else goto <D.21943>;
            <D.21942>:
            D.21653 = ins->opcode;
            if (D.21653 != 431) goto <D.21945>; else goto <D.21946>;
            <D.21945>:
            D.21653 = ins->opcode;
            if (D.21653 == 540) goto <D.21948>; else goto <D.21949>;
            <D.21948>:
            iftmp.9 = 544;
            goto <D.21950>;
            <D.21949>:
            iftmp.9 = 635;
            <D.21950>:
            iftmp.8 = iftmp.9;
            goto <D.21951>;
            <D.21946>:
            iftmp.8 = 439;
            <D.21951>:
            ins->opcode = iftmp.8;
            ins->data.op[1].const_val = power2;
            <D.21943>:
          }
          <D.21938>:
          <D.21934>:
          <D.21932>:
          <D.21929>:
          D.21653 = ins->opcode;
          D.21654 = (int) D.21653;
          D.21655 = D.21654 + -313;
          D.21666 = D.21655 * 4;
          spec = &ins_info[D.21666];
          goto <D.21543>;
          <D.21551>:
          <D.21552>:
          {
            int c;
            int power2;

            c = ins->data.op[1].const_val;
            c.10 = (unsigned int) c;
            power2 = mono_is_power_of_two (c.10);
            if (power2 >= 0) goto <D.21953>; else goto <D.21954>;
            <D.21953>:
            D.21653 = ins->opcode;
            if (D.21653 == 631) goto <D.21955>; else goto <D.21956>;
            <D.21955>:
            ins->opcode = 632;
            ins->sreg2 = -1;
            D.21957 = 1 << power2;
            D.21958 = D.21957 + -1;
            ins->data.op[1].const_val = D.21958;
            goto <D.21959>;
            <D.21956>:
            D.21653 = ins->opcode;
            if (D.21653 == 629) goto <D.21960>; else goto <D.21961>;
            <D.21960>:
            ins->opcode = 637;
            ins->sreg2 = -1;
            ins->data.op[1].const_val = power2;
            <D.21961>:
            <D.21959>:
            <D.21954>:
            D.21653 = ins->opcode;
            D.21654 = (int) D.21653;
            D.21655 = D.21654 + -313;
            D.21666 = D.21655 * 4;
            spec = &ins_info[D.21666];
            goto <D.21543>;
          }
          <D.21555>:
          {
            int c;
            int power2;
            struct MonoInst * tmp1;
            struct MonoInst * tmp2;
            struct MonoInst * tmp3;
            struct MonoInst * tmp4;

            c = ins->data.op[1].const_val;
            c.11 = (unsigned int) c;
            power2 = mono_is_power_of_two (c.11);
            if (power2 == 1) goto <D.21963>; else goto <D.21964>;
            <D.21963>:
            {
              int r1;

              D.21965 = mono_alloc_ireg (cfg);
              r1 = (int) D.21965;
              D.21635 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.21635, 56);
              tmp1->data.op[1].const_val = 0;
              D.21966 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.21966;
              tmp1->prev = 0B;
              D.21967 = tmp1->prev;
              tmp1->next = D.21967;
              tmp1->opcode = 637;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.21968 = tmp1->sreg3;
              tmp1->sreg2 = D.21968;
              D.21969 = tmp1->sreg2;
              tmp1->sreg1 = D.21969;
              D.21970 = cfg->ip;
              tmp1->cil_code = D.21970;
              tmp1->dreg = r1;
              D.21650 = ins->sreg1;
              tmp1->sreg1 = D.21650;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.21635 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.21635, 56);
              tmp2->data.op[1].const_val = 0;
              D.21971 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.21971;
              tmp2->prev = 0B;
              D.21972 = tmp2->prev;
              tmp2->next = D.21972;
              tmp2->opcode = 565;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.21973 = tmp2->sreg3;
              tmp2->sreg2 = D.21973;
              D.21974 = tmp2->sreg2;
              tmp2->sreg1 = D.21974;
              D.21970 = cfg->ip;
              tmp2->cil_code = D.21970;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.21650 = ins->sreg1;
              tmp2->sreg2 = D.21650;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.21635 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.21635, 56);
              tmp3->data.op[1].const_val = 0;
              D.21975 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.21975;
              tmp3->prev = 0B;
              D.21976 = tmp3->prev;
              tmp3->next = D.21976;
              tmp3->opcode = 636;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.21977 = tmp3->sreg3;
              tmp3->sreg2 = D.21977;
              D.21978 = tmp3->sreg2;
              tmp3->sreg1 = D.21978;
              D.21970 = cfg->ip;
              tmp3->cil_code = D.21970;
              D.21638 = ins->dreg;
              tmp3->dreg = D.21638;
              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.21652 = ins->sreg3;
              ins->sreg2 = D.21652;
              D.21651 = ins->sreg2;
              ins->sreg1 = D.21651;
              goto restart;
            }
            <D.21964>:
            if (power2 > 0) goto <D.21979>; else goto <D.21980>;
            <D.21979>:
            {
              int r1;

              D.21981 = mono_alloc_ireg (cfg);
              r1 = (int) D.21981;
              D.21635 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.21635, 56);
              tmp1->data.op[1].const_val = 0;
              D.21966 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.21966;
              tmp1->prev = 0B;
              D.21967 = tmp1->prev;
              tmp1->next = D.21967;
              tmp1->opcode = 636;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.21968 = tmp1->sreg3;
              tmp1->sreg2 = D.21968;
              D.21969 = tmp1->sreg2;
              tmp1->sreg1 = D.21969;
              D.21970 = cfg->ip;
              tmp1->cil_code = D.21970;
              tmp1->dreg = r1;
              D.21650 = ins->sreg1;
              tmp1->sreg1 = D.21650;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.21635 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.21635, 56);
              tmp2->data.op[1].const_val = 0;
              D.21971 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.21971;
              tmp2->prev = 0B;
              D.21972 = tmp2->prev;
              tmp2->next = D.21972;
              tmp2->opcode = 637;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.21973 = tmp2->sreg3;
              tmp2->sreg2 = D.21973;
              D.21974 = tmp2->sreg2;
              tmp2->sreg1 = D.21974;
              D.21970 = cfg->ip;
              tmp2->cil_code = D.21970;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.21982 = 32 - power2;
              tmp2->data.op[1].const_val = D.21982;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.21635 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.21635, 56);
              tmp3->data.op[1].const_val = 0;
              D.21975 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.21975;
              tmp3->prev = 0B;
              D.21976 = tmp3->prev;
              tmp3->next = D.21976;
              tmp3->opcode = 565;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.21977 = tmp3->sreg3;
              tmp3->sreg2 = D.21977;
              D.21978 = tmp3->sreg2;
              tmp3->sreg1 = D.21978;
              D.21970 = cfg->ip;
              tmp3->cil_code = D.21970;
              tmp3->dreg = r1;
              tmp3->sreg1 = r1;
              D.21650 = ins->sreg1;
              tmp3->sreg2 = D.21650;
              mono_bblock_insert_after_ins (bb, tmp2, tmp3);
              D.21635 = cfg->mempool;
              tmp4 = mono_mempool_alloc (D.21635, 56);
              tmp4->data.op[1].const_val = 0;
              D.21983 = tmp4->data.op[1].const_val;
              tmp4->data.op[0].const_val = D.21983;
              tmp4->prev = 0B;
              D.21984 = tmp4->prev;
              tmp4->next = D.21984;
              tmp4->opcode = 636;
              tmp4->flags = 0;
              tmp4->type = 0;
              tmp4->dreg = -1;
              tmp4->sreg3 = -1;
              D.21985 = tmp4->sreg3;
              tmp4->sreg2 = D.21985;
              D.21986 = tmp4->sreg2;
              tmp4->sreg1 = D.21986;
              D.21970 = cfg->ip;
              tmp4->cil_code = D.21970;
              D.21638 = ins->dreg;
              tmp4->dreg = D.21638;
              tmp4->sreg1 = r1;
              tmp4->data.op[1].const_val = power2;
              mono_bblock_insert_after_ins (bb, tmp3, tmp4);
              ins->opcode = 316;
              ins->dreg = -1;
              ins->sreg3 = -1;
              D.21652 = ins->sreg3;
              ins->sreg2 = D.21652;
              D.21651 = ins->sreg2;
              ins->sreg1 = D.21651;
              goto restart;
            }
            <D.21980>:
            goto <D.21543>;
          }
          <D.21987>:
          <D.21543>:
          D.21988 = *spec;
          if (D.21988 != 32) goto <D.21989>; else goto <D.21990>;
          <D.21989>:
          {
            struct MonoInst * def;

            D.21638 = ins->dreg;
            D.21643 = (unsigned int) D.21638;
            D.21644 = D.21643 * 4;
            D.21645 = defs + D.21644;
            def = *D.21645;
            if (def != 0B) goto <D.21991>; else goto <D.21992>;
            <D.21991>:
            D.21993 = def->opcode;
            if (D.21993 == 429) goto <D.21994>; else goto <D.21995>;
            <D.21994>:
            D.21996 = def->sreg1;
            D.21997 = (unsigned int) D.21996;
            D.21876 = cfg->frame_reg;
            if (D.21997 == D.21876) goto <D.21998>; else goto <D.21999>;
            <D.21998>:
            D.21653 = ins->opcode;
            D.21692 = D.21653 + 65162;
            if (D.21692 <= 13) goto <D.22000>; else goto <D.22001>;
            <D.22000>:
            D.21996 = def->sreg1;
            ins->dreg = D.21996;
            D.21866 = ins->data.op[0].const_val;
            D.22002 = def->data.op[1].const_val;
            D.22003 = D.21866 + D.22002;
            ins->data.op[0].const_val = D.22003;
            <D.22001>:
            <D.21999>:
            <D.21995>:
            <D.21992>:
          }
          <D.21990>:
          D.21988 = *spec;
          if (D.21988 != 32) goto <D.22004>; else goto <D.22005>;
          <D.22004>:
          D.21653 = ins->opcode;
          D.21692 = D.21653 + 65162;
          if (D.21692 > 13) goto <D.22006>; else goto <D.22007>;
          <D.22006>:
          D.21638 = ins->dreg;
          D.22011 = (unsigned int) D.21638;
          D.21724 = cfg->vreg_to_inst_len;
          if (D.22011 < D.21724) goto <D.22012>; else goto <D.22009>;
          <D.22012>:
          D.21726 = cfg->vreg_to_inst;
          D.21638 = ins->dreg;
          D.21643 = (unsigned int) D.21638;
          D.21644 = D.21643 * 4;
          D.22013 = D.21726 + D.21644;
          D.22014 = *D.22013;
          if (D.22014 != 0B) goto <D.22015>; else goto <D.22009>;
          <D.22015>:
          D.21638 = ins->dreg;
          D.22011 = (unsigned int) D.21638;
          D.21724 = cfg->vreg_to_inst_len;
          if (D.22011 < D.21724) goto <D.22017>; else goto <D.22018>;
          <D.22017>:
          D.21726 = cfg->vreg_to_inst;
          D.21638 = ins->dreg;
          D.21643 = (unsigned int) D.21638;
          D.21644 = D.21643 * 4;
          D.22013 = D.21726 + D.21644;
          iftmp.13 = *D.22013;
          goto <D.22019>;
          <D.22018>:
          iftmp.13 = 0B;
          <D.22019>:
          D.22020 = iftmp.13->flags;
          D.22021 = (int) D.22020;
          D.22022 = D.22021 & 20;
          if (D.22022 != 0) goto <D.22023>; else goto <D.22009>;
          <D.22023>:
          iftmp.12 = 1;
          goto <D.22010>;
          <D.22009>:
          iftmp.12 = 0;
          <D.22010>:
          D.22024 = iftmp.12 != 0;
          D.22025 = (long int) D.22024;
          D.22026 = __builtin_expect (D.22025, 0);
          if (D.22026 == 0) goto <D.22027>; else goto <D.22028>;
          <D.22027>:
          D.21638 = ins->dreg;
          D.21643 = (unsigned int) D.21638;
          D.21644 = D.21643 * 4;
          D.21645 = defs + D.21644;
          *D.21645 = ins;
          D.21638 = ins->dreg;
          D.21643 = (unsigned int) D.21638;
          D.21644 = D.21643 * 4;
          D.22029 = def_index + D.21644;
          *D.22029 = ins_index;
          <D.22028>:
          <D.22007>:
          <D.22005>:
          D.21653 = ins->opcode;
          D.22032 = D.21653 + 65193;
          if (D.22032 <= 2) goto <D.22030>; else goto <D.22033>;
          <D.22033>:
          D.21653 = ins->opcode;
          D.22034 = D.21653 + 65187;
          if (D.22034 <= 2) goto <D.22030>; else goto <D.22035>;
          <D.22035>:
          D.21653 = ins->opcode;
          D.22036 = D.21653 + 65184;
          if (D.22036 <= 2) goto <D.22030>; else goto <D.22037>;
          <D.22037>:
          D.21653 = ins->opcode;
          D.22038 = D.21653 + 65181;
          if (D.22038 <= 2) goto <D.22030>; else goto <D.22039>;
          <D.22039>:
          D.21653 = ins->opcode;
          D.22040 = D.21653 + 65190;
          if (D.22040 <= 2) goto <D.22030>; else goto <D.22041>;
          <D.22041>:
          D.21653 = ins->opcode;
          D.22042 = D.21653 + 65178;
          if (D.22042 <= 2) goto <D.22030>; else goto <D.22043>;
          <D.22043>:
          D.21653 = ins->opcode;
          if (D.21653 == 444) goto <D.22030>; else goto <D.22031>;
          <D.22030>:
          last_call_index = ins_index;
          <D.22031>:
          ins_index = ins_index + 1;
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    <D.21528>:
    ins = ins->next;
    <D.21566>:
    if (ins != 0B) goto <D.21565>; else goto <D.21567>;
    <D.21567>:
  }
  bb = bb->next_bb;
  <D.21569>:
  if (bb != 0B) goto <D.21568>; else goto <D.21570>;
  <D.21570>:
}


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

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


mono_local_deadce (struct MonoCompile * cfg)
{
  struct MonoMemPool * D.22049;
  unsigned int D.22050;
  unsigned int D.22051;
  short unsigned int D.22052;
  int D.22053;
  int D.22054;
  int D.22055;
  char D.22056;
  int D.22059;
  unsigned int D.22060;
  unsigned int D.22061;
  unsigned int D.22062;
  int D.22063;
  unsigned int D.22064;
  unsigned int D.22065;
  unsigned int D.22066;
  unsigned int D.22067;
  unsigned int D.22068;
  unsigned int D.22069;
  int D.22070;
  unsigned int D.22071;
  unsigned int D.22072;
  unsigned int D.22073;
  int D.22074;
  unsigned int D.22075;
  unsigned int D.22076;
  unsigned int D.22077;
  unsigned int D.22078;
  unsigned int D.22079;
  unsigned int D.22080;
  int D.22081;
  int D.22082;
  int D.22083;
  signed char D.22084;
  int D.22085;
  unsigned int D.22086;
  unsigned int D.22087;
  unsigned int D.22088;
  int D.22089;
  unsigned int D.22090;
  unsigned int D.22091;
  unsigned int D.22092;
  int D.22093;
  unsigned int D.22094;
  unsigned int D.22095;
  unsigned int D.22096;
  int D.22097;
  unsigned int D.22098;
  unsigned int D.22099;
  unsigned int D.22100;
  struct MonoInst * iftmp.14;
  struct MonoInst * D.22107;
  struct MonoInst * D.22110;
  struct MonoInst * D.22113;
  struct MonoInst * D.22116;
  _Bool D.22119;
  long int D.22120;
  long int D.22121;
  struct MonoInst * D.22129;
  short unsigned int D.22131;
  int D.22132;
  int D.22133;
  int D.22134;
  unsigned int D.22137;
  unsigned int D.22138;
  struct MonoInst * * D.22140;
  unsigned int D.22141;
  unsigned int D.22142;
  struct MonoInst * * D.22143;
  struct MonoInst * D.22144;
  char D.22145;
  int D.22148;
  unsigned int D.22151;
  unsigned int D.22152;
  int D.22153;
  unsigned int D.22154;
  unsigned int D.22155;
  short unsigned int D.22158;
  char D.22161;
  int D.22162;
  int D.22163;
  int D.22166;
  unsigned int D.22169;
  int D.22172;
  int D.22181;
  unsigned int D.22187;
  unsigned int D.22188;
  unsigned int D.22189;
  unsigned int D.22192;
  unsigned int D.22194;
  struct MonoInst * * D.22195;
  struct MonoInst * D.22196;
  unsigned int D.22198;
  unsigned int D.22199;
  int iftmp.15;
  struct MonoInst * iftmp.16;
  unsigned char D.22210;
  int D.22211;
  int D.22212;
  _Bool D.22214;
  long int D.22215;
  long int D.22216;
  unsigned int D.22218;
  unsigned int D.22219;
  short unsigned int D.22251;
  int D.22254;
  int D.22255;
  unsigned int D.22266;
  unsigned int D.22267;
  unsigned int D.22268;
  unsigned int D.22271;
  unsigned int D.22272;
  unsigned int D.22273;
  int D.22274;
  unsigned int D.22275;
  unsigned int D.22276;
  unsigned int D.22277;
  int D.22278;
  unsigned int D.22279;
  unsigned int D.22280;
  short unsigned int D.22281;
  unsigned int D.22284;
  unsigned int D.22285;
  unsigned int D.22286;
  short unsigned int D.22289;
  short unsigned int D.22291;
  short unsigned int D.22293;
  short unsigned int D.22295;
  short unsigned int D.22297;
  short unsigned int D.22299;
  struct GSList * D.22301;
  void * D.22304;
  unsigned int D.22305;
  unsigned int D.22306;
  int reg.17;
  int D.22308;
  unsigned int D.22309;
  unsigned int D.22310;
  struct GSList * D.22311;
  unsigned int D.22314;
  unsigned int D.22315;
  int reg.18;
  int D.22317;
  unsigned int D.22318;
  unsigned int D.22319;
  struct MonoInst * iftmp.19;
  struct MonoBasicBlock * bb;
  struct MonoInst * ins;
  struct MonoInst * prev;
  struct MonoBitSet * used;
  struct MonoBitSet * defined;

  D.22049 = cfg->mempool;
  D.22050 = cfg->next_vreg;
  D.22051 = D.22050 + 1;
  used = mono_bitset_mp_new_noinit (D.22049, D.22051);
  D.22049 = cfg->mempool;
  D.22050 = cfg->next_vreg;
  D.22051 = D.22050 + 1;
  defined = mono_bitset_mp_new_noinit (D.22049, D.22051);
  bb = cfg->bb_entry;
  goto <D.21631>;
  <D.21630>:
  ins = bb->code;
  goto <D.21599>;
  <D.21598>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.22052 = ins->opcode;
        D.22053 = (int) D.22052;
        D.22054 = D.22053 + -313;
        D.22055 = D.22054 * 4;
        spec = &ins_info[D.22055];
        D.22056 = *spec;
        if (D.22056 != 32) goto <D.22057>; else goto <D.22058>;
        <D.22057>:
        D.22059 = ins->dreg;
        D.22060 = (unsigned int) D.22059;
        D.22061 = D.22060 / 32;
        D.22062 = used->data[D.22061];
        D.22059 = ins->dreg;
        D.22063 = D.22059 & 31;
        D.22064 = 1 << D.22063;
        D.22065 = ~D.22064;
        D.22066 = D.22062 & D.22065;
        used->data[D.22061] = D.22066;
        D.22059 = ins->dreg;
        D.22060 = (unsigned int) D.22059;
        D.22067 = D.22060 / 32;
        D.22068 = defined->data[D.22067];
        D.22059 = ins->dreg;
        D.22063 = D.22059 & 31;
        D.22064 = 1 << D.22063;
        D.22065 = ~D.22064;
        D.22069 = D.22068 & D.22065;
        defined->data[D.22067] = D.22069;
        D.22059 = ins->dreg;
        D.22070 = D.22059 + 1;
        D.22071 = (unsigned int) D.22070;
        D.22072 = D.22071 / 32;
        D.22073 = used->data[D.22072];
        D.22059 = ins->dreg;
        D.22070 = D.22059 + 1;
        D.22074 = D.22070 & 31;
        D.22075 = 1 << D.22074;
        D.22076 = ~D.22075;
        D.22077 = D.22073 & D.22076;
        used->data[D.22072] = D.22077;
        D.22059 = ins->dreg;
        D.22070 = D.22059 + 1;
        D.22071 = (unsigned int) D.22070;
        D.22078 = D.22071 / 32;
        D.22079 = defined->data[D.22078];
        D.22059 = ins->dreg;
        D.22070 = D.22059 + 1;
        D.22074 = D.22070 & 31;
        D.22075 = 1 << D.22074;
        D.22076 = ~D.22075;
        D.22080 = D.22079 & D.22076;
        defined->data[D.22078] = D.22080;
        <D.22058>:
        D.22081 = ins->sreg1;
        sregs[0] = D.22081;
        D.22082 = ins->sreg2;
        sregs[1] = D.22082;
        D.22083 = ins->sreg3;
        sregs[2] = D.22083;
        D.22052 = ins->opcode;
        D.22053 = (int) D.22052;
        D.22054 = D.22053 + -313;
        D.22084 = ins_sreg_counts[D.22054];
        num_sregs = (int) D.22084;
        i = 0;
        goto <D.21596>;
        <D.21595>:
        D.22085 = sregs[i];
        D.22086 = (unsigned int) D.22085;
        D.22087 = D.22086 / 32;
        D.22088 = used->data[D.22087];
        D.22085 = sregs[i];
        D.22089 = D.22085 & 31;
        D.22090 = 1 << D.22089;
        D.22091 = ~D.22090;
        D.22092 = D.22088 & D.22091;
        used->data[D.22087] = D.22092;
        D.22085 = sregs[i];
        D.22093 = D.22085 + 1;
        D.22094 = (unsigned int) D.22093;
        D.22095 = D.22094 / 32;
        D.22096 = used->data[D.22095];
        D.22085 = sregs[i];
        D.22093 = D.22085 + 1;
        D.22097 = D.22093 & 31;
        D.22098 = 1 << D.22097;
        D.22099 = ~D.22098;
        D.22100 = D.22096 & D.22099;
        used->data[D.22095] = D.22100;
        i = i + 1;
        <D.21596>:
        if (i < num_sregs) goto <D.21595>; else goto <D.21597>;
        <D.21597>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  ins = ins->next;
  <D.21599>:
  if (ins != 0B) goto <D.21598>; else goto <D.21600>;
  <D.21600>:
  ins = bb->last_ins;
  if (ins != 0B) goto <D.22102>; else goto <D.22103>;
  <D.22102>:
  iftmp.14 = ins->prev;
  goto <D.22104>;
  <D.22103>:
  iftmp.14 = 0B;
  <D.22104>:
  prev = iftmp.14;
  goto <D.21628>;
  <D.21627>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.22052 = ins->opcode;
        D.22053 = (int) D.22052;
        D.22054 = D.22053 + -313;
        D.22055 = D.22054 * 4;
        spec = &ins_info[D.22055];
        D.22052 = ins->opcode;
        if (D.22052 == 316) goto <D.22105>; else goto <D.22106>;
        <D.22105>:
        D.22107 = ins->prev;
        if (D.22107 != 0B) goto <D.22108>; else goto <D.22109>;
        <D.22108>:
        D.22107 = ins->prev;
        D.22110 = ins->next;
        D.22107->next = D.22110;
        <D.22109>:
        D.22110 = ins->next;
        if (D.22110 != 0B) goto <D.22111>; else goto <D.22112>;
        <D.22111>:
        D.22110 = ins->next;
        D.22107 = ins->prev;
        D.22110->prev = D.22107;
        <D.22112>:
        D.22113 = bb->code;
        if (D.22113 == ins) goto <D.22114>; else goto <D.22115>;
        <D.22114>:
        D.22110 = ins->next;
        bb->code = D.22110;
        <D.22115>:
        D.22116 = bb->last_ins;
        if (D.22116 == ins) goto <D.22117>; else goto <D.22118>;
        <D.22117>:
        D.22107 = ins->prev;
        bb->last_ins = D.22107;
        <D.22118>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.22083 = ins->sreg3;
        ins->sreg2 = D.22083;
        D.22082 = ins->sreg2;
        ins->sreg1 = D.22082;
        // predicted unlikely by continue predictor.
        goto <D.21605>;
        <D.22106>:
        D.22052 = ins->opcode;
        D.22119 = D.22052 <= 313;
        D.22120 = (long int) D.22119;
        D.22121 = __builtin_expect (D.22120, 0);
        if (D.22121 != 0) goto <D.22122>; else goto <D.22123>;
        <D.22122>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 521, "ins->opcode > MONO_CEE_LAST");
        <D.22123>:
        D.22052 = ins->opcode;
        if (D.22052 == 424) goto <D.22124>; else goto <D.22126>;
        <D.22126>:
        D.22052 = ins->opcode;
        if (D.22052 == 427) goto <D.22124>; else goto <D.22125>;
        <D.22124>:
        D.22107 = ins->prev;
        if (D.22107 != 0B) goto <D.22127>; else goto <D.22128>;
        <D.22127>:
        {
          struct MonoInst * def;
          const char * spec2;

          def = ins->prev;
          goto <D.21609>;
          <D.21608>:
          def = def->prev;
          <D.21609>:
          D.22129 = def->prev;
          if (D.22129 != 0B) goto <D.22130>; else goto <D.21610>;
          <D.22130>:
          D.22131 = def->opcode;
          if (D.22131 == 316) goto <D.21608>; else goto <D.21610>;
          <D.21610>:
          D.22131 = def->opcode;
          D.22132 = (int) D.22131;
          D.22133 = D.22132 + -313;
          D.22134 = D.22133 * 4;
          spec2 = &ins_info[D.22134];
          D.22081 = ins->sreg1;
          D.22137 = (unsigned int) D.22081;
          D.22138 = cfg->vreg_to_inst_len;
          if (D.22137 >= D.22138) goto <D.22135>; else goto <D.22139>;
          <D.22139>:
          D.22140 = cfg->vreg_to_inst;
          D.22081 = ins->sreg1;
          D.22141 = (unsigned int) D.22081;
          D.22142 = D.22141 * 4;
          D.22143 = D.22140 + D.22142;
          D.22144 = *D.22143;
          if (D.22144 == 0B) goto <D.22135>; else goto <D.22136>;
          <D.22135>:
          D.22145 = *spec2;
          if (D.22145 != 32) goto <D.22146>; else goto <D.22147>;
          <D.22146>:
          D.22148 = def->dreg;
          D.22081 = ins->sreg1;
          if (D.22148 == D.22081) goto <D.22149>; else goto <D.22150>;
          <D.22149>:
          D.22081 = ins->sreg1;
          D.22141 = (unsigned int) D.22081;
          D.22151 = D.22141 / 32;
          D.22152 = used->data[D.22151];
          D.22081 = ins->sreg1;
          D.22153 = D.22081 & 31;
          D.22154 = 1 << D.22153;
          D.22155 = D.22152 & D.22154;
          if (D.22155 == 0) goto <D.22156>; else goto <D.22157>;
          <D.22156>:
          D.22131 = def->opcode;
          D.22158 = D.22131 + 65162;
          if (D.22158 > 13) goto <D.22159>; else goto <D.22160>;
          <D.22159>:
          D.22081 = ins->sreg1;
          D.22161 = *spec;
          D.22162 = (int) D.22161;
          D.22163 = reg_is_softreg (D.22081, D.22162);
          if (D.22163 != 0) goto <D.22164>; else goto <D.22165>;
          <D.22164>:
          D.22166 = mono_is_simd_accessor (def);
          if (D.22166 == 0) goto <D.22167>; else goto <D.22168>;
          <D.22167>:
          D.22169 = cfg->verbose_level;
          if (D.22169 > 2) goto <D.22170>; else goto <D.22171>;
          <D.22170>:
          D.22172 = bb->block_num;
          printf ("\tReverse copyprop in BB%d on ", D.22172);
          mono_print_ins (ins);
          <D.22171>:
          D.22059 = ins->dreg;
          def->dreg = D.22059;
          D.22107 = ins->prev;
          if (D.22107 != 0B) goto <D.22173>; else goto <D.22174>;
          <D.22173>:
          D.22107 = ins->prev;
          D.22110 = ins->next;
          D.22107->next = D.22110;
          <D.22174>:
          D.22110 = ins->next;
          if (D.22110 != 0B) goto <D.22175>; else goto <D.22176>;
          <D.22175>:
          D.22110 = ins->next;
          D.22107 = ins->prev;
          D.22110->prev = D.22107;
          <D.22176>:
          D.22113 = bb->code;
          if (D.22113 == ins) goto <D.22177>; else goto <D.22178>;
          <D.22177>:
          D.22110 = ins->next;
          bb->code = D.22110;
          <D.22178>:
          D.22116 = bb->last_ins;
          if (D.22116 == ins) goto <D.22179>; else goto <D.22180>;
          <D.22179>:
          D.22107 = ins->prev;
          bb->last_ins = D.22107;
          <D.22180>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22083 = ins->sreg3;
          ins->sreg2 = D.22083;
          D.22082 = ins->sreg2;
          ins->sreg1 = D.22082;
          D.22052 = ins->opcode;
          D.22053 = (int) D.22052;
          D.22054 = D.22053 + -313;
          D.22055 = D.22054 * 4;
          spec = &ins_info[D.22055];
          <D.22168>:
          <D.22165>:
          <D.22160>:
          <D.22157>:
          <D.22150>:
          <D.22147>:
          <D.22136>:
        }
        <D.22128>:
        <D.22125>:
        D.22059 = ins->dreg;
        D.22161 = *spec;
        D.22162 = (int) D.22161;
        D.22181 = reg_is_softreg_no_fpstack (D.22059, D.22162);
        if (D.22181 != 0) goto <D.22182>; else goto <D.22183>;
        <D.22182>:
        D.22059 = ins->dreg;
        D.22060 = (unsigned int) D.22059;
        D.22187 = D.22060 / 32;
        D.22188 = used->data[D.22187];
        D.22059 = ins->dreg;
        D.22063 = D.22059 & 31;
        D.22064 = 1 << D.22063;
        D.22189 = D.22188 & D.22064;
        if (D.22189 == 0) goto <D.22190>; else goto <D.22191>;
        <D.22190>:
        D.22059 = ins->dreg;
        D.22192 = (unsigned int) D.22059;
        D.22138 = cfg->vreg_to_inst_len;
        if (D.22192 >= D.22138) goto <D.22186>; else goto <D.22193>;
        <D.22193>:
        D.22140 = cfg->vreg_to_inst;
        D.22059 = ins->dreg;
        D.22060 = (unsigned int) D.22059;
        D.22194 = D.22060 * 4;
        D.22195 = D.22140 + D.22194;
        D.22196 = *D.22195;
        if (D.22196 == 0B) goto <D.22186>; else goto <D.22197>;
        <D.22197>:
        D.22198 = BIT_FIELD_REF <*bb, 32, 896>;
        D.22199 = D.22198 & 524288;
        if (D.22199 == 0) goto <D.22200>; else goto <D.22185>;
        <D.22200>:
        D.22059 = ins->dreg;
        D.22192 = (unsigned int) D.22059;
        D.22138 = cfg->vreg_to_inst_len;
        if (D.22192 < D.22138) goto <D.22204>; else goto <D.22202>;
        <D.22204>:
        D.22140 = cfg->vreg_to_inst;
        D.22059 = ins->dreg;
        D.22060 = (unsigned int) D.22059;
        D.22194 = D.22060 * 4;
        D.22195 = D.22140 + D.22194;
        D.22196 = *D.22195;
        if (D.22196 != 0B) goto <D.22205>; else goto <D.22202>;
        <D.22205>:
        D.22059 = ins->dreg;
        D.22192 = (unsigned int) D.22059;
        D.22138 = cfg->vreg_to_inst_len;
        if (D.22192 < D.22138) goto <D.22207>; else goto <D.22208>;
        <D.22207>:
        D.22140 = cfg->vreg_to_inst;
        D.22059 = ins->dreg;
        D.22060 = (unsigned int) D.22059;
        D.22194 = D.22060 * 4;
        D.22195 = D.22140 + D.22194;
        iftmp.16 = *D.22195;
        goto <D.22209>;
        <D.22208>:
        iftmp.16 = 0B;
        <D.22209>:
        D.22210 = iftmp.16->flags;
        D.22211 = (int) D.22210;
        D.22212 = D.22211 & 20;
        if (D.22212 != 0) goto <D.22213>; else goto <D.22202>;
        <D.22213>:
        iftmp.15 = 1;
        goto <D.22203>;
        <D.22202>:
        iftmp.15 = 0;
        <D.22203>:
        D.22214 = iftmp.15 != 0;
        D.22215 = (long int) D.22214;
        D.22216 = __builtin_expect (D.22215, 0);
        if (D.22216 == 0) goto <D.22217>; else goto <D.22185>;
        <D.22217>:
        D.22059 = ins->dreg;
        D.22060 = (unsigned int) D.22059;
        D.22187 = D.22060 / 32;
        D.22218 = defined->data[D.22187];
        D.22059 = ins->dreg;
        D.22063 = D.22059 & 31;
        D.22064 = 1 << D.22063;
        D.22219 = D.22218 & D.22064;
        if (D.22219 != 0) goto <D.22186>; else goto <D.22185>;
        <D.22186>:
        D.22052 = ins->opcode;
        if (D.22052 == 424) goto <D.22184>; else goto <D.22220>;
        <D.22220>:
        D.22052 = ins->opcode;
        if (D.22052 == 426) goto <D.22184>; else goto <D.22221>;
        <D.22221>:
        D.22052 = ins->opcode;
        if (D.22052 == 427) goto <D.22184>; else goto <D.22222>;
        <D.22222>:
        D.22052 = ins->opcode;
        if (D.22052 == 362) goto <D.22184>; else goto <D.22223>;
        <D.22223>:
        D.22052 = ins->opcode;
        if (D.22052 == 363) goto <D.22184>; else goto <D.22224>;
        <D.22224>:
        D.22052 = ins->opcode;
        if (D.22052 == 428) goto <D.22184>; else goto <D.22225>;
        <D.22225>:
        D.22052 = ins->opcode;
        if (D.22052 == 429) goto <D.22184>; else goto <D.22226>;
        <D.22226>:
        D.22052 = ins->opcode;
        if (D.22052 == 365) goto <D.22184>; else goto <D.22227>;
        <D.22227>:
        D.22052 = ins->opcode;
        if (D.22052 == 538) goto <D.22184>; else goto <D.22228>;
        <D.22228>:
        D.22052 = ins->opcode;
        if (D.22052 == 626) goto <D.22184>; else goto <D.22229>;
        <D.22229>:
        D.22052 = ins->opcode;
        if (D.22052 == 625) goto <D.22184>; else goto <D.22230>;
        <D.22230>:
        D.22052 = ins->opcode;
        if (D.22052 == 492) goto <D.22184>; else goto <D.22231>;
        <D.22231>:
        D.22052 = ins->opcode;
        if (D.22052 == 566) goto <D.22184>; else goto <D.22232>;
        <D.22232>:
        D.22052 = ins->opcode;
        if (D.22052 == 817) goto <D.22184>; else goto <D.22233>;
        <D.22233>:
        D.22052 = ins->opcode;
        if (D.22052 == 635) goto <D.22184>; else goto <D.22234>;
        <D.22234>:
        D.22052 = ins->opcode;
        if (D.22052 == 636) goto <D.22184>; else goto <D.22235>;
        <D.22235>:
        D.22052 = ins->opcode;
        if (D.22052 == 637) goto <D.22184>; else goto <D.22236>;
        <D.22236>:
        D.22052 = ins->opcode;
        if (D.22052 == 632) goto <D.22184>; else goto <D.22237>;
        <D.22237>:
        D.22052 = ins->opcode;
        if (D.22052 == 591) goto <D.22184>; else goto <D.22238>;
        <D.22238>:
        D.22052 = ins->opcode;
        if (D.22052 == 580) goto <D.22184>; else goto <D.22239>;
        <D.22239>:
        D.22052 = ins->opcode;
        if (D.22052 == 762) goto <D.22184>; else goto <D.22240>;
        <D.22240>:
        D.22052 = ins->opcode;
        if (D.22052 == 503) goto <D.22184>; else goto <D.22241>;
        <D.22241>:
        D.22052 = ins->opcode;
        if (D.22052 == 590) goto <D.22184>; else goto <D.22242>;
        <D.22242>:
        D.22052 = ins->opcode;
        if (D.22052 == 581) goto <D.22184>; else goto <D.22243>;
        <D.22243>:
        D.22052 = ins->opcode;
        if (D.22052 == 495) goto <D.22184>; else goto <D.22244>;
        <D.22244>:
        D.22052 = ins->opcode;
        if (D.22052 == 314) goto <D.22184>; else goto <D.22245>;
        <D.22245>:
        D.22052 = ins->opcode;
        if (D.22052 == 319) goto <D.22184>; else goto <D.22246>;
        <D.22246>:
        D.22052 = ins->opcode;
        if (D.22052 == 316) goto <D.22184>; else goto <D.22247>;
        <D.22247>:
        D.22052 = ins->opcode;
        if (D.22052 == 765) goto <D.22184>; else goto <D.22248>;
        <D.22248>:
        D.22052 = ins->opcode;
        if (D.22052 == 799) goto <D.22184>; else goto <D.22185>;
        <D.22184>:
        D.22107 = ins->prev;
        if (D.22107 != 0B) goto <D.22249>; else goto <D.22250>;
        <D.22249>:
        D.22107 = ins->prev;
        D.22251 = D.22107->opcode;
        if (D.22251 == 327) goto <D.22252>; else goto <D.22253>;
        <D.22252>:
        {
          struct MonoInst * prev;

          prev = ins->prev;
          prev->opcode = 316;
          prev->dreg = -1;
          prev->sreg3 = -1;
          D.22254 = prev->sreg3;
          prev->sreg2 = D.22254;
          D.22255 = prev->sreg2;
          prev->sreg1 = D.22255;
        }
        <D.22253>:
        <D.22250>:
        D.22107 = ins->prev;
        if (D.22107 != 0B) goto <D.22256>; else goto <D.22257>;
        <D.22256>:
        D.22107 = ins->prev;
        D.22110 = ins->next;
        D.22107->next = D.22110;
        <D.22257>:
        D.22110 = ins->next;
        if (D.22110 != 0B) goto <D.22258>; else goto <D.22259>;
        <D.22258>:
        D.22110 = ins->next;
        D.22107 = ins->prev;
        D.22110->prev = D.22107;
        <D.22259>:
        D.22113 = bb->code;
        if (D.22113 == ins) goto <D.22260>; else goto <D.22261>;
        <D.22260>:
        D.22110 = ins->next;
        bb->code = D.22110;
        <D.22261>:
        D.22116 = bb->last_ins;
        if (D.22116 == ins) goto <D.22262>; else goto <D.22263>;
        <D.22262>:
        D.22107 = ins->prev;
        bb->last_ins = D.22107;
        <D.22263>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.22083 = ins->sreg3;
        ins->sreg2 = D.22083;
        D.22082 = ins->sreg2;
        ins->sreg1 = D.22082;
        D.22052 = ins->opcode;
        D.22053 = (int) D.22052;
        D.22054 = D.22053 + -313;
        D.22055 = D.22054 * 4;
        spec = &ins_info[D.22055];
        <D.22185>:
        <D.22191>:
        D.22161 = *spec;
        if (D.22161 != 32) goto <D.22264>; else goto <D.22265>;
        <D.22264>:
        D.22059 = ins->dreg;
        D.22060 = (unsigned int) D.22059;
        D.22266 = D.22060 / 32;
        D.22267 = used->data[D.22266];
        D.22059 = ins->dreg;
        D.22063 = D.22059 & 31;
        D.22064 = 1 << D.22063;
        D.22065 = ~D.22064;
        D.22268 = D.22267 & D.22065;
        used->data[D.22266] = D.22268;
        <D.22265>:
        <D.22183>:
        D.22161 = *spec;
        if (D.22161 != 32) goto <D.22269>; else goto <D.22270>;
        <D.22269>:
        D.22059 = ins->dreg;
        D.22060 = (unsigned int) D.22059;
        D.22271 = D.22060 / 32;
        D.22272 = defined->data[D.22271];
        D.22059 = ins->dreg;
        D.22063 = D.22059 & 31;
        D.22064 = 1 << D.22063;
        D.22273 = D.22272 | D.22064;
        defined->data[D.22271] = D.22273;
        <D.22270>:
        D.22081 = ins->sreg1;
        sregs[0] = D.22081;
        D.22082 = ins->sreg2;
        sregs[1] = D.22082;
        D.22083 = ins->sreg3;
        sregs[2] = D.22083;
        D.22052 = ins->opcode;
        D.22053 = (int) D.22052;
        D.22054 = D.22053 + -313;
        D.22084 = ins_sreg_counts[D.22054];
        num_sregs = (int) D.22084;
        i = 0;
        goto <D.21613>;
        <D.21612>:
        D.22274 = sregs[i];
        D.22275 = (unsigned int) D.22274;
        D.22276 = D.22275 / 32;
        D.22277 = used->data[D.22276];
        D.22274 = sregs[i];
        D.22278 = D.22274 & 31;
        D.22279 = 1 << D.22278;
        D.22280 = D.22277 | D.22279;
        used->data[D.22276] = D.22280;
        i = i + 1;
        <D.21613>:
        if (i < num_sregs) goto <D.21612>; else goto <D.21614>;
        <D.21614>:
        D.22052 = ins->opcode;
        D.22281 = D.22052 + 65162;
        if (D.22281 <= 13) goto <D.22282>; else goto <D.22283>;
        <D.22282>:
        D.22059 = ins->dreg;
        D.22060 = (unsigned int) D.22059;
        D.22284 = D.22060 / 32;
        D.22285 = used->data[D.22284];
        D.22059 = ins->dreg;
        D.22063 = D.22059 & 31;
        D.22064 = 1 << D.22063;
        D.22286 = D.22285 | D.22064;
        used->data[D.22284] = D.22286;
        <D.22283>:
        D.22052 = ins->opcode;
        D.22289 = D.22052 + 65193;
        if (D.22289 <= 2) goto <D.22287>; else goto <D.22290>;
        <D.22290>:
        D.22052 = ins->opcode;
        D.22291 = D.22052 + 65187;
        if (D.22291 <= 2) goto <D.22287>; else goto <D.22292>;
        <D.22292>:
        D.22052 = ins->opcode;
        D.22293 = D.22052 + 65184;
        if (D.22293 <= 2) goto <D.22287>; else goto <D.22294>;
        <D.22294>:
        D.22052 = ins->opcode;
        D.22295 = D.22052 + 65181;
        if (D.22295 <= 2) goto <D.22287>; else goto <D.22296>;
        <D.22296>:
        D.22052 = ins->opcode;
        D.22297 = D.22052 + 65190;
        if (D.22297 <= 2) goto <D.22287>; else goto <D.22298>;
        <D.22298>:
        D.22052 = ins->opcode;
        D.22299 = D.22052 + 65178;
        if (D.22299 <= 2) goto <D.22287>; else goto <D.22300>;
        <D.22300>:
        D.22052 = ins->opcode;
        if (D.22052 == 444) goto <D.22287>; else goto <D.22288>;
        <D.22287>:
        {
          struct MonoCallInst * call;
          struct GSList * l;

          call = ins;
          D.22301 = call->out_ireg_args;
          if (D.22301 != 0B) goto <D.22302>; else goto <D.22303>;
          <D.22302>:
          l = call->out_ireg_args;
          goto <D.21620>;
          <D.21619>:
          {
            guint32 regpair;
            guint32 reg;

            D.22304 = l->data;
            regpair = (guint32) D.22304;
            reg = regpair & 16777215;
            D.22305 = reg / 32;
            D.22306 = used->data[D.22305];
            reg.17 = (int) reg;
            D.22308 = reg.17 & 31;
            D.22309 = 1 << D.22308;
            D.22310 = D.22306 | D.22309;
            used->data[D.22305] = D.22310;
          }
          l = l->next;
          <D.21620>:
          if (l != 0B) goto <D.21619>; else goto <D.21621>;
          <D.21621>:
          <D.22303>:
          D.22311 = call->out_freg_args;
          if (D.22311 != 0B) goto <D.22312>; else goto <D.22313>;
          <D.22312>:
          l = call->out_freg_args;
          goto <D.21625>;
          <D.21624>:
          {
            guint32 regpair;
            guint32 reg;

            D.22304 = l->data;
            regpair = (guint32) D.22304;
            reg = regpair & 16777215;
            D.22314 = reg / 32;
            D.22315 = used->data[D.22314];
            reg.18 = (int) reg;
            D.22317 = reg.18 & 31;
            D.22318 = 1 << D.22317;
            D.22319 = D.22315 | D.22318;
            used->data[D.22314] = D.22319;
          }
          l = l->next;
          <D.21625>:
          if (l != 0B) goto <D.21624>; else goto <D.21626>;
          <D.21626>:
          <D.22313>:
        }
        <D.22288>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  <D.21605>:
  ins = prev;
  if (ins != 0B) goto <D.22321>; else goto <D.22322>;
  <D.22321>:
  iftmp.19 = ins->prev;
  goto <D.22323>;
  <D.22322>:
  iftmp.19 = 0B;
  <D.22323>:
  prev = iftmp.19;
  <D.21628>:
  if (ins != 0B) goto <D.21627>; else goto <D.21629>;
  <D.21629>:
  bb = bb->next_bb;
  <D.21631>:
  if (bb != 0B) goto <D.21630>; else goto <D.21632>;
  <D.21632>:
}


mono_bitset_mp_new_noinit (struct MonoMemPool * mp, guint32 max_size)
{
  unsigned int D.22326;
  unsigned int size.20;
  struct MonoBitSet * D.22328;
  int size;
  void * mem;

  D.22326 = mono_bitset_alloc_size (max_size, 0);
  size = (int) D.22326;
  size.20 = (unsigned int) size;
  mem = mono_mempool_alloc (mp, size.20);
  D.22328 = mono_bitset_mem_new (mem, max_size, 1);
  return D.22328;
}


reg_is_softreg (int reg, const char spec)
{
  gboolean D.22330;
  int iftmp.21;

  if (spec == 105) goto <D.22332>; else goto <D.22337>;
  <D.22337>:
  if (spec == 102) goto <D.22332>; else goto <D.22333>;
  <D.22332>:
  if (reg > 31) goto <D.22334>; else goto <D.22333>;
  <D.22333>:
  if (spec == 118) goto <D.22334>; else goto <D.22335>;
  <D.22334>:
  iftmp.21 = 1;
  goto <D.22336>;
  <D.22335>:
  iftmp.21 = 0;
  <D.22336>:
  D.22330 = iftmp.21;
  return D.22330;
}


mono_is_simd_accessor (struct MonoInst * ins)
{
  short unsigned int D.22339;
  int D.22340;
  gboolean D.22341;

  D.22339 = ins->opcode;
  D.22340 = (int) D.22339;
  switch (D.22340) <default: <D.21582>>
  <D.21582>:
  D.22341 = 0;
  return D.22341;
}


reg_is_softreg_no_fpstack (int reg, const char spec)
{
  gboolean D.22343;
  int iftmp.22;

  if (spec == 105) goto <D.22345>; else goto <D.22350>;
  <D.22350>:
  if (spec == 102) goto <D.22345>; else goto <D.22346>;
  <D.22345>:
  if (reg > 31) goto <D.22347>; else goto <D.22346>;
  <D.22346>:
  if (spec == 118) goto <D.22347>; else goto <D.22348>;
  <D.22347>:
  iftmp.22 = 1;
  goto <D.22349>;
  <D.22348>:
  iftmp.22 = 0;
  <D.22349>:
  D.22343 = iftmp.22;
  return D.22343;
}


