mono_local_cprop (struct MonoCompile * cfg)
{
  unsigned int D.24469;
  struct MonoMemPool * D.24470;
  unsigned int D.24471;
  unsigned int D.24472;
  int D.24473;
  unsigned int D.24478;
  unsigned int D.24479;
  struct MonoInst * * D.24480;
  sizetype D.24481;
  sizetype D.24482;
  sizetype D.24483;
  struct MonoInst * * D.24484;
  int D.24485;
  int D.24486;
  int D.24487;
  short unsigned int D.24488;
  int D.24489;
  int D.24490;
  signed char D.24491;
  unsigned int sreg.0;
  unsigned int D.24495;
  struct MonoInst * * D.24496;
  sizetype sreg.1;
  sizetype D.24498;
  sizetype D.24499;
  struct MonoInst * * D.24500;
  int D.24501;
  struct MonoInst * D.24504;
  struct MonoInst * D.24507;
  struct MonoInst * D.24510;
  struct MonoInst * D.24513;
  _Bool D.24516;
  long int D.24517;
  long int D.24518;
  int D.24523;
  unsigned int D.24524;
  unsigned int D.24525;
  struct MonoInst * * D.24526;
  short unsigned int D.24527;
  _Bool D.24530;
  _Bool D.24531;
  _Bool D.24532;
  unsigned int sreg.2;
  unsigned int D.24536;
  struct MonoInst * * D.24537;
  struct MonoInst * D.24538;
  short unsigned int D.24543;
  int D.24546;
  unsigned int D.24547;
  unsigned int D.24548;
  struct MonoInst * * D.24549;
  struct MonoInst * D.24550;
  gint32 * D.24552;
  int D.24553;
  gint32 * D.24554;
  int D.24555;
  int iftmp.3;
  unsigned int D.24559;
  unsigned int D.24560;
  struct MonoInst * * D.24562;
  struct MonoInst * * D.24563;
  struct MonoInst * D.24564;
  struct MonoInst * iftmp.4;
  unsigned char D.24570;
  int D.24571;
  int D.24572;
  _Bool D.24574;
  long int D.24575;
  long int D.24576;
  unsigned int D.24579;
  int D.24582;
  sizetype D.24583;
  const char * D.24584;
  char D.24585;
  _Bool D.24588;
  _Bool D.24589;
  _Bool D.24590;
  short unsigned int D.24599;
  _Bool D.24600;
  _Bool D.24601;
  _Bool D.24602;
  short unsigned int D.24604;
  int D.24605;
  unsigned int D.24606;
  unsigned int D.24607;
  struct MonoInst * * D.24608;
  struct MonoInst * D.24609;
  gint32 * D.24611;
  int D.24612;
  int iftmp.5;
  unsigned int D.24616;
  struct MonoInst * * D.24618;
  struct MonoInst * D.24619;
  struct MonoInst * iftmp.6;
  unsigned char D.24625;
  int D.24626;
  int D.24627;
  _Bool D.24629;
  long int D.24630;
  long int D.24631;
  struct MonoInst * D.24638;
  int D.24652;
  long long int D.24653;
  int D.24654;
  unsigned int D.24659;
  unsigned int D.24660;
  struct MonoInst * * D.24661;
  struct MonoInst * D.24662;
  short unsigned int D.24664;
  unsigned int D.24666;
  unsigned int D.24667;
  struct MonoInst * * D.24668;
  struct MonoInst * D.24669;
  int D.24682;
  int D.24686;
  short unsigned int D.24689;
  int D.24692;
  _Bool D.24696;
  _Bool D.24697;
  _Bool D.24698;
  _Bool D.24700;
  _Bool D.24701;
  _Bool D.24702;
  int D.24703;
  const void * D.24704;
  int D.24705;
  _Bool D.24706;
  _Bool D.24707;
  _Bool D.24708;
  int D.24711;
  int D.24714;
  int D.24715;
  short unsigned int D.24718;
  _Bool D.24719;
  _Bool D.24720;
  _Bool D.24721;
  short unsigned int D.24723;
  unsigned int D.24727;
  struct MonoInst * D.24729;
  int D.24731;
  int D.24732;
  int D.24739;
  int iftmp.7;
  short unsigned int D.24754;
  _Bool D.24755;
  _Bool D.24756;
  _Bool D.24757;
  int iftmp.8;
  short unsigned int D.24769;
  _Bool D.24770;
  _Bool D.24771;
  _Bool D.24772;
  guint16 iftmp.9;
  unsigned int D.24807;
  guint16 iftmp.10;
  guint16 iftmp.11;
  unsigned int c.12;
  int D.24823;
  int D.24824;
  unsigned int c.13;
  unsigned int D.24831;
  int D.24832;
  struct MonoInst * D.24833;
  int D.24834;
  int D.24835;
  const unsigned char * D.24836;
  int D.24837;
  struct MonoInst * D.24838;
  int D.24839;
  int D.24840;
  int D.24841;
  struct MonoInst * D.24842;
  int D.24843;
  int D.24844;
  unsigned int D.24847;
  int D.24848;
  int D.24849;
  struct MonoInst * D.24850;
  int D.24851;
  int D.24852;
  char D.24854;
  short unsigned int D.24859;
  int D.24862;
  unsigned int D.24863;
  int D.24868;
  int D.24869;
  int iftmp.14;
  unsigned int D.24877;
  struct MonoInst * * D.24879;
  struct MonoInst * D.24880;
  struct MonoInst * iftmp.15;
  unsigned char D.24886;
  int D.24887;
  int D.24888;
  _Bool D.24890;
  long int D.24891;
  long int D.24892;
  gint32 * D.24895;
  short unsigned int D.24898;
  short unsigned int D.24899;
  _Bool D.24900;
  short unsigned int D.24901;
  _Bool D.24902;
  _Bool D.24903;
  short unsigned int D.24905;
  short unsigned int D.24907;
  short unsigned int D.24909;
  short unsigned int D.24911;
  struct MonoBasicBlock * bb;
  struct MonoInst * * defs;
  gint32 * def_index;
  int max;
  void restart = <<< error >>>;

  restart:
  D.24469 = cfg->next_vreg;
  max = (int) D.24469;
  D.24470 = cfg->mempool;
  D.24469 = cfg->next_vreg;
  D.24471 = D.24469 + 1;
  D.24472 = D.24471 * 4;
  defs = mono_mempool_alloc (D.24470, D.24472);
  D.24470 = cfg->mempool;
  D.24469 = cfg->next_vreg;
  D.24471 = D.24469 + 1;
  D.24472 = D.24471 * 4;
  def_index = mono_mempool_alloc (D.24470, D.24472);
  bb = cfg->bb_entry;
  goto <D.24402>;
  <D.24401>:
  {
    struct MonoInst * ins;
    int ins_index;
    int last_call_index;

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

      try
        {
          D.24473 = ins->dreg;
          if (D.24473 != -1) goto <D.24474>; else goto <D.24475>;
          <D.24474>:
          D.24473 = ins->dreg;
          if (D.24473 < max) goto <D.24476>; else goto <D.24477>;
          <D.24476>:
          D.24473 = ins->dreg;
          D.24478 = (unsigned int) D.24473;
          D.24479 = D.24478 * 4;
          D.24480 = defs + D.24479;
          *D.24480 = 0B;
          D.24473 = ins->dreg;
          D.24481 = (sizetype) D.24473;
          D.24482 = D.24481 + 1;
          D.24483 = D.24482 * 4;
          D.24484 = defs + D.24483;
          *D.24484 = 0B;
          <D.24477>:
          <D.24475>:
          D.24485 = ins->sreg1;
          sregs[0] = D.24485;
          D.24486 = ins->sreg2;
          sregs[1] = D.24486;
          D.24487 = ins->sreg3;
          sregs[2] = D.24487;
          D.24488 = ins->opcode;
          D.24489 = (int) D.24488;
          D.24490 = D.24489 + -313;
          D.24491 = ins_sreg_counts[D.24490];
          num_sregs = (int) D.24491;
          i = 0;
          goto <D.24350>;
          <D.24349>:
          {
            int sreg;

            sreg = sregs[i];
            if (sreg < max) goto <D.24492>; else goto <D.24493>;
            <D.24492>:
            sreg.0 = (unsigned int) sreg;
            D.24495 = sreg.0 * 4;
            D.24496 = defs + D.24495;
            *D.24496 = 0B;
            sreg.1 = (sizetype) sreg;
            D.24498 = sreg.1 + 1;
            D.24499 = D.24498 * 4;
            D.24500 = defs + D.24499;
            *D.24500 = 0B;
            <D.24493>:
          }
          i = i + 1;
          <D.24350>:
          if (i < num_sregs) goto <D.24349>; else goto <D.24351>;
          <D.24351>:
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    ins = ins->next;
    <D.24353>:
    if (ins != 0B) goto <D.24352>; else goto <D.24354>;
    <D.24354>:
    ins_index = 0;
    last_call_index = -1;
    ins = bb->code;
    goto <D.24399>;
    <D.24398>:
    {
      const char * spec;
      int regtype;
      int srcindex;
      int sreg;
      int num_sregs;
      int sregs[3];

      try
        {
          D.24488 = ins->opcode;
          D.24489 = (int) D.24488;
          D.24490 = D.24489 + -313;
          D.24501 = D.24490 * 4;
          spec = &ins_info[D.24501];
          D.24488 = ins->opcode;
          if (D.24488 == 316) goto <D.24502>; else goto <D.24503>;
          <D.24502>:
          D.24504 = ins->prev;
          if (D.24504 != 0B) goto <D.24505>; else goto <D.24506>;
          <D.24505>:
          D.24504 = ins->prev;
          D.24507 = ins->next;
          D.24504->next = D.24507;
          <D.24506>:
          D.24507 = ins->next;
          if (D.24507 != 0B) goto <D.24508>; else goto <D.24509>;
          <D.24508>:
          D.24507 = ins->next;
          D.24504 = ins->prev;
          D.24507->prev = D.24504;
          <D.24509>:
          D.24510 = bb->code;
          if (D.24510 == ins) goto <D.24511>; else goto <D.24512>;
          <D.24511>:
          D.24507 = ins->next;
          bb->code = D.24507;
          <D.24512>:
          D.24513 = bb->last_ins;
          if (D.24513 == ins) goto <D.24514>; else goto <D.24515>;
          <D.24514>:
          D.24504 = ins->prev;
          bb->last_ins = D.24504;
          <D.24515>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.24487 = ins->sreg3;
          ins->sreg2 = D.24487;
          D.24486 = ins->sreg2;
          ins->sreg1 = D.24486;
          // predicted unlikely by continue predictor.
          goto <D.24361>;
          <D.24503>:
          D.24488 = ins->opcode;
          D.24516 = D.24488 <= 313;
          D.24517 = (long int) D.24516;
          D.24518 = __builtin_expect (D.24517, 0);
          if (D.24518 != 0) goto <D.24519>; else goto <D.24520>;
          <D.24519>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 105, "ins->opcode > MONO_CEE_LAST");
          <D.24520>:
          D.24488 = ins->opcode;
          if (D.24488 == 314) goto <D.24521>; else goto <D.24522>;
          <D.24521>:
          {
            struct MonoInst * var;

            var = ins->data.op[0].p;
            D.24523 = var->dreg;
            D.24524 = (unsigned int) D.24523;
            D.24525 = D.24524 * 4;
            D.24526 = defs + D.24525;
            *D.24526 = 0B;
          }
          <D.24522>:
          D.24488 = ins->opcode;
          D.24527 = D.24488 + 65162;
          if (D.24527 <= 13) goto <D.24528>; else goto <D.24529>;
          <D.24528>:
          sreg = ins->dreg;
          regtype = 105;
          D.24530 = regtype == 105;
          D.24531 = sreg != -1;
          D.24532 = D.24530 & D.24531;
          if (D.24532 != 0) goto <D.24533>; else goto <D.24534>;
          <D.24533>:
          sreg.2 = (unsigned int) sreg;
          D.24536 = sreg.2 * 4;
          D.24537 = defs + D.24536;
          D.24538 = *D.24537;
          if (D.24538 != 0B) goto <D.24539>; else goto <D.24540>;
          <D.24539>:
          {
            struct MonoInst * def;

            sreg.2 = (unsigned int) sreg;
            D.24536 = sreg.2 * 4;
            D.24537 = defs + D.24536;
            def = *D.24537;
            D.24543 = def->opcode;
            if (D.24543 == 424) goto <D.24544>; else goto <D.24545>;
            <D.24544>:
            D.24546 = def->sreg1;
            D.24547 = (unsigned int) D.24546;
            D.24548 = D.24547 * 4;
            D.24549 = defs + D.24548;
            D.24550 = *D.24549;
            if (D.24550 == 0B) goto <D.24541>; else goto <D.24551>;
            <D.24551>:
            D.24546 = def->sreg1;
            D.24547 = (unsigned int) D.24546;
            D.24548 = D.24547 * 4;
            D.24552 = def_index + D.24548;
            D.24553 = *D.24552;
            sreg.2 = (unsigned int) sreg;
            D.24536 = sreg.2 * 4;
            D.24554 = def_index + D.24536;
            D.24555 = *D.24554;
            if (D.24553 < D.24555) goto <D.24541>; else goto <D.24542>;
            <D.24541>:
            D.24546 = def->sreg1;
            D.24559 = (unsigned int) D.24546;
            D.24560 = cfg->vreg_to_inst_len;
            if (D.24559 < D.24560) goto <D.24561>; else goto <D.24557>;
            <D.24561>:
            D.24562 = cfg->vreg_to_inst;
            D.24546 = def->sreg1;
            D.24547 = (unsigned int) D.24546;
            D.24548 = D.24547 * 4;
            D.24563 = D.24562 + D.24548;
            D.24564 = *D.24563;
            if (D.24564 != 0B) goto <D.24565>; else goto <D.24557>;
            <D.24565>:
            D.24546 = def->sreg1;
            D.24559 = (unsigned int) D.24546;
            D.24560 = cfg->vreg_to_inst_len;
            if (D.24559 < D.24560) goto <D.24567>; else goto <D.24568>;
            <D.24567>:
            D.24562 = cfg->vreg_to_inst;
            D.24546 = def->sreg1;
            D.24547 = (unsigned int) D.24546;
            D.24548 = D.24547 * 4;
            D.24563 = D.24562 + D.24548;
            iftmp.4 = *D.24563;
            goto <D.24569>;
            <D.24568>:
            iftmp.4 = 0B;
            <D.24569>:
            D.24570 = iftmp.4->flags;
            D.24571 = (int) D.24570;
            D.24572 = D.24571 & 20;
            if (D.24572 != 0) goto <D.24573>; else goto <D.24557>;
            <D.24573>:
            iftmp.3 = 1;
            goto <D.24558>;
            <D.24557>:
            iftmp.3 = 0;
            <D.24558>:
            D.24574 = iftmp.3 != 0;
            D.24575 = (long int) D.24574;
            D.24576 = __builtin_expect (D.24575, 0);
            if (D.24576 == 0) goto <D.24577>; else goto <D.24578>;
            <D.24577>:
            {
              int vreg;

              vreg = def->sreg1;
              D.24579 = cfg->verbose_level;
              if (D.24579 > 2) goto <D.24580>; else goto <D.24581>;
              <D.24580>:
              printf ("CCOPY: R%d -> R%d\n", sreg, vreg);
              <D.24581>:
              ins->dreg = vreg;
            }
            <D.24578>:
            <D.24542>:
            <D.24545>:
          }
          <D.24540>:
          <D.24534>:
          <D.24529>:
          D.24485 = ins->sreg1;
          sregs[0] = D.24485;
          D.24486 = ins->sreg2;
          sregs[1] = D.24486;
          D.24487 = ins->sreg3;
          sregs[2] = D.24487;
          D.24488 = ins->opcode;
          D.24489 = (int) D.24488;
          D.24490 = D.24489 + -313;
          D.24491 = ins_sreg_counts[D.24490];
          num_sregs = (int) D.24491;
          srcindex = 0;
          goto <D.24372>;
          <D.24371>:
          {
            struct MonoInst * def;
            int nregs;

            D.24485 = ins->sreg1;
            sregs[0] = D.24485;
            D.24486 = ins->sreg2;
            sregs[1] = D.24486;
            D.24487 = ins->sreg3;
            sregs[2] = D.24487;
            D.24488 = ins->opcode;
            D.24489 = (int) D.24488;
            D.24490 = D.24489 + -313;
            D.24491 = ins_sreg_counts[D.24490];
            nregs = (int) D.24491;
            D.24582 = srcindex + 1;
            D.24583 = (sizetype) D.24582;
            D.24584 = spec + D.24583;
            D.24585 = *D.24584;
            regtype = (int) D.24585;
            sreg = sregs[srcindex];
            D.24588 = regtype == 32;
            D.24589 = sreg == -1;
            D.24590 = D.24588 | D.24589;
            if (D.24590 != 0) goto <D.24586>; else goto <D.24591>;
            <D.24591>:
            sreg.2 = (unsigned int) sreg;
            D.24536 = sreg.2 * 4;
            D.24537 = defs + D.24536;
            D.24538 = *D.24537;
            if (D.24538 == 0B) goto <D.24586>; else goto <D.24587>;
            <D.24586>:
            // predicted unlikely by continue predictor.
            goto <D.24367>;
            <D.24587>:
            sreg.2 = (unsigned int) sreg;
            D.24536 = sreg.2 * 4;
            D.24537 = defs + D.24536;
            def = *D.24537;
            D.24599 = def->opcode;
            D.24600 = D.24599 == 424;
            D.24601 = D.24599 == 426;
            D.24602 = D.24600 | D.24601;
            if (D.24602 != 0) goto <D.24598>; else goto <D.24603>;
            <D.24603>:
            D.24604 = def->opcode;
            if (D.24604 == 427) goto <D.24598>; else goto <D.24597>;
            <D.24598>:
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24608 = defs + D.24607;
            D.24609 = *D.24608;
            if (D.24609 == 0B) goto <D.24596>; else goto <D.24610>;
            <D.24610>:
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24611 = def_index + D.24607;
            D.24612 = *D.24611;
            sreg.2 = (unsigned int) sreg;
            D.24536 = sreg.2 * 4;
            D.24554 = def_index + D.24536;
            D.24555 = *D.24554;
            if (D.24612 < D.24555) goto <D.24596>; else goto <D.24597>;
            <D.24596>:
            D.24605 = def->sreg1;
            D.24616 = (unsigned int) D.24605;
            D.24560 = cfg->vreg_to_inst_len;
            if (D.24616 < D.24560) goto <D.24617>; else goto <D.24614>;
            <D.24617>:
            D.24562 = cfg->vreg_to_inst;
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24618 = D.24562 + D.24607;
            D.24619 = *D.24618;
            if (D.24619 != 0B) goto <D.24620>; else goto <D.24614>;
            <D.24620>:
            D.24605 = def->sreg1;
            D.24616 = (unsigned int) D.24605;
            D.24560 = cfg->vreg_to_inst_len;
            if (D.24616 < D.24560) goto <D.24622>; else goto <D.24623>;
            <D.24622>:
            D.24562 = cfg->vreg_to_inst;
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24618 = D.24562 + D.24607;
            iftmp.6 = *D.24618;
            goto <D.24624>;
            <D.24623>:
            iftmp.6 = 0B;
            <D.24624>:
            D.24625 = iftmp.6->flags;
            D.24626 = (int) D.24625;
            D.24627 = D.24626 & 20;
            if (D.24627 != 0) goto <D.24628>; else goto <D.24614>;
            <D.24628>:
            iftmp.5 = 1;
            goto <D.24615>;
            <D.24614>:
            iftmp.5 = 0;
            <D.24615>:
            D.24629 = iftmp.5 != 0;
            D.24630 = (long int) D.24629;
            D.24631 = __builtin_expect (D.24630, 0);
            if (D.24631 == 0) goto <D.24632>; else goto <D.24633>;
            <D.24632>:
            D.24605 = def->sreg1;
            D.24616 = (unsigned int) D.24605;
            D.24560 = cfg->vreg_to_inst_len;
            if (D.24616 < D.24560) goto <D.24634>; else goto <D.24594>;
            <D.24634>:
            D.24562 = cfg->vreg_to_inst;
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24618 = D.24562 + D.24607;
            D.24619 = *D.24618;
            if (D.24619 != 0B) goto <D.24595>; else goto <D.24594>;
            <D.24594>:
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24608 = defs + D.24607;
            D.24609 = *D.24608;
            if (D.24609 == 0B) goto <D.24595>; else goto <D.24635>;
            <D.24635>:
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24611 = def_index + D.24607;
            D.24612 = *D.24611;
            if (D.24612 >= last_call_index) goto <D.24595>; else goto <D.24636>;
            <D.24636>:
            D.24604 = def->opcode;
            if (D.24604 == 427) goto <D.24595>; else goto <D.24593>;
            <D.24595>:
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24608 = defs + D.24607;
            D.24609 = *D.24608;
            if (D.24609 == 0B) goto <D.24592>; else goto <D.24637>;
            <D.24637>:
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24608 = defs + D.24607;
            D.24609 = *D.24608;
            D.24638 = D.24609->next;
            if (D.24638 != def) goto <D.24592>; else goto <D.24593>;
            <D.24592>:
            if (1 != 0) goto <D.24639>; else goto <D.24640>;
            <D.24639>:
            D.24604 = def->opcode;
            if (D.24604 != 426) goto <D.24641>; else goto <D.24642>;
            <D.24641>:
            {
              int vreg;

              vreg = def->sreg1;
              D.24579 = cfg->verbose_level;
              if (D.24579 > 2) goto <D.24643>; else goto <D.24644>;
              <D.24643>:
              printf ("CCOPY/2: R%d -> R%d\n", sreg, vreg);
              <D.24644>:
              sregs[srcindex] = vreg;
              mono_inst_set_src_registers (ins, &sregs);
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.24367>;
            }
            <D.24642>:
            <D.24640>:
            <D.24593>:
            <D.24633>:
            <D.24597>:
            D.24604 = def->opcode;
            if (D.24604 == 362) goto <D.24650>; else goto <D.24645>;
            <D.24650>:
            if (srcindex == 0) goto <D.24651>; else goto <D.24646>;
            <D.24651>:
            D.24486 = ins->sreg2;
            if (D.24486 == -1) goto <D.24647>; else goto <D.24646>;
            <D.24646>:
            D.24652 = def->data.op[0].const_val;
            D.24653 = (long long int) D.24652;
            D.24654 = mono_arch_is_inst_imm (D.24653);
            if (D.24654 != 0) goto <D.24647>; else goto <D.24645>;
            <D.24645>:
            D.24604 = def->opcode;
            if (D.24604 == 365) goto <D.24647>; else goto <D.24648>;
            <D.24647>:
            {
              guint32 opcode2;

              if (srcindex == 1) goto <D.24657>; else goto <D.24655>;
              <D.24657>:
              D.24485 = ins->sreg1;
              if (D.24485 != -1) goto <D.24658>; else goto <D.24655>;
              <D.24658>:
              D.24485 = ins->sreg1;
              D.24659 = (unsigned int) D.24485;
              D.24660 = D.24659 * 4;
              D.24661 = defs + D.24660;
              D.24662 = *D.24661;
              if (D.24662 != 0B) goto <D.24663>; else goto <D.24655>;
              <D.24663>:
              D.24485 = ins->sreg1;
              D.24659 = (unsigned int) D.24485;
              D.24660 = D.24659 * 4;
              D.24661 = defs + D.24660;
              D.24662 = *D.24661;
              D.24664 = D.24662->opcode;
              if (D.24664 == 362) goto <D.24665>; else goto <D.24655>;
              <D.24665>:
              D.24486 = ins->sreg2;
              D.24666 = (unsigned int) D.24486;
              D.24667 = D.24666 * 4;
              D.24668 = defs + D.24667;
              D.24669 = *D.24668;
              if (D.24669 != 0B) goto <D.24670>; else goto <D.24655>;
              <D.24670>:
              D.24485 = ins->sreg1;
              D.24659 = (unsigned int) D.24485;
              D.24660 = D.24659 * 4;
              D.24661 = defs + D.24660;
              D.24662 = *D.24661;
              D.24486 = ins->sreg2;
              D.24666 = (unsigned int) D.24486;
              D.24667 = D.24666 * 4;
              D.24668 = defs + D.24667;
              D.24669 = *D.24668;
              mono_constant_fold_ins (cfg, ins, D.24662, D.24669, 1);
              goto <D.24656>;
              <D.24655>:
              if (srcindex == 0) goto <D.24673>; else goto <D.24671>;
              <D.24673>:
              D.24486 = ins->sreg2;
              if (D.24486 != -1) goto <D.24674>; else goto <D.24671>;
              <D.24674>:
              D.24486 = ins->sreg2;
              D.24666 = (unsigned int) D.24486;
              D.24667 = D.24666 * 4;
              D.24668 = defs + D.24667;
              D.24669 = *D.24668;
              if (D.24669 != 0B) goto <D.24675>; else goto <D.24671>;
              <D.24675>:
              {
                int opcode;

                D.24488 = ins->opcode;
                opcode = (int) D.24488;
                D.24485 = ins->sreg1;
                D.24659 = (unsigned int) D.24485;
                D.24660 = D.24659 * 4;
                D.24661 = defs + D.24660;
                D.24662 = *D.24661;
                D.24486 = ins->sreg2;
                D.24666 = (unsigned int) D.24486;
                D.24667 = D.24666 * 4;
                D.24668 = defs + D.24667;
                D.24669 = *D.24668;
                mono_constant_fold_ins (cfg, ins, D.24662, D.24669, 1);
                D.24488 = ins->opcode;
                D.24489 = (int) D.24488;
                if (D.24489 != opcode) goto <D.24676>; else goto <D.24677>;
                <D.24676>:
                srcindex = -1;
                // predicted unlikely by continue predictor.
                goto <D.24367>;
                <D.24677>:
              }
              goto <D.24672>;
              <D.24671>:
              if (srcindex == 0) goto <D.24678>; else goto <D.24679>;
              <D.24678>:
              D.24486 = ins->sreg2;
              if (D.24486 == -1) goto <D.24680>; else goto <D.24681>;
              <D.24680>:
              D.24485 = ins->sreg1;
              D.24659 = (unsigned int) D.24485;
              D.24660 = D.24659 * 4;
              D.24661 = defs + D.24660;
              D.24662 = *D.24661;
              mono_constant_fold_ins (cfg, ins, D.24662, 0B, 1);
              <D.24681>:
              <D.24679>:
              <D.24672>:
              <D.24656>:
              D.24488 = ins->opcode;
              D.24489 = (int) D.24488;
              D.24682 = mono_op_to_op_imm (D.24489);
              opcode2 = (guint32) D.24682;
              if (opcode2 != 4294967295) goto <D.24685>; else goto <D.24683>;
              <D.24685>:
              D.24652 = def->data.op[0].const_val;
              D.24653 = (long long int) D.24652;
              D.24686 = mono_arch_is_inst_imm (D.24653);
              if (D.24686 != 0) goto <D.24687>; else goto <D.24683>;
              <D.24687>:
              if (srcindex == 1) goto <D.24684>; else goto <D.24688>;
              <D.24688>:
              D.24486 = ins->sreg2;
              if (D.24486 == -1) goto <D.24684>; else goto <D.24683>;
              <D.24684>:
              D.24689 = (short unsigned int) opcode2;
              ins->opcode = D.24689;
              D.24604 = def->opcode;
              if (D.24604 == 363) goto <D.24690>; else goto <D.24691>;
              <D.24690>:
              D.24652 = def->data.op[0].const_val;
              ins->data.op[0].const_val = D.24652;
              D.24692 = def->data.op[1].const_val;
              ins->data.op[1].const_val = D.24692;
              goto <D.24693>;
              <D.24691>:
              D.24652 = def->data.op[0].const_val;
              ins->data.op[1].const_val = D.24652;
              <D.24693>:
              sregs[srcindex] = -1;
              mono_inst_set_src_registers (ins, &sregs);
              D.24696 = opcode2 == 343;
              D.24697 = opcode2 == 346;
              D.24698 = D.24696 | D.24697;
              if (D.24698 != 0) goto <D.24694>; else goto <D.24699>;
              <D.24699>:
              D.24700 = opcode2 == 352;
              D.24701 = opcode2 == 349;
              D.24702 = D.24700 | D.24701;
              if (D.24702 != 0) goto <D.24694>; else goto <D.24695>;
              <D.24694>:
              D.24703 = ins->data.op[1].const_val;
              D.24704 = (const void *) D.24703;
              MEM[(struct MonoCallInst *)ins].fptr = D.24704;
              <D.24695>:
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.24367>;
              <D.24683>:
              D.24488 = ins->opcode;
              D.24489 = (int) D.24488;
              D.24705 = mono_load_membase_to_load_mem (D.24489);
              opcode2 = (guint32) D.24705;
              D.24706 = srcindex == 0;
              D.24707 = opcode2 != 4294967295;
              D.24708 = D.24706 & D.24707;
              if (D.24708 != 0) goto <D.24709>; else goto <D.24710>;
              <D.24709>:
              D.24652 = def->data.op[0].const_val;
              D.24653 = (long long int) D.24652;
              D.24711 = mono_arch_is_inst_imm (D.24653);
              if (D.24711 != 0) goto <D.24712>; else goto <D.24713>;
              <D.24712>:
              D.24689 = (short unsigned int) opcode2;
              ins->opcode = D.24689;
              D.24652 = def->data.op[0].const_val;
              D.24714 = ins->data.op[0].const_val;
              D.24715 = D.24652 + D.24714;
              ins->data.op[1].const_val = D.24715;
              ins->sreg1 = -1;
              <D.24713>:
              <D.24710>:
            }
            goto <D.24649>;
            <D.24648>:
            D.24718 = def->opcode;
            D.24719 = D.24718 == 429;
            D.24720 = D.24718 == 538;
            D.24721 = D.24719 | D.24720;
            if (D.24721 != 0) goto <D.24722>; else goto <D.24716>;
            <D.24722>:
            D.24488 = ins->opcode;
            D.24723 = D.24488 + 65148;
            if (D.24723 <= 11) goto <D.24724>; else goto <D.24716>;
            <D.24724>:
            D.24605 = def->sreg1;
            D.24616 = (unsigned int) D.24605;
            D.24727 = cfg->frame_reg;
            if (D.24616 == D.24727) goto <D.24725>; else goto <D.24728>;
            <D.24728>:
            D.24729 = def->next;
            if (D.24729 == ins) goto <D.24730>; else goto <D.24726>;
            <D.24730>:
            D.24731 = def->dreg;
            D.24605 = def->sreg1;
            if (D.24731 != D.24605) goto <D.24725>; else goto <D.24726>;
            <D.24725>:
            D.24605 = def->sreg1;
            ins->sreg1 = D.24605;
            D.24714 = ins->data.op[0].const_val;
            D.24692 = def->data.op[1].const_val;
            D.24732 = D.24714 + D.24692;
            ins->data.op[0].const_val = D.24732;
            <D.24726>:
            goto <D.24717>;
            <D.24716>:
            D.24488 = ins->opcode;
            if (D.24488 == 626) goto <D.24735>; else goto <D.24733>;
            <D.24735>:
            D.24604 = def->opcode;
            if (D.24604 == 625) goto <D.24736>; else goto <D.24733>;
            <D.24736>:
            D.24729 = def->next;
            if (D.24729 == ins) goto <D.24737>; else goto <D.24733>;
            <D.24737>:
            D.24731 = def->dreg;
            D.24605 = def->sreg1;
            if (D.24731 != D.24605) goto <D.24738>; else goto <D.24733>;
            <D.24738>:
            D.24605 = def->sreg1;
            ins->sreg1 = D.24605;
            D.24703 = ins->data.op[1].const_val;
            D.24692 = def->data.op[1].const_val;
            D.24739 = D.24703 - D.24692;
            ins->data.op[1].const_val = D.24739;
            goto <D.24734>;
            <D.24733>:
            D.24488 = ins->opcode;
            if (D.24488 == 625) goto <D.24742>; else goto <D.24740>;
            <D.24742>:
            D.24604 = def->opcode;
            if (D.24604 == 626) goto <D.24743>; else goto <D.24740>;
            <D.24743>:
            D.24729 = def->next;
            if (D.24729 == ins) goto <D.24744>; else goto <D.24740>;
            <D.24744>:
            D.24731 = def->dreg;
            D.24605 = def->sreg1;
            if (D.24731 != D.24605) goto <D.24745>; else goto <D.24740>;
            <D.24745>:
            D.24605 = def->sreg1;
            ins->sreg1 = D.24605;
            D.24703 = ins->data.op[1].const_val;
            D.24692 = def->data.op[1].const_val;
            D.24739 = D.24703 - D.24692;
            ins->data.op[1].const_val = D.24739;
            goto <D.24741>;
            <D.24740>:
            D.24488 = ins->opcode;
            if (D.24488 == 375) goto <D.24749>; else goto <D.24746>;
            <D.24749>:
            D.24754 = def->opcode;
            D.24755 = D.24754 == 591;
            D.24756 = D.24754 == 580;
            D.24757 = D.24755 | D.24756;
            if (D.24757 != 0) goto <D.24751>; else goto <D.24758>;
            <D.24758>:
            D.24604 = def->opcode;
            if (D.24604 == 762) goto <D.24751>; else goto <D.24752>;
            <D.24751>:
            iftmp.7 = 1;
            goto <D.24753>;
            <D.24752>:
            iftmp.7 = 0;
            <D.24753>:
            if (iftmp.7 != 0) goto <D.24759>; else goto <D.24746>;
            <D.24759>:
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24608 = defs + D.24607;
            D.24609 = *D.24608;
            if (D.24609 == 0B) goto <D.24747>; else goto <D.24760>;
            <D.24760>:
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24611 = def_index + D.24607;
            D.24612 = *D.24611;
            sreg.2 = (unsigned int) sreg;
            D.24536 = sreg.2 * 4;
            D.24554 = def_index + D.24536;
            D.24555 = *D.24554;
            if (D.24612 < D.24555) goto <D.24747>; else goto <D.24746>;
            <D.24747>:
            D.24605 = def->sreg1;
            ins->sreg1 = D.24605;
            goto <D.24748>;
            <D.24746>:
            D.24488 = ins->opcode;
            if (D.24488 == 376) goto <D.24763>; else goto <D.24764>;
            <D.24763>:
            D.24769 = def->opcode;
            D.24770 = D.24769 == 590;
            D.24771 = D.24769 == 581;
            D.24772 = D.24770 | D.24771;
            if (D.24772 != 0) goto <D.24766>; else goto <D.24773>;
            <D.24773>:
            D.24604 = def->opcode;
            if (D.24604 == 762) goto <D.24766>; else goto <D.24767>;
            <D.24766>:
            iftmp.8 = 1;
            goto <D.24768>;
            <D.24767>:
            iftmp.8 = 0;
            <D.24768>:
            if (iftmp.8 != 0) goto <D.24774>; else goto <D.24775>;
            <D.24774>:
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24608 = defs + D.24607;
            D.24609 = *D.24608;
            if (D.24609 == 0B) goto <D.24761>; else goto <D.24776>;
            <D.24776>:
            D.24605 = def->sreg1;
            D.24606 = (unsigned int) D.24605;
            D.24607 = D.24606 * 4;
            D.24611 = def_index + D.24607;
            D.24612 = *D.24611;
            sreg.2 = (unsigned int) sreg;
            D.24536 = sreg.2 * 4;
            D.24554 = def_index + D.24536;
            D.24555 = *D.24554;
            if (D.24612 < D.24555) goto <D.24761>; else goto <D.24762>;
            <D.24761>:
            D.24605 = def->sreg1;
            ins->sreg1 = D.24605;
            <D.24762>:
            <D.24775>:
            <D.24764>:
            <D.24748>:
            <D.24741>:
            <D.24734>:
            <D.24717>:
            <D.24649>:
          }
          <D.24367>:
          srcindex = srcindex + 1;
          <D.24372>:
          if (srcindex < num_sregs) goto <D.24371>; else goto <D.24373>;
          <D.24373>:
          D.24488 = ins->opcode;
          D.24489 = (int) D.24488;
          switch (D.24489) <default: <D.24853>, case 424: <D.24374>, case 429: <D.24377>, case 430: <D.24379>, case 431: <D.24381>, case 625: <D.24378>, case 626: <D.24380>, case 627: <D.24382>, case 628: <D.24388>, case 629: <D.24385>, case 631: <D.24384>, case 800: <D.24375>>
          <D.24374>:
          <D.24375>:
          D.24473 = ins->dreg;
          D.24485 = ins->sreg1;
          if (D.24473 == D.24485) goto <D.24777>; else goto <D.24778>;
          <D.24777>:
          D.24504 = ins->prev;
          if (D.24504 != 0B) goto <D.24779>; else goto <D.24780>;
          <D.24779>:
          D.24504 = ins->prev;
          D.24507 = ins->next;
          D.24504->next = D.24507;
          <D.24780>:
          D.24507 = ins->next;
          if (D.24507 != 0B) goto <D.24781>; else goto <D.24782>;
          <D.24781>:
          D.24507 = ins->next;
          D.24504 = ins->prev;
          D.24507->prev = D.24504;
          <D.24782>:
          D.24510 = bb->code;
          if (D.24510 == ins) goto <D.24783>; else goto <D.24784>;
          <D.24783>:
          D.24507 = ins->next;
          bb->code = D.24507;
          <D.24784>:
          D.24513 = bb->last_ins;
          if (D.24513 == ins) goto <D.24785>; else goto <D.24786>;
          <D.24785>:
          D.24504 = ins->prev;
          bb->last_ins = D.24504;
          <D.24786>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.24487 = ins->sreg3;
          ins->sreg2 = D.24487;
          D.24486 = ins->sreg2;
          ins->sreg1 = D.24486;
          D.24488 = ins->opcode;
          D.24489 = (int) D.24488;
          D.24490 = D.24489 + -313;
          D.24501 = D.24490 * 4;
          spec = &ins_info[D.24501];
          <D.24778>:
          goto <D.24376>;
          <D.24377>:
          <D.24378>:
          <D.24379>:
          <D.24380>:
          D.24703 = ins->data.op[1].const_val;
          if (D.24703 == 0) goto <D.24787>; else goto <D.24788>;
          <D.24787>:
          ins->opcode = 424;
          D.24488 = ins->opcode;
          D.24489 = (int) D.24488;
          D.24490 = D.24489 + -313;
          D.24501 = D.24490 * 4;
          spec = &ins_info[D.24501];
          <D.24788>:
          goto <D.24376>;
          <D.24381>:
          <D.24382>:
          D.24703 = ins->data.op[1].const_val;
          if (D.24703 == 0) goto <D.24789>; else goto <D.24790>;
          <D.24789>:
          D.24488 = ins->opcode;
          if (D.24488 == 540) goto <D.24792>; else goto <D.24793>;
          <D.24792>:
          iftmp.9 = 363;
          goto <D.24794>;
          <D.24793>:
          iftmp.9 = 362;
          <D.24794>:
          ins->opcode = iftmp.9;
          ins->data.op[0].const_val = 0;
          ins->sreg1 = -1;
          goto <D.24795>;
          <D.24790>:
          D.24703 = ins->data.op[1].const_val;
          if (D.24703 == 1) goto <D.24796>; else goto <D.24797>;
          <D.24796>:
          ins->opcode = 424;
          goto <D.24798>;
          <D.24797>:
          D.24488 = ins->opcode;
          if (D.24488 == 627) goto <D.24801>; else goto <D.24799>;
          <D.24801>:
          D.24703 = ins->data.op[1].const_val;
          if (D.24703 == -1) goto <D.24802>; else goto <D.24799>;
          <D.24802>:
          ins->opcode = 578;
          goto <D.24800>;
          <D.24799>:
          D.24488 = ins->opcode;
          if (D.24488 == 540) goto <D.24805>; else goto <D.24803>;
          <D.24805>:
          D.24703 = ins->data.op[1].const_val;
          if (D.24703 == -1) goto <D.24806>; else goto <D.24803>;
          <D.24806>:
          ins->opcode = 492;
          goto <D.24804>;
          <D.24803>:
          {
            int power2;

            D.24703 = ins->data.op[1].const_val;
            D.24807 = (unsigned int) D.24703;
            power2 = mono_is_power_of_two (D.24807);
            if (power2 >= 0) goto <D.24808>; else goto <D.24809>;
            <D.24808>:
            D.24488 = ins->opcode;
            if (D.24488 != 431) goto <D.24811>; else goto <D.24812>;
            <D.24811>:
            D.24488 = ins->opcode;
            if (D.24488 == 540) goto <D.24814>; else goto <D.24815>;
            <D.24814>:
            iftmp.11 = 544;
            goto <D.24816>;
            <D.24815>:
            iftmp.11 = 635;
            <D.24816>:
            iftmp.10 = iftmp.11;
            goto <D.24817>;
            <D.24812>:
            iftmp.10 = 439;
            <D.24817>:
            ins->opcode = iftmp.10;
            ins->data.op[1].const_val = power2;
            <D.24809>:
          }
          <D.24804>:
          <D.24800>:
          <D.24798>:
          <D.24795>:
          D.24488 = ins->opcode;
          D.24489 = (int) D.24488;
          D.24490 = D.24489 + -313;
          D.24501 = D.24490 * 4;
          spec = &ins_info[D.24501];
          goto <D.24376>;
          <D.24384>:
          <D.24385>:
          {
            int c;
            int power2;

            c = ins->data.op[1].const_val;
            c.12 = (unsigned int) c;
            power2 = mono_is_power_of_two (c.12);
            if (power2 >= 0) goto <D.24819>; else goto <D.24820>;
            <D.24819>:
            D.24488 = ins->opcode;
            if (D.24488 == 631) goto <D.24821>; else goto <D.24822>;
            <D.24821>:
            ins->opcode = 632;
            ins->sreg2 = -1;
            D.24823 = 1 << power2;
            D.24824 = D.24823 + -1;
            ins->data.op[1].const_val = D.24824;
            goto <D.24825>;
            <D.24822>:
            D.24488 = ins->opcode;
            if (D.24488 == 629) goto <D.24826>; else goto <D.24827>;
            <D.24826>:
            ins->opcode = 637;
            ins->sreg2 = -1;
            ins->data.op[1].const_val = power2;
            <D.24827>:
            <D.24825>:
            <D.24820>:
            D.24488 = ins->opcode;
            D.24489 = (int) D.24488;
            D.24490 = D.24489 + -313;
            D.24501 = D.24490 * 4;
            spec = &ins_info[D.24501];
            goto <D.24376>;
          }
          <D.24388>:
          {
            int c;
            int power2;
            struct MonoInst * tmp1;
            struct MonoInst * tmp2;
            struct MonoInst * tmp3;
            struct MonoInst * tmp4;

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

              D.24831 = mono_alloc_ireg (cfg);
              r1 = (int) D.24831;
              D.24470 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.24470, 56);
              tmp1->data.op[1].const_val = 0;
              D.24832 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.24832;
              tmp1->prev = 0B;
              D.24833 = tmp1->prev;
              tmp1->next = D.24833;
              tmp1->opcode = 637;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.24834 = tmp1->sreg3;
              tmp1->sreg2 = D.24834;
              D.24835 = tmp1->sreg2;
              tmp1->sreg1 = D.24835;
              D.24836 = cfg->ip;
              tmp1->cil_code = D.24836;
              tmp1->dreg = r1;
              D.24485 = ins->sreg1;
              tmp1->sreg1 = D.24485;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.24470 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.24470, 56);
              tmp2->data.op[1].const_val = 0;
              D.24837 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.24837;
              tmp2->prev = 0B;
              D.24838 = tmp2->prev;
              tmp2->next = D.24838;
              tmp2->opcode = 565;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.24839 = tmp2->sreg3;
              tmp2->sreg2 = D.24839;
              D.24840 = tmp2->sreg2;
              tmp2->sreg1 = D.24840;
              D.24836 = cfg->ip;
              tmp2->cil_code = D.24836;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.24485 = ins->sreg1;
              tmp2->sreg2 = D.24485;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.24470 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.24470, 56);
              tmp3->data.op[1].const_val = 0;
              D.24841 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.24841;
              tmp3->prev = 0B;
              D.24842 = tmp3->prev;
              tmp3->next = D.24842;
              tmp3->opcode = 636;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.24843 = tmp3->sreg3;
              tmp3->sreg2 = D.24843;
              D.24844 = tmp3->sreg2;
              tmp3->sreg1 = D.24844;
              D.24836 = cfg->ip;
              tmp3->cil_code = D.24836;
              D.24473 = ins->dreg;
              tmp3->dreg = D.24473;
              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.24487 = ins->sreg3;
              ins->sreg2 = D.24487;
              D.24486 = ins->sreg2;
              ins->sreg1 = D.24486;
              goto restart;
            }
            <D.24830>:
            if (power2 > 0) goto <D.24845>; else goto <D.24846>;
            <D.24845>:
            {
              int r1;

              D.24847 = mono_alloc_ireg (cfg);
              r1 = (int) D.24847;
              D.24470 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.24470, 56);
              tmp1->data.op[1].const_val = 0;
              D.24832 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.24832;
              tmp1->prev = 0B;
              D.24833 = tmp1->prev;
              tmp1->next = D.24833;
              tmp1->opcode = 636;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.24834 = tmp1->sreg3;
              tmp1->sreg2 = D.24834;
              D.24835 = tmp1->sreg2;
              tmp1->sreg1 = D.24835;
              D.24836 = cfg->ip;
              tmp1->cil_code = D.24836;
              tmp1->dreg = r1;
              D.24485 = ins->sreg1;
              tmp1->sreg1 = D.24485;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.24470 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.24470, 56);
              tmp2->data.op[1].const_val = 0;
              D.24837 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.24837;
              tmp2->prev = 0B;
              D.24838 = tmp2->prev;
              tmp2->next = D.24838;
              tmp2->opcode = 637;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.24839 = tmp2->sreg3;
              tmp2->sreg2 = D.24839;
              D.24840 = tmp2->sreg2;
              tmp2->sreg1 = D.24840;
              D.24836 = cfg->ip;
              tmp2->cil_code = D.24836;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.24848 = 32 - power2;
              tmp2->data.op[1].const_val = D.24848;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.24470 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.24470, 56);
              tmp3->data.op[1].const_val = 0;
              D.24841 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.24841;
              tmp3->prev = 0B;
              D.24842 = tmp3->prev;
              tmp3->next = D.24842;
              tmp3->opcode = 565;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.24843 = tmp3->sreg3;
              tmp3->sreg2 = D.24843;
              D.24844 = tmp3->sreg2;
              tmp3->sreg1 = D.24844;
              D.24836 = cfg->ip;
              tmp3->cil_code = D.24836;
              tmp3->dreg = r1;
              tmp3->sreg1 = r1;
              D.24485 = ins->sreg1;
              tmp3->sreg2 = D.24485;
              mono_bblock_insert_after_ins (bb, tmp2, tmp3);
              D.24470 = cfg->mempool;
              tmp4 = mono_mempool_alloc (D.24470, 56);
              tmp4->data.op[1].const_val = 0;
              D.24849 = tmp4->data.op[1].const_val;
              tmp4->data.op[0].const_val = D.24849;
              tmp4->prev = 0B;
              D.24850 = tmp4->prev;
              tmp4->next = D.24850;
              tmp4->opcode = 636;
              tmp4->flags = 0;
              tmp4->type = 0;
              tmp4->dreg = -1;
              tmp4->sreg3 = -1;
              D.24851 = tmp4->sreg3;
              tmp4->sreg2 = D.24851;
              D.24852 = tmp4->sreg2;
              tmp4->sreg1 = D.24852;
              D.24836 = cfg->ip;
              tmp4->cil_code = D.24836;
              D.24473 = ins->dreg;
              tmp4->dreg = D.24473;
              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.24487 = ins->sreg3;
              ins->sreg2 = D.24487;
              D.24486 = ins->sreg2;
              ins->sreg1 = D.24486;
              goto restart;
            }
            <D.24846>:
            goto <D.24376>;
          }
          <D.24853>:
          <D.24376>:
          D.24854 = *spec;
          if (D.24854 != 32) goto <D.24855>; else goto <D.24856>;
          <D.24855>:
          {
            struct MonoInst * def;

            D.24473 = ins->dreg;
            D.24478 = (unsigned int) D.24473;
            D.24479 = D.24478 * 4;
            D.24480 = defs + D.24479;
            def = *D.24480;
            if (def != 0B) goto <D.24857>; else goto <D.24858>;
            <D.24857>:
            D.24859 = def->opcode;
            if (D.24859 == 429) goto <D.24860>; else goto <D.24861>;
            <D.24860>:
            D.24862 = def->sreg1;
            D.24863 = (unsigned int) D.24862;
            D.24727 = cfg->frame_reg;
            if (D.24863 == D.24727) goto <D.24864>; else goto <D.24865>;
            <D.24864>:
            D.24488 = ins->opcode;
            D.24527 = D.24488 + 65162;
            if (D.24527 <= 13) goto <D.24866>; else goto <D.24867>;
            <D.24866>:
            D.24862 = def->sreg1;
            ins->dreg = D.24862;
            D.24714 = ins->data.op[0].const_val;
            D.24868 = def->data.op[1].const_val;
            D.24869 = D.24714 + D.24868;
            ins->data.op[0].const_val = D.24869;
            <D.24867>:
            <D.24865>:
            <D.24861>:
            <D.24858>:
          }
          <D.24856>:
          D.24854 = *spec;
          if (D.24854 != 32) goto <D.24870>; else goto <D.24871>;
          <D.24870>:
          D.24488 = ins->opcode;
          D.24527 = D.24488 + 65162;
          if (D.24527 > 13) goto <D.24872>; else goto <D.24873>;
          <D.24872>:
          D.24473 = ins->dreg;
          D.24877 = (unsigned int) D.24473;
          D.24560 = cfg->vreg_to_inst_len;
          if (D.24877 < D.24560) goto <D.24878>; else goto <D.24875>;
          <D.24878>:
          D.24562 = cfg->vreg_to_inst;
          D.24473 = ins->dreg;
          D.24478 = (unsigned int) D.24473;
          D.24479 = D.24478 * 4;
          D.24879 = D.24562 + D.24479;
          D.24880 = *D.24879;
          if (D.24880 != 0B) goto <D.24881>; else goto <D.24875>;
          <D.24881>:
          D.24473 = ins->dreg;
          D.24877 = (unsigned int) D.24473;
          D.24560 = cfg->vreg_to_inst_len;
          if (D.24877 < D.24560) goto <D.24883>; else goto <D.24884>;
          <D.24883>:
          D.24562 = cfg->vreg_to_inst;
          D.24473 = ins->dreg;
          D.24478 = (unsigned int) D.24473;
          D.24479 = D.24478 * 4;
          D.24879 = D.24562 + D.24479;
          iftmp.15 = *D.24879;
          goto <D.24885>;
          <D.24884>:
          iftmp.15 = 0B;
          <D.24885>:
          D.24886 = iftmp.15->flags;
          D.24887 = (int) D.24886;
          D.24888 = D.24887 & 20;
          if (D.24888 != 0) goto <D.24889>; else goto <D.24875>;
          <D.24889>:
          iftmp.14 = 1;
          goto <D.24876>;
          <D.24875>:
          iftmp.14 = 0;
          <D.24876>:
          D.24890 = iftmp.14 != 0;
          D.24891 = (long int) D.24890;
          D.24892 = __builtin_expect (D.24891, 0);
          if (D.24892 == 0) goto <D.24893>; else goto <D.24894>;
          <D.24893>:
          D.24473 = ins->dreg;
          D.24478 = (unsigned int) D.24473;
          D.24479 = D.24478 * 4;
          D.24480 = defs + D.24479;
          *D.24480 = ins;
          D.24473 = ins->dreg;
          D.24478 = (unsigned int) D.24473;
          D.24479 = D.24478 * 4;
          D.24895 = def_index + D.24479;
          *D.24895 = ins_index;
          <D.24894>:
          <D.24873>:
          <D.24871>:
          D.24898 = ins->opcode;
          D.24899 = D.24898 + 65193;
          D.24900 = D.24899 <= 2;
          D.24901 = D.24898 + 65187;
          D.24902 = D.24901 <= 2;
          D.24903 = D.24900 | D.24902;
          if (D.24903 != 0) goto <D.24896>; else goto <D.24904>;
          <D.24904>:
          D.24488 = ins->opcode;
          D.24905 = D.24488 + 65184;
          if (D.24905 <= 2) goto <D.24896>; else goto <D.24906>;
          <D.24906>:
          D.24488 = ins->opcode;
          D.24907 = D.24488 + 65181;
          if (D.24907 <= 2) goto <D.24896>; else goto <D.24908>;
          <D.24908>:
          D.24488 = ins->opcode;
          D.24909 = D.24488 + 65190;
          if (D.24909 <= 2) goto <D.24896>; else goto <D.24910>;
          <D.24910>:
          D.24488 = ins->opcode;
          D.24911 = D.24488 + 65178;
          if (D.24911 <= 2) goto <D.24896>; else goto <D.24912>;
          <D.24912>:
          D.24488 = ins->opcode;
          if (D.24488 == 444) goto <D.24896>; else goto <D.24897>;
          <D.24896>:
          last_call_index = ins_index;
          <D.24897>:
          ins_index = ins_index + 1;
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    <D.24361>:
    ins = ins->next;
    <D.24399>:
    if (ins != 0B) goto <D.24398>; else goto <D.24400>;
    <D.24400>:
  }
  bb = bb->next_bb;
  <D.24402>:
  if (bb != 0B) goto <D.24401>; else goto <D.24403>;
  <D.24403>:
}


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

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


mono_local_deadce (struct MonoCompile * cfg)
{
  struct MonoMemPool * D.24918;
  unsigned int D.24919;
  unsigned int D.24920;
  short unsigned int D.24921;
  int D.24922;
  int D.24923;
  int D.24924;
  char D.24925;
  int D.24928;
  unsigned int D.24929;
  unsigned int D.24930;
  unsigned int D.24931;
  int D.24932;
  unsigned int D.24933;
  unsigned int D.24934;
  unsigned int D.24935;
  unsigned int D.24936;
  unsigned int D.24937;
  unsigned int D.24938;
  int D.24939;
  unsigned int D.24940;
  unsigned int D.24941;
  unsigned int D.24942;
  int D.24943;
  unsigned int D.24944;
  unsigned int D.24945;
  unsigned int D.24946;
  unsigned int D.24947;
  unsigned int D.24948;
  unsigned int D.24949;
  int D.24950;
  int D.24951;
  int D.24952;
  signed char D.24953;
  int D.24954;
  unsigned int D.24955;
  unsigned int D.24956;
  unsigned int D.24957;
  int D.24958;
  unsigned int D.24959;
  unsigned int D.24960;
  unsigned int D.24961;
  int D.24962;
  unsigned int D.24963;
  unsigned int D.24964;
  unsigned int D.24965;
  int D.24966;
  unsigned int D.24967;
  unsigned int D.24968;
  unsigned int D.24969;
  struct MonoInst * iftmp.16;
  struct MonoInst * D.24976;
  struct MonoInst * D.24979;
  struct MonoInst * D.24982;
  struct MonoInst * D.24985;
  _Bool D.24988;
  long int D.24989;
  long int D.24990;
  short unsigned int D.24993;
  _Bool D.24994;
  _Bool D.24995;
  _Bool D.24996;
  struct MonoInst * D.25001;
  short unsigned int D.25003;
  int D.25004;
  int D.25005;
  int D.25006;
  unsigned int D.25009;
  unsigned int D.25010;
  struct MonoInst * * D.25012;
  unsigned int D.25013;
  unsigned int D.25014;
  struct MonoInst * * D.25015;
  struct MonoInst * D.25016;
  char D.25017;
  int D.25020;
  unsigned int D.25023;
  unsigned int D.25024;
  int D.25025;
  unsigned int D.25026;
  unsigned int D.25027;
  short unsigned int D.25030;
  char D.25033;
  int D.25034;
  int D.25037;
  unsigned int D.25040;
  int D.25043;
  int D.25052;
  unsigned int D.25058;
  unsigned int D.25059;
  unsigned int D.25060;
  unsigned int D.25063;
  unsigned int D.25065;
  struct MonoInst * * D.25066;
  struct MonoInst * D.25067;
  unsigned char D.25069;
  unsigned char D.25070;
  int iftmp.17;
  struct MonoInst * iftmp.18;
  unsigned char D.25081;
  int D.25082;
  int D.25083;
  _Bool D.25085;
  long int D.25086;
  long int D.25087;
  unsigned int D.25089;
  unsigned int D.25090;
  short unsigned int D.25091;
  _Bool D.25092;
  _Bool D.25093;
  _Bool D.25094;
  short unsigned int D.25125;
  int D.25128;
  int D.25129;
  unsigned int D.25140;
  unsigned int D.25141;
  unsigned int D.25142;
  unsigned int D.25145;
  unsigned int D.25146;
  unsigned int D.25147;
  int D.25148;
  unsigned int D.25149;
  unsigned int D.25150;
  unsigned int D.25151;
  int D.25152;
  unsigned int D.25153;
  unsigned int D.25154;
  short unsigned int D.25155;
  unsigned int D.25158;
  unsigned int D.25159;
  unsigned int D.25160;
  short unsigned int D.25163;
  short unsigned int D.25164;
  _Bool D.25165;
  short unsigned int D.25166;
  _Bool D.25167;
  _Bool D.25168;
  short unsigned int D.25170;
  short unsigned int D.25172;
  short unsigned int D.25174;
  short unsigned int D.25176;
  struct GSList * D.25178;
  void * D.25181;
  unsigned int D.25182;
  unsigned int D.25183;
  int reg.19;
  int D.25185;
  unsigned int D.25186;
  unsigned int D.25187;
  struct GSList * D.25188;
  unsigned int D.25191;
  unsigned int D.25192;
  int reg.20;
  int D.25194;
  unsigned int D.25195;
  unsigned int D.25196;
  struct MonoInst * iftmp.21;
  struct MonoBasicBlock * bb;
  struct MonoInst * ins;
  struct MonoInst * prev;
  struct MonoBitSet * used;
  struct MonoBitSet * defined;

  D.24918 = cfg->mempool;
  D.24919 = cfg->next_vreg;
  D.24920 = D.24919 + 1;
  used = mono_bitset_mp_new_noinit (D.24918, D.24920);
  D.24918 = cfg->mempool;
  D.24919 = cfg->next_vreg;
  D.24920 = D.24919 + 1;
  defined = mono_bitset_mp_new_noinit (D.24918, D.24920);
  bb = cfg->bb_entry;
  goto <D.24464>;
  <D.24463>:
  ins = bb->code;
  goto <D.24432>;
  <D.24431>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.24921 = ins->opcode;
        D.24922 = (int) D.24921;
        D.24923 = D.24922 + -313;
        D.24924 = D.24923 * 4;
        spec = &ins_info[D.24924];
        D.24925 = *spec;
        if (D.24925 != 32) goto <D.24926>; else goto <D.24927>;
        <D.24926>:
        D.24928 = ins->dreg;
        D.24929 = (unsigned int) D.24928;
        D.24930 = D.24929 / 32;
        D.24931 = used->data[D.24930];
        D.24928 = ins->dreg;
        D.24932 = D.24928 & 31;
        D.24933 = 1 << D.24932;
        D.24934 = ~D.24933;
        D.24935 = D.24931 & D.24934;
        used->data[D.24930] = D.24935;
        D.24928 = ins->dreg;
        D.24929 = (unsigned int) D.24928;
        D.24936 = D.24929 / 32;
        D.24937 = defined->data[D.24936];
        D.24928 = ins->dreg;
        D.24932 = D.24928 & 31;
        D.24933 = 1 << D.24932;
        D.24934 = ~D.24933;
        D.24938 = D.24937 & D.24934;
        defined->data[D.24936] = D.24938;
        D.24928 = ins->dreg;
        D.24939 = D.24928 + 1;
        D.24940 = (unsigned int) D.24939;
        D.24941 = D.24940 / 32;
        D.24942 = used->data[D.24941];
        D.24928 = ins->dreg;
        D.24939 = D.24928 + 1;
        D.24943 = D.24939 & 31;
        D.24944 = 1 << D.24943;
        D.24945 = ~D.24944;
        D.24946 = D.24942 & D.24945;
        used->data[D.24941] = D.24946;
        D.24928 = ins->dreg;
        D.24939 = D.24928 + 1;
        D.24940 = (unsigned int) D.24939;
        D.24947 = D.24940 / 32;
        D.24948 = defined->data[D.24947];
        D.24928 = ins->dreg;
        D.24939 = D.24928 + 1;
        D.24943 = D.24939 & 31;
        D.24944 = 1 << D.24943;
        D.24945 = ~D.24944;
        D.24949 = D.24948 & D.24945;
        defined->data[D.24947] = D.24949;
        <D.24927>:
        D.24950 = ins->sreg1;
        sregs[0] = D.24950;
        D.24951 = ins->sreg2;
        sregs[1] = D.24951;
        D.24952 = ins->sreg3;
        sregs[2] = D.24952;
        D.24921 = ins->opcode;
        D.24922 = (int) D.24921;
        D.24923 = D.24922 + -313;
        D.24953 = ins_sreg_counts[D.24923];
        num_sregs = (int) D.24953;
        i = 0;
        goto <D.24429>;
        <D.24428>:
        D.24954 = sregs[i];
        D.24955 = (unsigned int) D.24954;
        D.24956 = D.24955 / 32;
        D.24957 = used->data[D.24956];
        D.24954 = sregs[i];
        D.24958 = D.24954 & 31;
        D.24959 = 1 << D.24958;
        D.24960 = ~D.24959;
        D.24961 = D.24957 & D.24960;
        used->data[D.24956] = D.24961;
        D.24954 = sregs[i];
        D.24962 = D.24954 + 1;
        D.24963 = (unsigned int) D.24962;
        D.24964 = D.24963 / 32;
        D.24965 = used->data[D.24964];
        D.24954 = sregs[i];
        D.24962 = D.24954 + 1;
        D.24966 = D.24962 & 31;
        D.24967 = 1 << D.24966;
        D.24968 = ~D.24967;
        D.24969 = D.24965 & D.24968;
        used->data[D.24964] = D.24969;
        i = i + 1;
        <D.24429>:
        if (i < num_sregs) goto <D.24428>; else goto <D.24430>;
        <D.24430>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  ins = ins->next;
  <D.24432>:
  if (ins != 0B) goto <D.24431>; else goto <D.24433>;
  <D.24433>:
  ins = bb->last_ins;
  if (ins != 0B) goto <D.24971>; else goto <D.24972>;
  <D.24971>:
  iftmp.16 = ins->prev;
  goto <D.24973>;
  <D.24972>:
  iftmp.16 = 0B;
  <D.24973>:
  prev = iftmp.16;
  goto <D.24461>;
  <D.24460>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.24921 = ins->opcode;
        D.24922 = (int) D.24921;
        D.24923 = D.24922 + -313;
        D.24924 = D.24923 * 4;
        spec = &ins_info[D.24924];
        D.24921 = ins->opcode;
        if (D.24921 == 316) goto <D.24974>; else goto <D.24975>;
        <D.24974>:
        D.24976 = ins->prev;
        if (D.24976 != 0B) goto <D.24977>; else goto <D.24978>;
        <D.24977>:
        D.24976 = ins->prev;
        D.24979 = ins->next;
        D.24976->next = D.24979;
        <D.24978>:
        D.24979 = ins->next;
        if (D.24979 != 0B) goto <D.24980>; else goto <D.24981>;
        <D.24980>:
        D.24979 = ins->next;
        D.24976 = ins->prev;
        D.24979->prev = D.24976;
        <D.24981>:
        D.24982 = bb->code;
        if (D.24982 == ins) goto <D.24983>; else goto <D.24984>;
        <D.24983>:
        D.24979 = ins->next;
        bb->code = D.24979;
        <D.24984>:
        D.24985 = bb->last_ins;
        if (D.24985 == ins) goto <D.24986>; else goto <D.24987>;
        <D.24986>:
        D.24976 = ins->prev;
        bb->last_ins = D.24976;
        <D.24987>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.24952 = ins->sreg3;
        ins->sreg2 = D.24952;
        D.24951 = ins->sreg2;
        ins->sreg1 = D.24951;
        // predicted unlikely by continue predictor.
        goto <D.24438>;
        <D.24975>:
        D.24921 = ins->opcode;
        D.24988 = D.24921 <= 313;
        D.24989 = (long int) D.24988;
        D.24990 = __builtin_expect (D.24989, 0);
        if (D.24990 != 0) goto <D.24991>; else goto <D.24992>;
        <D.24991>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 521, "ins->opcode > MONO_CEE_LAST");
        <D.24992>:
        D.24993 = ins->opcode;
        D.24994 = D.24993 == 424;
        D.24995 = D.24993 == 427;
        D.24996 = D.24994 | D.24995;
        if (D.24996 != 0) goto <D.24997>; else goto <D.24998>;
        <D.24997>:
        D.24976 = ins->prev;
        if (D.24976 != 0B) goto <D.24999>; else goto <D.25000>;
        <D.24999>:
        {
          struct MonoInst * def;
          const char * spec2;

          def = ins->prev;
          goto <D.24442>;
          <D.24441>:
          def = def->prev;
          <D.24442>:
          D.25001 = def->prev;
          if (D.25001 != 0B) goto <D.25002>; else goto <D.24443>;
          <D.25002>:
          D.25003 = def->opcode;
          if (D.25003 == 316) goto <D.24441>; else goto <D.24443>;
          <D.24443>:
          D.25003 = def->opcode;
          D.25004 = (int) D.25003;
          D.25005 = D.25004 + -313;
          D.25006 = D.25005 * 4;
          spec2 = &ins_info[D.25006];
          D.24950 = ins->sreg1;
          D.25009 = (unsigned int) D.24950;
          D.25010 = cfg->vreg_to_inst_len;
          if (D.25009 >= D.25010) goto <D.25007>; else goto <D.25011>;
          <D.25011>:
          D.25012 = cfg->vreg_to_inst;
          D.24950 = ins->sreg1;
          D.25013 = (unsigned int) D.24950;
          D.25014 = D.25013 * 4;
          D.25015 = D.25012 + D.25014;
          D.25016 = *D.25015;
          if (D.25016 == 0B) goto <D.25007>; else goto <D.25008>;
          <D.25007>:
          D.25017 = *spec2;
          if (D.25017 != 32) goto <D.25018>; else goto <D.25019>;
          <D.25018>:
          D.25020 = def->dreg;
          D.24950 = ins->sreg1;
          if (D.25020 == D.24950) goto <D.25021>; else goto <D.25022>;
          <D.25021>:
          D.24950 = ins->sreg1;
          D.25013 = (unsigned int) D.24950;
          D.25023 = D.25013 / 32;
          D.25024 = used->data[D.25023];
          D.24950 = ins->sreg1;
          D.25025 = D.24950 & 31;
          D.25026 = 1 << D.25025;
          D.25027 = D.25024 & D.25026;
          if (D.25027 == 0) goto <D.25028>; else goto <D.25029>;
          <D.25028>:
          D.25003 = def->opcode;
          D.25030 = D.25003 + 65162;
          if (D.25030 > 13) goto <D.25031>; else goto <D.25032>;
          <D.25031>:
          D.24950 = ins->sreg1;
          D.25033 = *spec;
          D.25034 = reg_is_softreg (D.24950, D.25033);
          if (D.25034 != 0) goto <D.25035>; else goto <D.25036>;
          <D.25035>:
          D.25037 = mono_is_simd_accessor (def);
          if (D.25037 == 0) goto <D.25038>; else goto <D.25039>;
          <D.25038>:
          D.25040 = cfg->verbose_level;
          if (D.25040 > 2) goto <D.25041>; else goto <D.25042>;
          <D.25041>:
          D.25043 = bb->block_num;
          printf ("\tReverse copyprop in BB%d on ", D.25043);
          mono_print_ins (ins);
          <D.25042>:
          D.24928 = ins->dreg;
          def->dreg = D.24928;
          D.24976 = ins->prev;
          if (D.24976 != 0B) goto <D.25044>; else goto <D.25045>;
          <D.25044>:
          D.24976 = ins->prev;
          D.24979 = ins->next;
          D.24976->next = D.24979;
          <D.25045>:
          D.24979 = ins->next;
          if (D.24979 != 0B) goto <D.25046>; else goto <D.25047>;
          <D.25046>:
          D.24979 = ins->next;
          D.24976 = ins->prev;
          D.24979->prev = D.24976;
          <D.25047>:
          D.24982 = bb->code;
          if (D.24982 == ins) goto <D.25048>; else goto <D.25049>;
          <D.25048>:
          D.24979 = ins->next;
          bb->code = D.24979;
          <D.25049>:
          D.24985 = bb->last_ins;
          if (D.24985 == ins) goto <D.25050>; else goto <D.25051>;
          <D.25050>:
          D.24976 = ins->prev;
          bb->last_ins = D.24976;
          <D.25051>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.24952 = ins->sreg3;
          ins->sreg2 = D.24952;
          D.24951 = ins->sreg2;
          ins->sreg1 = D.24951;
          D.24921 = ins->opcode;
          D.24922 = (int) D.24921;
          D.24923 = D.24922 + -313;
          D.24924 = D.24923 * 4;
          spec = &ins_info[D.24924];
          <D.25039>:
          <D.25036>:
          <D.25032>:
          <D.25029>:
          <D.25022>:
          <D.25019>:
          <D.25008>:
        }
        <D.25000>:
        <D.24998>:
        D.24928 = ins->dreg;
        D.25033 = *spec;
        D.25052 = reg_is_softreg_no_fpstack (D.24928, D.25033);
        if (D.25052 != 0) goto <D.25053>; else goto <D.25054>;
        <D.25053>:
        D.24928 = ins->dreg;
        D.24929 = (unsigned int) D.24928;
        D.25058 = D.24929 / 32;
        D.25059 = used->data[D.25058];
        D.24928 = ins->dreg;
        D.24932 = D.24928 & 31;
        D.24933 = 1 << D.24932;
        D.25060 = D.25059 & D.24933;
        if (D.25060 == 0) goto <D.25061>; else goto <D.25062>;
        <D.25061>:
        D.24928 = ins->dreg;
        D.25063 = (unsigned int) D.24928;
        D.25010 = cfg->vreg_to_inst_len;
        if (D.25063 >= D.25010) goto <D.25057>; else goto <D.25064>;
        <D.25064>:
        D.25012 = cfg->vreg_to_inst;
        D.24928 = ins->dreg;
        D.24929 = (unsigned int) D.24928;
        D.25065 = D.24929 * 4;
        D.25066 = D.25012 + D.25065;
        D.25067 = *D.25066;
        if (D.25067 == 0B) goto <D.25057>; else goto <D.25068>;
        <D.25068>:
        D.25069 = BIT_FIELD_REF <*bb, 8, 912>;
        D.25070 = D.25069 & 8;
        if (D.25070 == 0) goto <D.25071>; else goto <D.25056>;
        <D.25071>:
        D.24928 = ins->dreg;
        D.25063 = (unsigned int) D.24928;
        D.25010 = cfg->vreg_to_inst_len;
        if (D.25063 < D.25010) goto <D.25075>; else goto <D.25073>;
        <D.25075>:
        D.25012 = cfg->vreg_to_inst;
        D.24928 = ins->dreg;
        D.24929 = (unsigned int) D.24928;
        D.25065 = D.24929 * 4;
        D.25066 = D.25012 + D.25065;
        D.25067 = *D.25066;
        if (D.25067 != 0B) goto <D.25076>; else goto <D.25073>;
        <D.25076>:
        D.24928 = ins->dreg;
        D.25063 = (unsigned int) D.24928;
        D.25010 = cfg->vreg_to_inst_len;
        if (D.25063 < D.25010) goto <D.25078>; else goto <D.25079>;
        <D.25078>:
        D.25012 = cfg->vreg_to_inst;
        D.24928 = ins->dreg;
        D.24929 = (unsigned int) D.24928;
        D.25065 = D.24929 * 4;
        D.25066 = D.25012 + D.25065;
        iftmp.18 = *D.25066;
        goto <D.25080>;
        <D.25079>:
        iftmp.18 = 0B;
        <D.25080>:
        D.25081 = iftmp.18->flags;
        D.25082 = (int) D.25081;
        D.25083 = D.25082 & 20;
        if (D.25083 != 0) goto <D.25084>; else goto <D.25073>;
        <D.25084>:
        iftmp.17 = 1;
        goto <D.25074>;
        <D.25073>:
        iftmp.17 = 0;
        <D.25074>:
        D.25085 = iftmp.17 != 0;
        D.25086 = (long int) D.25085;
        D.25087 = __builtin_expect (D.25086, 0);
        if (D.25087 == 0) goto <D.25088>; else goto <D.25056>;
        <D.25088>:
        D.24928 = ins->dreg;
        D.24929 = (unsigned int) D.24928;
        D.25058 = D.24929 / 32;
        D.25089 = defined->data[D.25058];
        D.24928 = ins->dreg;
        D.24932 = D.24928 & 31;
        D.24933 = 1 << D.24932;
        D.25090 = D.25089 & D.24933;
        if (D.25090 != 0) goto <D.25057>; else goto <D.25056>;
        <D.25057>:
        D.25091 = ins->opcode;
        D.25092 = D.25091 == 424;
        D.25093 = D.25091 == 426;
        D.25094 = D.25092 | D.25093;
        if (D.25094 != 0) goto <D.25055>; else goto <D.25095>;
        <D.25095>:
        D.24921 = ins->opcode;
        if (D.24921 == 427) goto <D.25055>; else goto <D.25096>;
        <D.25096>:
        D.24921 = ins->opcode;
        if (D.24921 == 362) goto <D.25055>; else goto <D.25097>;
        <D.25097>:
        D.24921 = ins->opcode;
        if (D.24921 == 363) goto <D.25055>; else goto <D.25098>;
        <D.25098>:
        D.24921 = ins->opcode;
        if (D.24921 == 428) goto <D.25055>; else goto <D.25099>;
        <D.25099>:
        D.24921 = ins->opcode;
        if (D.24921 == 429) goto <D.25055>; else goto <D.25100>;
        <D.25100>:
        D.24921 = ins->opcode;
        if (D.24921 == 365) goto <D.25055>; else goto <D.25101>;
        <D.25101>:
        D.24921 = ins->opcode;
        if (D.24921 == 538) goto <D.25055>; else goto <D.25102>;
        <D.25102>:
        D.24921 = ins->opcode;
        if (D.24921 == 626) goto <D.25055>; else goto <D.25103>;
        <D.25103>:
        D.24921 = ins->opcode;
        if (D.24921 == 625) goto <D.25055>; else goto <D.25104>;
        <D.25104>:
        D.24921 = ins->opcode;
        if (D.24921 == 492) goto <D.25055>; else goto <D.25105>;
        <D.25105>:
        D.24921 = ins->opcode;
        if (D.24921 == 566) goto <D.25055>; else goto <D.25106>;
        <D.25106>:
        D.24921 = ins->opcode;
        if (D.24921 == 817) goto <D.25055>; else goto <D.25107>;
        <D.25107>:
        D.24921 = ins->opcode;
        if (D.24921 == 635) goto <D.25055>; else goto <D.25108>;
        <D.25108>:
        D.24921 = ins->opcode;
        if (D.24921 == 636) goto <D.25055>; else goto <D.25109>;
        <D.25109>:
        D.24921 = ins->opcode;
        if (D.24921 == 637) goto <D.25055>; else goto <D.25110>;
        <D.25110>:
        D.24921 = ins->opcode;
        if (D.24921 == 632) goto <D.25055>; else goto <D.25111>;
        <D.25111>:
        D.24921 = ins->opcode;
        if (D.24921 == 591) goto <D.25055>; else goto <D.25112>;
        <D.25112>:
        D.24921 = ins->opcode;
        if (D.24921 == 580) goto <D.25055>; else goto <D.25113>;
        <D.25113>:
        D.24921 = ins->opcode;
        if (D.24921 == 762) goto <D.25055>; else goto <D.25114>;
        <D.25114>:
        D.24921 = ins->opcode;
        if (D.24921 == 503) goto <D.25055>; else goto <D.25115>;
        <D.25115>:
        D.24921 = ins->opcode;
        if (D.24921 == 590) goto <D.25055>; else goto <D.25116>;
        <D.25116>:
        D.24921 = ins->opcode;
        if (D.24921 == 581) goto <D.25055>; else goto <D.25117>;
        <D.25117>:
        D.24921 = ins->opcode;
        if (D.24921 == 495) goto <D.25055>; else goto <D.25118>;
        <D.25118>:
        D.24921 = ins->opcode;
        if (D.24921 == 314) goto <D.25055>; else goto <D.25119>;
        <D.25119>:
        D.24921 = ins->opcode;
        if (D.24921 == 319) goto <D.25055>; else goto <D.25120>;
        <D.25120>:
        D.24921 = ins->opcode;
        if (D.24921 == 316) goto <D.25055>; else goto <D.25121>;
        <D.25121>:
        D.24921 = ins->opcode;
        if (D.24921 == 765) goto <D.25055>; else goto <D.25122>;
        <D.25122>:
        D.24921 = ins->opcode;
        if (D.24921 == 799) goto <D.25055>; else goto <D.25056>;
        <D.25055>:
        D.24976 = ins->prev;
        if (D.24976 != 0B) goto <D.25123>; else goto <D.25124>;
        <D.25123>:
        D.24976 = ins->prev;
        D.25125 = D.24976->opcode;
        if (D.25125 == 327) goto <D.25126>; else goto <D.25127>;
        <D.25126>:
        {
          struct MonoInst * prev;

          prev = ins->prev;
          prev->opcode = 316;
          prev->dreg = -1;
          prev->sreg3 = -1;
          D.25128 = prev->sreg3;
          prev->sreg2 = D.25128;
          D.25129 = prev->sreg2;
          prev->sreg1 = D.25129;
        }
        <D.25127>:
        <D.25124>:
        D.24976 = ins->prev;
        if (D.24976 != 0B) goto <D.25130>; else goto <D.25131>;
        <D.25130>:
        D.24976 = ins->prev;
        D.24979 = ins->next;
        D.24976->next = D.24979;
        <D.25131>:
        D.24979 = ins->next;
        if (D.24979 != 0B) goto <D.25132>; else goto <D.25133>;
        <D.25132>:
        D.24979 = ins->next;
        D.24976 = ins->prev;
        D.24979->prev = D.24976;
        <D.25133>:
        D.24982 = bb->code;
        if (D.24982 == ins) goto <D.25134>; else goto <D.25135>;
        <D.25134>:
        D.24979 = ins->next;
        bb->code = D.24979;
        <D.25135>:
        D.24985 = bb->last_ins;
        if (D.24985 == ins) goto <D.25136>; else goto <D.25137>;
        <D.25136>:
        D.24976 = ins->prev;
        bb->last_ins = D.24976;
        <D.25137>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.24952 = ins->sreg3;
        ins->sreg2 = D.24952;
        D.24951 = ins->sreg2;
        ins->sreg1 = D.24951;
        D.24921 = ins->opcode;
        D.24922 = (int) D.24921;
        D.24923 = D.24922 + -313;
        D.24924 = D.24923 * 4;
        spec = &ins_info[D.24924];
        <D.25056>:
        <D.25062>:
        D.25033 = *spec;
        if (D.25033 != 32) goto <D.25138>; else goto <D.25139>;
        <D.25138>:
        D.24928 = ins->dreg;
        D.24929 = (unsigned int) D.24928;
        D.25140 = D.24929 / 32;
        D.25141 = used->data[D.25140];
        D.24928 = ins->dreg;
        D.24932 = D.24928 & 31;
        D.24933 = 1 << D.24932;
        D.24934 = ~D.24933;
        D.25142 = D.25141 & D.24934;
        used->data[D.25140] = D.25142;
        <D.25139>:
        <D.25054>:
        D.25033 = *spec;
        if (D.25033 != 32) goto <D.25143>; else goto <D.25144>;
        <D.25143>:
        D.24928 = ins->dreg;
        D.24929 = (unsigned int) D.24928;
        D.25145 = D.24929 / 32;
        D.25146 = defined->data[D.25145];
        D.24928 = ins->dreg;
        D.24932 = D.24928 & 31;
        D.24933 = 1 << D.24932;
        D.25147 = D.25146 | D.24933;
        defined->data[D.25145] = D.25147;
        <D.25144>:
        D.24950 = ins->sreg1;
        sregs[0] = D.24950;
        D.24951 = ins->sreg2;
        sregs[1] = D.24951;
        D.24952 = ins->sreg3;
        sregs[2] = D.24952;
        D.24921 = ins->opcode;
        D.24922 = (int) D.24921;
        D.24923 = D.24922 + -313;
        D.24953 = ins_sreg_counts[D.24923];
        num_sregs = (int) D.24953;
        i = 0;
        goto <D.24446>;
        <D.24445>:
        D.25148 = sregs[i];
        D.25149 = (unsigned int) D.25148;
        D.25150 = D.25149 / 32;
        D.25151 = used->data[D.25150];
        D.25148 = sregs[i];
        D.25152 = D.25148 & 31;
        D.25153 = 1 << D.25152;
        D.25154 = D.25151 | D.25153;
        used->data[D.25150] = D.25154;
        i = i + 1;
        <D.24446>:
        if (i < num_sregs) goto <D.24445>; else goto <D.24447>;
        <D.24447>:
        D.24921 = ins->opcode;
        D.25155 = D.24921 + 65162;
        if (D.25155 <= 13) goto <D.25156>; else goto <D.25157>;
        <D.25156>:
        D.24928 = ins->dreg;
        D.24929 = (unsigned int) D.24928;
        D.25158 = D.24929 / 32;
        D.25159 = used->data[D.25158];
        D.24928 = ins->dreg;
        D.24932 = D.24928 & 31;
        D.24933 = 1 << D.24932;
        D.25160 = D.25159 | D.24933;
        used->data[D.25158] = D.25160;
        <D.25157>:
        D.25163 = ins->opcode;
        D.25164 = D.25163 + 65193;
        D.25165 = D.25164 <= 2;
        D.25166 = D.25163 + 65187;
        D.25167 = D.25166 <= 2;
        D.25168 = D.25165 | D.25167;
        if (D.25168 != 0) goto <D.25161>; else goto <D.25169>;
        <D.25169>:
        D.24921 = ins->opcode;
        D.25170 = D.24921 + 65184;
        if (D.25170 <= 2) goto <D.25161>; else goto <D.25171>;
        <D.25171>:
        D.24921 = ins->opcode;
        D.25172 = D.24921 + 65181;
        if (D.25172 <= 2) goto <D.25161>; else goto <D.25173>;
        <D.25173>:
        D.24921 = ins->opcode;
        D.25174 = D.24921 + 65190;
        if (D.25174 <= 2) goto <D.25161>; else goto <D.25175>;
        <D.25175>:
        D.24921 = ins->opcode;
        D.25176 = D.24921 + 65178;
        if (D.25176 <= 2) goto <D.25161>; else goto <D.25177>;
        <D.25177>:
        D.24921 = ins->opcode;
        if (D.24921 == 444) goto <D.25161>; else goto <D.25162>;
        <D.25161>:
        {
          struct MonoCallInst * call;
          struct GSList * l;

          call = ins;
          D.25178 = call->out_ireg_args;
          if (D.25178 != 0B) goto <D.25179>; else goto <D.25180>;
          <D.25179>:
          l = call->out_ireg_args;
          goto <D.24453>;
          <D.24452>:
          {
            guint32 regpair;
            guint32 reg;

            D.25181 = l->data;
            regpair = (guint32) D.25181;
            reg = regpair & 16777215;
            D.25182 = reg / 32;
            D.25183 = used->data[D.25182];
            reg.19 = (int) reg;
            D.25185 = reg.19 & 31;
            D.25186 = 1 << D.25185;
            D.25187 = D.25183 | D.25186;
            used->data[D.25182] = D.25187;
          }
          l = l->next;
          <D.24453>:
          if (l != 0B) goto <D.24452>; else goto <D.24454>;
          <D.24454>:
          <D.25180>:
          D.25188 = call->out_freg_args;
          if (D.25188 != 0B) goto <D.25189>; else goto <D.25190>;
          <D.25189>:
          l = call->out_freg_args;
          goto <D.24458>;
          <D.24457>:
          {
            guint32 regpair;
            guint32 reg;

            D.25181 = l->data;
            regpair = (guint32) D.25181;
            reg = regpair & 16777215;
            D.25191 = reg / 32;
            D.25192 = used->data[D.25191];
            reg.20 = (int) reg;
            D.25194 = reg.20 & 31;
            D.25195 = 1 << D.25194;
            D.25196 = D.25192 | D.25195;
            used->data[D.25191] = D.25196;
          }
          l = l->next;
          <D.24458>:
          if (l != 0B) goto <D.24457>; else goto <D.24459>;
          <D.24459>:
          <D.25190>:
        }
        <D.25162>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  <D.24438>:
  ins = prev;
  if (ins != 0B) goto <D.25198>; else goto <D.25199>;
  <D.25198>:
  iftmp.21 = ins->prev;
  goto <D.25200>;
  <D.25199>:
  iftmp.21 = 0B;
  <D.25200>:
  prev = iftmp.21;
  <D.24461>:
  if (ins != 0B) goto <D.24460>; else goto <D.24462>;
  <D.24462>:
  bb = bb->next_bb;
  <D.24464>:
  if (bb != 0B) goto <D.24463>; else goto <D.24465>;
  <D.24465>:
}


mono_bitset_mp_new_noinit (struct MonoMemPool * mp, guint32 max_size)
{
  unsigned int D.25203;
  unsigned int size.22;
  struct MonoBitSet * D.25205;
  int size;
  void * mem;

  D.25203 = mono_bitset_alloc_size (max_size, 0);
  size = (int) D.25203;
  size.22 = (unsigned int) size;
  mem = mono_mempool_alloc (mp, size.22);
  D.25205 = mono_bitset_mem_new (mem, max_size, 1);
  return D.25205;
}


reg_is_softreg (int reg, const char spec)
{
  gboolean D.25207;
  int iftmp.23;
  _Bool D.25212;
  _Bool D.25213;
  _Bool D.25214;
  _Bool D.25216;
  _Bool D.25217;
  _Bool D.25218;

  D.25212 = spec == 105;
  D.25213 = reg > 15;
  D.25214 = D.25212 & D.25213;
  if (D.25214 != 0) goto <D.25209>; else goto <D.25215>;
  <D.25215>:
  D.25216 = spec == 102;
  D.25217 = reg > 31;
  D.25218 = D.25216 & D.25217;
  if (D.25218 != 0) goto <D.25209>; else goto <D.25219>;
  <D.25219>:
  if (spec == 118) goto <D.25209>; else goto <D.25210>;
  <D.25209>:
  iftmp.23 = 1;
  goto <D.25211>;
  <D.25210>:
  iftmp.23 = 0;
  <D.25211>:
  D.25207 = iftmp.23;
  return D.25207;
}


mono_is_simd_accessor (struct MonoInst * ins)
{
  short unsigned int D.25221;
  int D.25222;
  gboolean D.25223;

  D.25221 = ins->opcode;
  D.25222 = (int) D.25221;
  switch (D.25222) <default: <D.24415>>
  <D.24415>:
  D.25223 = 0;
  return D.25223;
}


reg_is_softreg_no_fpstack (int reg, const char spec)
{
  gboolean D.25225;
  int iftmp.24;
  _Bool D.25230;
  _Bool D.25231;
  _Bool D.25232;
  _Bool D.25234;
  _Bool D.25235;
  _Bool D.25236;

  D.25230 = spec == 105;
  D.25231 = reg > 15;
  D.25232 = D.25230 & D.25231;
  if (D.25232 != 0) goto <D.25227>; else goto <D.25233>;
  <D.25233>:
  D.25234 = spec == 102;
  D.25235 = reg > 31;
  D.25236 = D.25234 & D.25235;
  if (D.25236 != 0) goto <D.25227>; else goto <D.25237>;
  <D.25237>:
  if (spec == 118) goto <D.25227>; else goto <D.25228>;
  <D.25227>:
  iftmp.24 = 1;
  goto <D.25229>;
  <D.25228>:
  iftmp.24 = 0;
  <D.25229>:
  D.25225 = iftmp.24;
  return D.25225;
}


