__attribute__((visibility ("hidden")))
mono_local_cprop (struct MonoCompile * cfg)
{
  unsigned int D.22315;
  struct MonoMemPool * D.22316;
  unsigned int D.22317;
  unsigned int D.22318;
  unsigned int D.22319;
  int D.22320;
  long unsigned int D.22325;
  long unsigned int D.22326;
  struct MonoInst * * D.22327;
  int D.22328;
  int D.22329;
  int D.22330;
  short unsigned int D.22331;
  int D.22332;
  int D.22333;
  signed char D.22334;
  long unsigned int D.22337;
  long unsigned int D.22338;
  struct MonoInst * * D.22339;
  int D.22340;
  struct MonoInst * D.22343;
  struct MonoInst * D.22346;
  struct MonoInst * D.22349;
  struct MonoInst * D.22352;
  _Bool D.22355;
  long int D.22356;
  long int D.22357;
  int D.22362;
  long unsigned int D.22363;
  long unsigned int D.22364;
  struct MonoInst * * D.22365;
  short unsigned int D.22366;
  long unsigned int D.22373;
  long unsigned int D.22374;
  struct MonoInst * * D.22375;
  struct MonoInst * D.22376;
  short unsigned int D.22381;
  int D.22384;
  long unsigned int D.22385;
  long unsigned int D.22386;
  struct MonoInst * * D.22387;
  struct MonoInst * D.22388;
  long unsigned int D.22390;
  gint32 * D.22391;
  int D.22392;
  long unsigned int D.22393;
  gint32 * D.22394;
  int D.22395;
  int iftmp.0;
  unsigned int D.22399;
  unsigned int D.22400;
  struct MonoInst * * D.22402;
  struct MonoInst * * D.22403;
  struct MonoInst * D.22404;
  struct MonoInst * iftmp.1;
  unsigned char D.22410;
  int D.22411;
  int D.22412;
  _Bool D.22414;
  long int D.22415;
  long int D.22416;
  unsigned int D.22419;
  int D.22422;
  sizetype D.22423;
  const char * D.22424;
  char D.22425;
  short unsigned int D.22437;
  int D.22440;
  long unsigned int D.22441;
  long unsigned int D.22442;
  struct MonoInst * * D.22443;
  struct MonoInst * D.22444;
  long unsigned int D.22446;
  gint32 * D.22447;
  int D.22448;
  int iftmp.2;
  unsigned int D.22452;
  struct MonoInst * * D.22454;
  struct MonoInst * D.22455;
  struct MonoInst * iftmp.3;
  unsigned char D.22461;
  int D.22462;
  int D.22463;
  _Bool D.22465;
  long int D.22466;
  long int D.22467;
  struct MonoInst * D.22474;
  short unsigned int D.22484;
  long int D.22487;
  int D.22488;
  long unsigned int D.22493;
  long unsigned int D.22494;
  struct MonoInst * * D.22495;
  struct MonoInst * D.22496;
  short unsigned int D.22498;
  long unsigned int D.22500;
  long unsigned int D.22501;
  struct MonoInst * * D.22502;
  struct MonoInst * D.22503;
  int D.22516;
  int D.22520;
  short unsigned int D.22523;
  long int D.22526;
  long int D.22533;
  const void * D.22534;
  int D.22535;
  int D.22540;
  long int D.22543;
  long int D.22544;
  short unsigned int D.22549;
  unsigned int D.22553;
  struct MonoInst * D.22555;
  int D.22557;
  long int D.22558;
  long int D.22565;
  guint16 iftmp.4;
  unsigned int D.22620;
  guint16 iftmp.5;
  guint16 iftmp.6;
  long int D.22631;
  unsigned int c.7;
  int D.22637;
  int D.22638;
  long int D.22639;
  long int D.22643;
  unsigned int c.8;
  unsigned int D.22647;
  long int D.22648;
  struct MonoInst * D.22649;
  int D.22650;
  int D.22651;
  const unsigned char * D.22652;
  long int D.22653;
  struct MonoInst * D.22654;
  int D.22655;
  int D.22656;
  long int D.22657;
  struct MonoInst * D.22658;
  int D.22659;
  int D.22660;
  unsigned int D.22663;
  int D.22664;
  long int D.22665;
  long int D.22666;
  struct MonoInst * D.22667;
  int D.22668;
  int D.22669;
  long int D.22670;
  char D.22672;
  short unsigned int D.22677;
  int D.22680;
  unsigned int D.22681;
  long int D.22686;
  long int D.22687;
  int iftmp.9;
  unsigned int D.22695;
  struct MonoInst * * D.22697;
  struct MonoInst * D.22698;
  struct MonoInst * iftmp.10;
  unsigned char D.22704;
  int D.22705;
  int D.22706;
  _Bool D.22708;
  long int D.22709;
  long int D.22710;
  long unsigned int D.22713;
  gint32 * D.22714;
  short unsigned int D.22717;
  short unsigned int D.22719;
  short unsigned int D.22721;
  short unsigned int D.22723;
  short unsigned int D.22725;
  short unsigned int D.22727;
  struct MonoBasicBlock * bb;
  struct MonoInst * * defs;
  gint32 * def_index;
  int max;
  void restart = <<< error >>>;

  restart:
  D.22315 = cfg->next_vreg;
  max = (int) D.22315;
  D.22316 = cfg->mempool;
  D.22315 = cfg->next_vreg;
  D.22317 = D.22315 + 1;
  D.22318 = D.22317 * 8;
  defs = mono_mempool_alloc (D.22316, D.22318);
  D.22316 = cfg->mempool;
  D.22315 = cfg->next_vreg;
  D.22317 = D.22315 + 1;
  D.22319 = D.22317 * 4;
  def_index = mono_mempool_alloc (D.22316, D.22319);
  bb = cfg->bb_entry;
  goto <D.22250>;
  <D.22249>:
  {
    struct MonoInst * ins;
    int ins_index;
    int last_call_index;

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

      try
        {
          D.22320 = ins->dreg;
          if (D.22320 != -1) goto <D.22321>; else goto <D.22322>;
          <D.22321>:
          D.22320 = ins->dreg;
          if (D.22320 < max) goto <D.22323>; else goto <D.22324>;
          <D.22323>:
          D.22320 = ins->dreg;
          D.22325 = (long unsigned int) D.22320;
          D.22326 = D.22325 * 8;
          D.22327 = defs + D.22326;
          *D.22327 = 0B;
          <D.22324>:
          <D.22322>:
          D.22328 = ins->sreg1;
          sregs[0] = D.22328;
          D.22329 = ins->sreg2;
          sregs[1] = D.22329;
          D.22330 = ins->sreg3;
          sregs[2] = D.22330;
          D.22331 = ins->opcode;
          D.22332 = (int) D.22331;
          D.22333 = D.22332 + -313;
          D.22334 = ins_sreg_counts[D.22333];
          num_sregs = (int) D.22334;
          i = 0;
          goto <D.22195>;
          <D.22194>:
          {
            int sreg;

            sreg = sregs[i];
            if (sreg < max) goto <D.22335>; else goto <D.22336>;
            <D.22335>:
            D.22337 = (long unsigned int) sreg;
            D.22338 = D.22337 * 8;
            D.22339 = defs + D.22338;
            *D.22339 = 0B;
            <D.22336>:
          }
          i = i + 1;
          <D.22195>:
          if (i < num_sregs) goto <D.22194>; else goto <D.22196>;
          <D.22196>:
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    ins = ins->next;
    <D.22198>:
    if (ins != 0B) goto <D.22197>; else goto <D.22199>;
    <D.22199>:
    ins_index = 0;
    last_call_index = -1;
    ins = bb->code;
    goto <D.22247>;
    <D.22246>:
    {
      const char * spec;
      int regtype;
      int srcindex;
      int sreg;
      int num_sregs;
      int sregs[3];

      try
        {
          D.22331 = ins->opcode;
          D.22332 = (int) D.22331;
          D.22333 = D.22332 + -313;
          D.22340 = D.22333 * 4;
          spec = &ins_info[D.22340];
          D.22331 = ins->opcode;
          if (D.22331 == 316) goto <D.22341>; else goto <D.22342>;
          <D.22341>:
          D.22343 = ins->prev;
          if (D.22343 != 0B) goto <D.22344>; else goto <D.22345>;
          <D.22344>:
          D.22343 = ins->prev;
          D.22346 = ins->next;
          D.22343->next = D.22346;
          <D.22345>:
          D.22346 = ins->next;
          if (D.22346 != 0B) goto <D.22347>; else goto <D.22348>;
          <D.22347>:
          D.22346 = ins->next;
          D.22343 = ins->prev;
          D.22346->prev = D.22343;
          <D.22348>:
          D.22349 = bb->code;
          if (D.22349 == ins) goto <D.22350>; else goto <D.22351>;
          <D.22350>:
          D.22346 = ins->next;
          bb->code = D.22346;
          <D.22351>:
          D.22352 = bb->last_ins;
          if (D.22352 == ins) goto <D.22353>; else goto <D.22354>;
          <D.22353>:
          D.22343 = ins->prev;
          bb->last_ins = D.22343;
          <D.22354>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22330 = ins->sreg3;
          ins->sreg2 = D.22330;
          D.22329 = ins->sreg2;
          ins->sreg1 = D.22329;
          // predicted unlikely by continue predictor.
          goto <D.22206>;
          <D.22342>:
          D.22331 = ins->opcode;
          D.22355 = D.22331 <= 313;
          D.22356 = (long int) D.22355;
          D.22357 = __builtin_expect (D.22356, 0);
          if (D.22357 != 0) goto <D.22358>; else goto <D.22359>;
          <D.22358>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 105, "ins->opcode > MONO_CEE_LAST");
          <D.22359>:
          D.22331 = ins->opcode;
          if (D.22331 == 314) goto <D.22360>; else goto <D.22361>;
          <D.22360>:
          {
            struct MonoInst * var;

            var = ins->data.op[0].p;
            D.22362 = var->dreg;
            D.22363 = (long unsigned int) D.22362;
            D.22364 = D.22363 * 8;
            D.22365 = defs + D.22364;
            *D.22365 = 0B;
          }
          <D.22361>:
          D.22331 = ins->opcode;
          D.22366 = D.22331 + 65162;
          if (D.22366 <= 13) goto <D.22367>; else goto <D.22368>;
          <D.22367>:
          sreg = ins->dreg;
          regtype = 105;
          if (regtype == 105) goto <D.22369>; else goto <D.22370>;
          <D.22369>:
          if (sreg != -1) goto <D.22371>; else goto <D.22372>;
          <D.22371>:
          D.22373 = (long unsigned int) sreg;
          D.22374 = D.22373 * 8;
          D.22375 = defs + D.22374;
          D.22376 = *D.22375;
          if (D.22376 != 0B) goto <D.22377>; else goto <D.22378>;
          <D.22377>:
          {
            struct MonoInst * def;

            D.22373 = (long unsigned int) sreg;
            D.22374 = D.22373 * 8;
            D.22375 = defs + D.22374;
            def = *D.22375;
            D.22381 = def->opcode;
            if (D.22381 == 424) goto <D.22382>; else goto <D.22383>;
            <D.22382>:
            D.22384 = def->sreg1;
            D.22385 = (long unsigned int) D.22384;
            D.22386 = D.22385 * 8;
            D.22387 = defs + D.22386;
            D.22388 = *D.22387;
            if (D.22388 == 0B) goto <D.22379>; else goto <D.22389>;
            <D.22389>:
            D.22384 = def->sreg1;
            D.22385 = (long unsigned int) D.22384;
            D.22390 = D.22385 * 4;
            D.22391 = def_index + D.22390;
            D.22392 = *D.22391;
            D.22373 = (long unsigned int) sreg;
            D.22393 = D.22373 * 4;
            D.22394 = def_index + D.22393;
            D.22395 = *D.22394;
            if (D.22392 < D.22395) goto <D.22379>; else goto <D.22380>;
            <D.22379>:
            D.22384 = def->sreg1;
            D.22399 = (unsigned int) D.22384;
            D.22400 = cfg->vreg_to_inst_len;
            if (D.22399 < D.22400) goto <D.22401>; else goto <D.22397>;
            <D.22401>:
            D.22402 = cfg->vreg_to_inst;
            D.22384 = def->sreg1;
            D.22385 = (long unsigned int) D.22384;
            D.22386 = D.22385 * 8;
            D.22403 = D.22402 + D.22386;
            D.22404 = *D.22403;
            if (D.22404 != 0B) goto <D.22405>; else goto <D.22397>;
            <D.22405>:
            D.22384 = def->sreg1;
            D.22399 = (unsigned int) D.22384;
            D.22400 = cfg->vreg_to_inst_len;
            if (D.22399 < D.22400) goto <D.22407>; else goto <D.22408>;
            <D.22407>:
            D.22402 = cfg->vreg_to_inst;
            D.22384 = def->sreg1;
            D.22385 = (long unsigned int) D.22384;
            D.22386 = D.22385 * 8;
            D.22403 = D.22402 + D.22386;
            iftmp.1 = *D.22403;
            goto <D.22409>;
            <D.22408>:
            iftmp.1 = 0B;
            <D.22409>:
            D.22410 = iftmp.1->flags;
            D.22411 = (int) D.22410;
            D.22412 = D.22411 & 20;
            if (D.22412 != 0) goto <D.22413>; else goto <D.22397>;
            <D.22413>:
            iftmp.0 = 1;
            goto <D.22398>;
            <D.22397>:
            iftmp.0 = 0;
            <D.22398>:
            D.22414 = iftmp.0 != 0;
            D.22415 = (long int) D.22414;
            D.22416 = __builtin_expect (D.22415, 0);
            if (D.22416 == 0) goto <D.22417>; else goto <D.22418>;
            <D.22417>:
            {
              int vreg;

              vreg = def->sreg1;
              D.22419 = cfg->verbose_level;
              if (D.22419 > 2) goto <D.22420>; else goto <D.22421>;
              <D.22420>:
              printf ("CCOPY: R%d -> R%d\n", sreg, vreg);
              <D.22421>:
              ins->dreg = vreg;
            }
            <D.22418>:
            <D.22380>:
            <D.22383>:
          }
          <D.22378>:
          <D.22372>:
          <D.22370>:
          <D.22368>:
          D.22328 = ins->sreg1;
          sregs[0] = D.22328;
          D.22329 = ins->sreg2;
          sregs[1] = D.22329;
          D.22330 = ins->sreg3;
          sregs[2] = D.22330;
          D.22331 = ins->opcode;
          D.22332 = (int) D.22331;
          D.22333 = D.22332 + -313;
          D.22334 = ins_sreg_counts[D.22333];
          num_sregs = (int) D.22334;
          srcindex = 0;
          goto <D.22217>;
          <D.22216>:
          {
            struct MonoInst * def;
            int nregs;

            D.22328 = ins->sreg1;
            sregs[0] = D.22328;
            D.22329 = ins->sreg2;
            sregs[1] = D.22329;
            D.22330 = ins->sreg3;
            sregs[2] = D.22330;
            D.22331 = ins->opcode;
            D.22332 = (int) D.22331;
            D.22333 = D.22332 + -313;
            D.22334 = ins_sreg_counts[D.22333];
            nregs = (int) D.22334;
            D.22422 = srcindex + 1;
            D.22423 = (sizetype) D.22422;
            D.22424 = spec + D.22423;
            D.22425 = *D.22424;
            regtype = (int) D.22425;
            sreg = sregs[srcindex];
            if (regtype == 32) goto <D.22426>; else goto <D.22428>;
            <D.22428>:
            if (sreg == -1) goto <D.22426>; else goto <D.22429>;
            <D.22429>:
            D.22373 = (long unsigned int) sreg;
            D.22374 = D.22373 * 8;
            D.22375 = defs + D.22374;
            D.22376 = *D.22375;
            if (D.22376 == 0B) goto <D.22426>; else goto <D.22427>;
            <D.22426>:
            // predicted unlikely by continue predictor.
            goto <D.22212>;
            <D.22427>:
            D.22373 = (long unsigned int) sreg;
            D.22374 = D.22373 * 8;
            D.22375 = defs + D.22374;
            def = *D.22375;
            D.22437 = def->opcode;
            if (D.22437 == 424) goto <D.22436>; else goto <D.22438>;
            <D.22438>:
            D.22437 = def->opcode;
            if (D.22437 == 426) goto <D.22436>; else goto <D.22439>;
            <D.22439>:
            D.22437 = def->opcode;
            if (D.22437 == 427) goto <D.22436>; else goto <D.22435>;
            <D.22436>:
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22442 = D.22441 * 8;
            D.22443 = defs + D.22442;
            D.22444 = *D.22443;
            if (D.22444 == 0B) goto <D.22434>; else goto <D.22445>;
            <D.22445>:
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22446 = D.22441 * 4;
            D.22447 = def_index + D.22446;
            D.22448 = *D.22447;
            D.22373 = (long unsigned int) sreg;
            D.22393 = D.22373 * 4;
            D.22394 = def_index + D.22393;
            D.22395 = *D.22394;
            if (D.22448 < D.22395) goto <D.22434>; else goto <D.22435>;
            <D.22434>:
            D.22440 = def->sreg1;
            D.22452 = (unsigned int) D.22440;
            D.22400 = cfg->vreg_to_inst_len;
            if (D.22452 < D.22400) goto <D.22453>; else goto <D.22450>;
            <D.22453>:
            D.22402 = cfg->vreg_to_inst;
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22442 = D.22441 * 8;
            D.22454 = D.22402 + D.22442;
            D.22455 = *D.22454;
            if (D.22455 != 0B) goto <D.22456>; else goto <D.22450>;
            <D.22456>:
            D.22440 = def->sreg1;
            D.22452 = (unsigned int) D.22440;
            D.22400 = cfg->vreg_to_inst_len;
            if (D.22452 < D.22400) goto <D.22458>; else goto <D.22459>;
            <D.22458>:
            D.22402 = cfg->vreg_to_inst;
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22442 = D.22441 * 8;
            D.22454 = D.22402 + D.22442;
            iftmp.3 = *D.22454;
            goto <D.22460>;
            <D.22459>:
            iftmp.3 = 0B;
            <D.22460>:
            D.22461 = iftmp.3->flags;
            D.22462 = (int) D.22461;
            D.22463 = D.22462 & 20;
            if (D.22463 != 0) goto <D.22464>; else goto <D.22450>;
            <D.22464>:
            iftmp.2 = 1;
            goto <D.22451>;
            <D.22450>:
            iftmp.2 = 0;
            <D.22451>:
            D.22465 = iftmp.2 != 0;
            D.22466 = (long int) D.22465;
            D.22467 = __builtin_expect (D.22466, 0);
            if (D.22467 == 0) goto <D.22468>; else goto <D.22469>;
            <D.22468>:
            D.22440 = def->sreg1;
            D.22452 = (unsigned int) D.22440;
            D.22400 = cfg->vreg_to_inst_len;
            if (D.22452 < D.22400) goto <D.22470>; else goto <D.22432>;
            <D.22470>:
            D.22402 = cfg->vreg_to_inst;
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22442 = D.22441 * 8;
            D.22454 = D.22402 + D.22442;
            D.22455 = *D.22454;
            if (D.22455 != 0B) goto <D.22433>; else goto <D.22432>;
            <D.22432>:
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22442 = D.22441 * 8;
            D.22443 = defs + D.22442;
            D.22444 = *D.22443;
            if (D.22444 == 0B) goto <D.22433>; else goto <D.22471>;
            <D.22471>:
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22446 = D.22441 * 4;
            D.22447 = def_index + D.22446;
            D.22448 = *D.22447;
            if (D.22448 >= last_call_index) goto <D.22433>; else goto <D.22472>;
            <D.22472>:
            D.22437 = def->opcode;
            if (D.22437 == 427) goto <D.22433>; else goto <D.22431>;
            <D.22433>:
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22442 = D.22441 * 8;
            D.22443 = defs + D.22442;
            D.22444 = *D.22443;
            if (D.22444 == 0B) goto <D.22430>; else goto <D.22473>;
            <D.22473>:
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22442 = D.22441 * 8;
            D.22443 = defs + D.22442;
            D.22444 = *D.22443;
            D.22474 = D.22444->next;
            if (D.22474 != def) goto <D.22430>; else goto <D.22431>;
            <D.22430>:
            D.22437 = def->opcode;
            if (D.22437 != 426) goto <D.22475>; else goto <D.22476>;
            <D.22475>:
            {
              int vreg;

              vreg = def->sreg1;
              D.22419 = cfg->verbose_level;
              if (D.22419 > 2) goto <D.22477>; else goto <D.22478>;
              <D.22477>:
              printf ("CCOPY/2: R%d -> R%d\n", sreg, vreg);
              <D.22478>:
              sregs[srcindex] = vreg;
              mono_inst_set_src_registers (ins, &sregs);
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.22212>;
            }
            <D.22476>:
            <D.22431>:
            <D.22469>:
            <D.22435>:
            D.22437 = def->opcode;
            D.22484 = D.22437 + 65174;
            if (D.22484 <= 1) goto <D.22485>; else goto <D.22479>;
            <D.22485>:
            if (srcindex == 0) goto <D.22486>; else goto <D.22480>;
            <D.22486>:
            D.22329 = ins->sreg2;
            if (D.22329 == -1) goto <D.22481>; else goto <D.22480>;
            <D.22480>:
            D.22487 = def->data.op[0].const_val;
            D.22488 = mono_arch_is_inst_imm (D.22487);
            if (D.22488 != 0) goto <D.22481>; else goto <D.22479>;
            <D.22479>:
            D.22437 = def->opcode;
            if (D.22437 == 365) goto <D.22481>; else goto <D.22482>;
            <D.22481>:
            {
              guint32 opcode2;

              if (srcindex == 1) goto <D.22491>; else goto <D.22489>;
              <D.22491>:
              D.22328 = ins->sreg1;
              if (D.22328 != -1) goto <D.22492>; else goto <D.22489>;
              <D.22492>:
              D.22328 = ins->sreg1;
              D.22493 = (long unsigned int) D.22328;
              D.22494 = D.22493 * 8;
              D.22495 = defs + D.22494;
              D.22496 = *D.22495;
              if (D.22496 != 0B) goto <D.22497>; else goto <D.22489>;
              <D.22497>:
              D.22328 = ins->sreg1;
              D.22493 = (long unsigned int) D.22328;
              D.22494 = D.22493 * 8;
              D.22495 = defs + D.22494;
              D.22496 = *D.22495;
              D.22498 = D.22496->opcode;
              if (D.22498 == 362) goto <D.22499>; else goto <D.22489>;
              <D.22499>:
              D.22329 = ins->sreg2;
              D.22500 = (long unsigned int) D.22329;
              D.22501 = D.22500 * 8;
              D.22502 = defs + D.22501;
              D.22503 = *D.22502;
              if (D.22503 != 0B) goto <D.22504>; else goto <D.22489>;
              <D.22504>:
              D.22328 = ins->sreg1;
              D.22493 = (long unsigned int) D.22328;
              D.22494 = D.22493 * 8;
              D.22495 = defs + D.22494;
              D.22496 = *D.22495;
              D.22329 = ins->sreg2;
              D.22500 = (long unsigned int) D.22329;
              D.22501 = D.22500 * 8;
              D.22502 = defs + D.22501;
              D.22503 = *D.22502;
              mono_constant_fold_ins (cfg, ins, D.22496, D.22503, 1);
              goto <D.22490>;
              <D.22489>:
              if (srcindex == 0) goto <D.22507>; else goto <D.22505>;
              <D.22507>:
              D.22329 = ins->sreg2;
              if (D.22329 != -1) goto <D.22508>; else goto <D.22505>;
              <D.22508>:
              D.22329 = ins->sreg2;
              D.22500 = (long unsigned int) D.22329;
              D.22501 = D.22500 * 8;
              D.22502 = defs + D.22501;
              D.22503 = *D.22502;
              if (D.22503 != 0B) goto <D.22509>; else goto <D.22505>;
              <D.22509>:
              {
                int opcode;

                D.22331 = ins->opcode;
                opcode = (int) D.22331;
                D.22328 = ins->sreg1;
                D.22493 = (long unsigned int) D.22328;
                D.22494 = D.22493 * 8;
                D.22495 = defs + D.22494;
                D.22496 = *D.22495;
                D.22329 = ins->sreg2;
                D.22500 = (long unsigned int) D.22329;
                D.22501 = D.22500 * 8;
                D.22502 = defs + D.22501;
                D.22503 = *D.22502;
                mono_constant_fold_ins (cfg, ins, D.22496, D.22503, 1);
                D.22331 = ins->opcode;
                D.22332 = (int) D.22331;
                if (D.22332 != opcode) goto <D.22510>; else goto <D.22511>;
                <D.22510>:
                srcindex = -1;
                // predicted unlikely by continue predictor.
                goto <D.22212>;
                <D.22511>:
              }
              goto <D.22506>;
              <D.22505>:
              if (srcindex == 0) goto <D.22512>; else goto <D.22513>;
              <D.22512>:
              D.22329 = ins->sreg2;
              if (D.22329 == -1) goto <D.22514>; else goto <D.22515>;
              <D.22514>:
              D.22328 = ins->sreg1;
              D.22493 = (long unsigned int) D.22328;
              D.22494 = D.22493 * 8;
              D.22495 = defs + D.22494;
              D.22496 = *D.22495;
              mono_constant_fold_ins (cfg, ins, D.22496, 0B, 1);
              <D.22515>:
              <D.22513>:
              <D.22506>:
              <D.22490>:
              D.22331 = ins->opcode;
              D.22332 = (int) D.22331;
              D.22516 = mono_op_to_op_imm (D.22332);
              opcode2 = (guint32) D.22516;
              if (opcode2 != 4294967295) goto <D.22519>; else goto <D.22517>;
              <D.22519>:
              D.22487 = def->data.op[0].const_val;
              D.22520 = mono_arch_is_inst_imm (D.22487);
              if (D.22520 != 0) goto <D.22521>; else goto <D.22517>;
              <D.22521>:
              if (srcindex == 1) goto <D.22518>; else goto <D.22522>;
              <D.22522>:
              D.22329 = ins->sreg2;
              if (D.22329 == -1) goto <D.22518>; else goto <D.22517>;
              <D.22518>:
              D.22523 = (short unsigned int) opcode2;
              ins->opcode = D.22523;
              if (0 != 0) goto <D.22524>; else goto <D.22525>;
              <D.22524>:
              D.22526 = def->data.op[1].const_val;
              ins->data.op[1].const_val = D.22526;
              D.22487 = def->data.op[0].const_val;
              ins->data.op[0].const_val = D.22487;
              goto <D.22527>;
              <D.22525>:
              D.22487 = def->data.op[0].const_val;
              ins->data.op[1].const_val = D.22487;
              <D.22527>:
              sregs[srcindex] = -1;
              mono_inst_set_src_registers (ins, &sregs);
              if (opcode2 == 343) goto <D.22528>; else goto <D.22530>;
              <D.22530>:
              if (opcode2 == 346) goto <D.22528>; else goto <D.22531>;
              <D.22531>:
              if (opcode2 == 352) goto <D.22528>; else goto <D.22532>;
              <D.22532>:
              if (opcode2 == 349) goto <D.22528>; else goto <D.22529>;
              <D.22528>:
              D.22533 = ins->data.op[1].const_val;
              D.22534 = (const void *) D.22533;
              MEM[(struct MonoCallInst *)ins].fptr = D.22534;
              <D.22529>:
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.22212>;
              <D.22517>:
              D.22331 = ins->opcode;
              D.22332 = (int) D.22331;
              D.22535 = mono_load_membase_to_load_mem (D.22332);
              opcode2 = (guint32) D.22535;
              if (srcindex == 0) goto <D.22536>; else goto <D.22537>;
              <D.22536>:
              if (opcode2 != 4294967295) goto <D.22538>; else goto <D.22539>;
              <D.22538>:
              D.22487 = def->data.op[0].const_val;
              D.22540 = mono_arch_is_inst_imm (D.22487);
              if (D.22540 != 0) goto <D.22541>; else goto <D.22542>;
              <D.22541>:
              D.22523 = (short unsigned int) opcode2;
              ins->opcode = D.22523;
              D.22487 = def->data.op[0].const_val;
              D.22543 = ins->data.op[0].const_val;
              D.22544 = D.22487 + D.22543;
              ins->data.op[1].const_val = D.22544;
              ins->sreg1 = -1;
              <D.22542>:
              <D.22539>:
              <D.22537>:
            }
            goto <D.22483>;
            <D.22482>:
            D.22437 = def->opcode;
            if (D.22437 == 429) goto <D.22545>; else goto <D.22548>;
            <D.22548>:
            D.22437 = def->opcode;
            if (D.22437 == 538) goto <D.22545>; else goto <D.22546>;
            <D.22545>:
            D.22331 = ins->opcode;
            D.22549 = D.22331 + 65148;
            if (D.22549 <= 11) goto <D.22550>; else goto <D.22546>;
            <D.22550>:
            D.22440 = def->sreg1;
            D.22452 = (unsigned int) D.22440;
            D.22553 = cfg->frame_reg;
            if (D.22452 == D.22553) goto <D.22551>; else goto <D.22554>;
            <D.22554>:
            D.22555 = def->next;
            if (D.22555 == ins) goto <D.22556>; else goto <D.22552>;
            <D.22556>:
            D.22557 = def->dreg;
            D.22440 = def->sreg1;
            if (D.22557 != D.22440) goto <D.22551>; else goto <D.22552>;
            <D.22551>:
            D.22440 = def->sreg1;
            ins->sreg1 = D.22440;
            D.22543 = ins->data.op[0].const_val;
            D.22526 = def->data.op[1].const_val;
            D.22558 = D.22543 + D.22526;
            ins->data.op[0].const_val = D.22558;
            <D.22552>:
            goto <D.22547>;
            <D.22546>:
            D.22331 = ins->opcode;
            if (D.22331 == 626) goto <D.22561>; else goto <D.22559>;
            <D.22561>:
            D.22437 = def->opcode;
            if (D.22437 == 625) goto <D.22562>; else goto <D.22559>;
            <D.22562>:
            D.22555 = def->next;
            if (D.22555 == ins) goto <D.22563>; else goto <D.22559>;
            <D.22563>:
            D.22557 = def->dreg;
            D.22440 = def->sreg1;
            if (D.22557 != D.22440) goto <D.22564>; else goto <D.22559>;
            <D.22564>:
            D.22440 = def->sreg1;
            ins->sreg1 = D.22440;
            D.22533 = ins->data.op[1].const_val;
            D.22526 = def->data.op[1].const_val;
            D.22565 = D.22533 - D.22526;
            ins->data.op[1].const_val = D.22565;
            goto <D.22560>;
            <D.22559>:
            D.22331 = ins->opcode;
            if (D.22331 == 625) goto <D.22568>; else goto <D.22566>;
            <D.22568>:
            D.22437 = def->opcode;
            if (D.22437 == 626) goto <D.22569>; else goto <D.22566>;
            <D.22569>:
            D.22555 = def->next;
            if (D.22555 == ins) goto <D.22570>; else goto <D.22566>;
            <D.22570>:
            D.22557 = def->dreg;
            D.22440 = def->sreg1;
            if (D.22557 != D.22440) goto <D.22571>; else goto <D.22566>;
            <D.22571>:
            D.22440 = def->sreg1;
            ins->sreg1 = D.22440;
            D.22533 = ins->data.op[1].const_val;
            D.22526 = def->data.op[1].const_val;
            D.22565 = D.22533 - D.22526;
            ins->data.op[1].const_val = D.22565;
            goto <D.22567>;
            <D.22566>:
            D.22331 = ins->opcode;
            if (D.22331 == 375) goto <D.22576>; else goto <D.22572>;
            <D.22576>:
            D.22437 = def->opcode;
            if (D.22437 == 591) goto <D.22573>; else goto <D.22577>;
            <D.22577>:
            D.22437 = def->opcode;
            if (D.22437 == 580) goto <D.22573>; else goto <D.22578>;
            <D.22578>:
            D.22437 = def->opcode;
            if (D.22437 == 762) goto <D.22573>; else goto <D.22579>;
            <D.22579>:
            D.22437 = def->opcode;
            if (D.22437 == 503) goto <D.22573>; else goto <D.22572>;
            <D.22573>:
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22442 = D.22441 * 8;
            D.22443 = defs + D.22442;
            D.22444 = *D.22443;
            if (D.22444 == 0B) goto <D.22574>; else goto <D.22580>;
            <D.22580>:
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22446 = D.22441 * 4;
            D.22447 = def_index + D.22446;
            D.22448 = *D.22447;
            D.22373 = (long unsigned int) sreg;
            D.22393 = D.22373 * 4;
            D.22394 = def_index + D.22393;
            D.22395 = *D.22394;
            if (D.22448 < D.22395) goto <D.22574>; else goto <D.22572>;
            <D.22574>:
            D.22440 = def->sreg1;
            ins->sreg1 = D.22440;
            goto <D.22575>;
            <D.22572>:
            D.22331 = ins->opcode;
            if (D.22331 == 376) goto <D.22584>; else goto <D.22585>;
            <D.22584>:
            D.22437 = def->opcode;
            if (D.22437 == 590) goto <D.22583>; else goto <D.22586>;
            <D.22586>:
            D.22437 = def->opcode;
            if (D.22437 == 581) goto <D.22583>; else goto <D.22587>;
            <D.22587>:
            D.22437 = def->opcode;
            if (D.22437 == 762) goto <D.22583>; else goto <D.22588>;
            <D.22588>:
            D.22437 = def->opcode;
            if (D.22437 == 495) goto <D.22583>; else goto <D.22582>;
            <D.22583>:
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22442 = D.22441 * 8;
            D.22443 = defs + D.22442;
            D.22444 = *D.22443;
            if (D.22444 == 0B) goto <D.22581>; else goto <D.22589>;
            <D.22589>:
            D.22440 = def->sreg1;
            D.22441 = (long unsigned int) D.22440;
            D.22446 = D.22441 * 4;
            D.22447 = def_index + D.22446;
            D.22448 = *D.22447;
            D.22373 = (long unsigned int) sreg;
            D.22393 = D.22373 * 4;
            D.22394 = def_index + D.22393;
            D.22395 = *D.22394;
            if (D.22448 < D.22395) goto <D.22581>; else goto <D.22582>;
            <D.22581>:
            D.22440 = def->sreg1;
            ins->sreg1 = D.22440;
            <D.22582>:
            <D.22585>:
            <D.22575>:
            <D.22567>:
            <D.22560>:
            <D.22547>:
            <D.22483>:
          }
          <D.22212>:
          srcindex = srcindex + 1;
          <D.22217>:
          if (srcindex < num_sregs) goto <D.22216>; else goto <D.22218>;
          <D.22218>:
          D.22331 = ins->opcode;
          D.22332 = (int) D.22331;
          switch (D.22332) <default: <D.22671>, case 424: <D.22219>, case 429: <D.22222>, case 430: <D.22224>, case 431: <D.22228>, case 538: <D.22226>, case 539: <D.22227>, case 540: <D.22230>, case 625: <D.22223>, case 626: <D.22225>, case 627: <D.22229>, case 628: <D.22236>, case 629: <D.22233>, case 631: <D.22232>, case 800: <D.22220>>
          <D.22219>:
          <D.22220>:
          D.22320 = ins->dreg;
          D.22328 = ins->sreg1;
          if (D.22320 == D.22328) goto <D.22590>; else goto <D.22591>;
          <D.22590>:
          D.22343 = ins->prev;
          if (D.22343 != 0B) goto <D.22592>; else goto <D.22593>;
          <D.22592>:
          D.22343 = ins->prev;
          D.22346 = ins->next;
          D.22343->next = D.22346;
          <D.22593>:
          D.22346 = ins->next;
          if (D.22346 != 0B) goto <D.22594>; else goto <D.22595>;
          <D.22594>:
          D.22346 = ins->next;
          D.22343 = ins->prev;
          D.22346->prev = D.22343;
          <D.22595>:
          D.22349 = bb->code;
          if (D.22349 == ins) goto <D.22596>; else goto <D.22597>;
          <D.22596>:
          D.22346 = ins->next;
          bb->code = D.22346;
          <D.22597>:
          D.22352 = bb->last_ins;
          if (D.22352 == ins) goto <D.22598>; else goto <D.22599>;
          <D.22598>:
          D.22343 = ins->prev;
          bb->last_ins = D.22343;
          <D.22599>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22330 = ins->sreg3;
          ins->sreg2 = D.22330;
          D.22329 = ins->sreg2;
          ins->sreg1 = D.22329;
          D.22331 = ins->opcode;
          D.22332 = (int) D.22331;
          D.22333 = D.22332 + -313;
          D.22340 = D.22333 * 4;
          spec = &ins_info[D.22340];
          <D.22591>:
          goto <D.22221>;
          <D.22222>:
          <D.22223>:
          <D.22224>:
          <D.22225>:
          <D.22226>:
          <D.22227>:
          D.22533 = ins->data.op[1].const_val;
          if (D.22533 == 0) goto <D.22600>; else goto <D.22601>;
          <D.22600>:
          ins->opcode = 424;
          D.22331 = ins->opcode;
          D.22332 = (int) D.22331;
          D.22333 = D.22332 + -313;
          D.22340 = D.22333 * 4;
          spec = &ins_info[D.22340];
          <D.22601>:
          goto <D.22221>;
          <D.22228>:
          <D.22229>:
          <D.22230>:
          D.22533 = ins->data.op[1].const_val;
          if (D.22533 == 0) goto <D.22602>; else goto <D.22603>;
          <D.22602>:
          D.22331 = ins->opcode;
          if (D.22331 == 540) goto <D.22605>; else goto <D.22606>;
          <D.22605>:
          iftmp.4 = 363;
          goto <D.22607>;
          <D.22606>:
          iftmp.4 = 362;
          <D.22607>:
          ins->opcode = iftmp.4;
          ins->data.op[0].const_val = 0;
          ins->sreg1 = -1;
          goto <D.22608>;
          <D.22603>:
          D.22533 = ins->data.op[1].const_val;
          if (D.22533 == 1) goto <D.22609>; else goto <D.22610>;
          <D.22609>:
          ins->opcode = 424;
          goto <D.22611>;
          <D.22610>:
          D.22331 = ins->opcode;
          if (D.22331 == 627) goto <D.22614>; else goto <D.22612>;
          <D.22614>:
          D.22533 = ins->data.op[1].const_val;
          if (D.22533 == -1) goto <D.22615>; else goto <D.22612>;
          <D.22615>:
          ins->opcode = 578;
          goto <D.22613>;
          <D.22612>:
          D.22331 = ins->opcode;
          if (D.22331 == 540) goto <D.22618>; else goto <D.22616>;
          <D.22618>:
          D.22533 = ins->data.op[1].const_val;
          if (D.22533 == -1) goto <D.22619>; else goto <D.22616>;
          <D.22619>:
          ins->opcode = 492;
          goto <D.22617>;
          <D.22616>:
          {
            int power2;

            D.22533 = ins->data.op[1].const_val;
            D.22620 = (unsigned int) D.22533;
            power2 = mono_is_power_of_two (D.22620);
            if (power2 >= 0) goto <D.22621>; else goto <D.22622>;
            <D.22621>:
            D.22331 = ins->opcode;
            if (D.22331 != 431) goto <D.22624>; else goto <D.22625>;
            <D.22624>:
            D.22331 = ins->opcode;
            if (D.22331 == 540) goto <D.22627>; else goto <D.22628>;
            <D.22627>:
            iftmp.6 = 544;
            goto <D.22629>;
            <D.22628>:
            iftmp.6 = 635;
            <D.22629>:
            iftmp.5 = iftmp.6;
            goto <D.22630>;
            <D.22625>:
            iftmp.5 = 439;
            <D.22630>:
            ins->opcode = iftmp.5;
            D.22631 = (long int) power2;
            ins->data.op[1].const_val = D.22631;
            <D.22622>:
          }
          <D.22617>:
          <D.22613>:
          <D.22611>:
          <D.22608>:
          D.22331 = ins->opcode;
          D.22332 = (int) D.22331;
          D.22333 = D.22332 + -313;
          D.22340 = D.22333 * 4;
          spec = &ins_info[D.22340];
          goto <D.22221>;
          <D.22232>:
          <D.22233>:
          {
            int c;
            int power2;

            D.22533 = ins->data.op[1].const_val;
            c = (int) D.22533;
            c.7 = (unsigned int) c;
            power2 = mono_is_power_of_two (c.7);
            if (power2 >= 0) goto <D.22633>; else goto <D.22634>;
            <D.22633>:
            D.22331 = ins->opcode;
            if (D.22331 == 631) goto <D.22635>; else goto <D.22636>;
            <D.22635>:
            ins->opcode = 632;
            ins->sreg2 = -1;
            D.22637 = 1 << power2;
            D.22638 = D.22637 + -1;
            D.22639 = (long int) D.22638;
            ins->data.op[1].const_val = D.22639;
            goto <D.22640>;
            <D.22636>:
            D.22331 = ins->opcode;
            if (D.22331 == 629) goto <D.22641>; else goto <D.22642>;
            <D.22641>:
            ins->opcode = 637;
            ins->sreg2 = -1;
            D.22643 = (long int) power2;
            ins->data.op[1].const_val = D.22643;
            <D.22642>:
            <D.22640>:
            <D.22634>:
            D.22331 = ins->opcode;
            D.22332 = (int) D.22331;
            D.22333 = D.22332 + -313;
            D.22340 = D.22333 * 4;
            spec = &ins_info[D.22340];
            goto <D.22221>;
          }
          <D.22236>:
          {
            int c;
            int power2;
            struct MonoInst * tmp1;
            struct MonoInst * tmp2;
            struct MonoInst * tmp3;
            struct MonoInst * tmp4;

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

              D.22647 = mono_alloc_ireg (cfg);
              r1 = (int) D.22647;
              D.22316 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.22316, 80);
              tmp1->data.op[1].const_val = 0;
              D.22648 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.22648;
              tmp1->prev = 0B;
              D.22649 = tmp1->prev;
              tmp1->next = D.22649;
              tmp1->opcode = 637;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.22650 = tmp1->sreg3;
              tmp1->sreg2 = D.22650;
              D.22651 = tmp1->sreg2;
              tmp1->sreg1 = D.22651;
              D.22652 = cfg->ip;
              tmp1->cil_code = D.22652;
              tmp1->dreg = r1;
              D.22328 = ins->sreg1;
              tmp1->sreg1 = D.22328;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.22316 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.22316, 80);
              tmp2->data.op[1].const_val = 0;
              D.22653 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.22653;
              tmp2->prev = 0B;
              D.22654 = tmp2->prev;
              tmp2->next = D.22654;
              tmp2->opcode = 565;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.22655 = tmp2->sreg3;
              tmp2->sreg2 = D.22655;
              D.22656 = tmp2->sreg2;
              tmp2->sreg1 = D.22656;
              D.22652 = cfg->ip;
              tmp2->cil_code = D.22652;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.22328 = ins->sreg1;
              tmp2->sreg2 = D.22328;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.22316 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.22316, 80);
              tmp3->data.op[1].const_val = 0;
              D.22657 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.22657;
              tmp3->prev = 0B;
              D.22658 = tmp3->prev;
              tmp3->next = D.22658;
              tmp3->opcode = 636;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.22659 = tmp3->sreg3;
              tmp3->sreg2 = D.22659;
              D.22660 = tmp3->sreg2;
              tmp3->sreg1 = D.22660;
              D.22652 = cfg->ip;
              tmp3->cil_code = D.22652;
              D.22320 = ins->dreg;
              tmp3->dreg = D.22320;
              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.22330 = ins->sreg3;
              ins->sreg2 = D.22330;
              D.22329 = ins->sreg2;
              ins->sreg1 = D.22329;
              goto restart;
            }
            <D.22646>:
            if (power2 > 0) goto <D.22661>; else goto <D.22662>;
            <D.22661>:
            {
              int r1;

              D.22663 = mono_alloc_ireg (cfg);
              r1 = (int) D.22663;
              D.22316 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.22316, 80);
              tmp1->data.op[1].const_val = 0;
              D.22648 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.22648;
              tmp1->prev = 0B;
              D.22649 = tmp1->prev;
              tmp1->next = D.22649;
              tmp1->opcode = 636;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.22650 = tmp1->sreg3;
              tmp1->sreg2 = D.22650;
              D.22651 = tmp1->sreg2;
              tmp1->sreg1 = D.22651;
              D.22652 = cfg->ip;
              tmp1->cil_code = D.22652;
              tmp1->dreg = r1;
              D.22328 = ins->sreg1;
              tmp1->sreg1 = D.22328;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.22316 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.22316, 80);
              tmp2->data.op[1].const_val = 0;
              D.22653 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.22653;
              tmp2->prev = 0B;
              D.22654 = tmp2->prev;
              tmp2->next = D.22654;
              tmp2->opcode = 637;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.22655 = tmp2->sreg3;
              tmp2->sreg2 = D.22655;
              D.22656 = tmp2->sreg2;
              tmp2->sreg1 = D.22656;
              D.22652 = cfg->ip;
              tmp2->cil_code = D.22652;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.22664 = 32 - power2;
              D.22665 = (long int) D.22664;
              tmp2->data.op[1].const_val = D.22665;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.22316 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.22316, 80);
              tmp3->data.op[1].const_val = 0;
              D.22657 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.22657;
              tmp3->prev = 0B;
              D.22658 = tmp3->prev;
              tmp3->next = D.22658;
              tmp3->opcode = 565;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.22659 = tmp3->sreg3;
              tmp3->sreg2 = D.22659;
              D.22660 = tmp3->sreg2;
              tmp3->sreg1 = D.22660;
              D.22652 = cfg->ip;
              tmp3->cil_code = D.22652;
              tmp3->dreg = r1;
              tmp3->sreg1 = r1;
              D.22328 = ins->sreg1;
              tmp3->sreg2 = D.22328;
              mono_bblock_insert_after_ins (bb, tmp2, tmp3);
              D.22316 = cfg->mempool;
              tmp4 = mono_mempool_alloc (D.22316, 80);
              tmp4->data.op[1].const_val = 0;
              D.22666 = tmp4->data.op[1].const_val;
              tmp4->data.op[0].const_val = D.22666;
              tmp4->prev = 0B;
              D.22667 = tmp4->prev;
              tmp4->next = D.22667;
              tmp4->opcode = 636;
              tmp4->flags = 0;
              tmp4->type = 0;
              tmp4->dreg = -1;
              tmp4->sreg3 = -1;
              D.22668 = tmp4->sreg3;
              tmp4->sreg2 = D.22668;
              D.22669 = tmp4->sreg2;
              tmp4->sreg1 = D.22669;
              D.22652 = cfg->ip;
              tmp4->cil_code = D.22652;
              D.22320 = ins->dreg;
              tmp4->dreg = D.22320;
              tmp4->sreg1 = r1;
              D.22670 = (long int) power2;
              tmp4->data.op[1].const_val = D.22670;
              mono_bblock_insert_after_ins (bb, tmp3, tmp4);
              ins->opcode = 316;
              ins->dreg = -1;
              ins->sreg3 = -1;
              D.22330 = ins->sreg3;
              ins->sreg2 = D.22330;
              D.22329 = ins->sreg2;
              ins->sreg1 = D.22329;
              goto restart;
            }
            <D.22662>:
            goto <D.22221>;
          }
          <D.22671>:
          <D.22221>:
          D.22672 = *spec;
          if (D.22672 != 32) goto <D.22673>; else goto <D.22674>;
          <D.22673>:
          {
            struct MonoInst * def;

            D.22320 = ins->dreg;
            D.22325 = (long unsigned int) D.22320;
            D.22326 = D.22325 * 8;
            D.22327 = defs + D.22326;
            def = *D.22327;
            if (def != 0B) goto <D.22675>; else goto <D.22676>;
            <D.22675>:
            D.22677 = def->opcode;
            if (D.22677 == 429) goto <D.22678>; else goto <D.22679>;
            <D.22678>:
            D.22680 = def->sreg1;
            D.22681 = (unsigned int) D.22680;
            D.22553 = cfg->frame_reg;
            if (D.22681 == D.22553) goto <D.22682>; else goto <D.22683>;
            <D.22682>:
            D.22331 = ins->opcode;
            D.22366 = D.22331 + 65162;
            if (D.22366 <= 13) goto <D.22684>; else goto <D.22685>;
            <D.22684>:
            D.22680 = def->sreg1;
            ins->dreg = D.22680;
            D.22543 = ins->data.op[0].const_val;
            D.22686 = def->data.op[1].const_val;
            D.22687 = D.22543 + D.22686;
            ins->data.op[0].const_val = D.22687;
            <D.22685>:
            <D.22683>:
            <D.22679>:
            <D.22676>:
          }
          <D.22674>:
          D.22672 = *spec;
          if (D.22672 != 32) goto <D.22688>; else goto <D.22689>;
          <D.22688>:
          D.22331 = ins->opcode;
          D.22366 = D.22331 + 65162;
          if (D.22366 > 13) goto <D.22690>; else goto <D.22691>;
          <D.22690>:
          D.22320 = ins->dreg;
          D.22695 = (unsigned int) D.22320;
          D.22400 = cfg->vreg_to_inst_len;
          if (D.22695 < D.22400) goto <D.22696>; else goto <D.22693>;
          <D.22696>:
          D.22402 = cfg->vreg_to_inst;
          D.22320 = ins->dreg;
          D.22325 = (long unsigned int) D.22320;
          D.22326 = D.22325 * 8;
          D.22697 = D.22402 + D.22326;
          D.22698 = *D.22697;
          if (D.22698 != 0B) goto <D.22699>; else goto <D.22693>;
          <D.22699>:
          D.22320 = ins->dreg;
          D.22695 = (unsigned int) D.22320;
          D.22400 = cfg->vreg_to_inst_len;
          if (D.22695 < D.22400) goto <D.22701>; else goto <D.22702>;
          <D.22701>:
          D.22402 = cfg->vreg_to_inst;
          D.22320 = ins->dreg;
          D.22325 = (long unsigned int) D.22320;
          D.22326 = D.22325 * 8;
          D.22697 = D.22402 + D.22326;
          iftmp.10 = *D.22697;
          goto <D.22703>;
          <D.22702>:
          iftmp.10 = 0B;
          <D.22703>:
          D.22704 = iftmp.10->flags;
          D.22705 = (int) D.22704;
          D.22706 = D.22705 & 20;
          if (D.22706 != 0) goto <D.22707>; else goto <D.22693>;
          <D.22707>:
          iftmp.9 = 1;
          goto <D.22694>;
          <D.22693>:
          iftmp.9 = 0;
          <D.22694>:
          D.22708 = iftmp.9 != 0;
          D.22709 = (long int) D.22708;
          D.22710 = __builtin_expect (D.22709, 0);
          if (D.22710 == 0) goto <D.22711>; else goto <D.22712>;
          <D.22711>:
          D.22320 = ins->dreg;
          D.22325 = (long unsigned int) D.22320;
          D.22326 = D.22325 * 8;
          D.22327 = defs + D.22326;
          *D.22327 = ins;
          D.22320 = ins->dreg;
          D.22325 = (long unsigned int) D.22320;
          D.22713 = D.22325 * 4;
          D.22714 = def_index + D.22713;
          *D.22714 = ins_index;
          <D.22712>:
          <D.22691>:
          <D.22689>:
          D.22331 = ins->opcode;
          D.22717 = D.22331 + 65193;
          if (D.22717 <= 2) goto <D.22715>; else goto <D.22718>;
          <D.22718>:
          D.22331 = ins->opcode;
          D.22719 = D.22331 + 65187;
          if (D.22719 <= 2) goto <D.22715>; else goto <D.22720>;
          <D.22720>:
          D.22331 = ins->opcode;
          D.22721 = D.22331 + 65184;
          if (D.22721 <= 2) goto <D.22715>; else goto <D.22722>;
          <D.22722>:
          D.22331 = ins->opcode;
          D.22723 = D.22331 + 65181;
          if (D.22723 <= 2) goto <D.22715>; else goto <D.22724>;
          <D.22724>:
          D.22331 = ins->opcode;
          D.22725 = D.22331 + 65190;
          if (D.22725 <= 2) goto <D.22715>; else goto <D.22726>;
          <D.22726>:
          D.22331 = ins->opcode;
          D.22727 = D.22331 + 65178;
          if (D.22727 <= 2) goto <D.22715>; else goto <D.22728>;
          <D.22728>:
          D.22331 = ins->opcode;
          if (D.22331 == 444) goto <D.22715>; else goto <D.22716>;
          <D.22715>:
          last_call_index = ins_index;
          <D.22716>:
          ins_index = ins_index + 1;
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    <D.22206>:
    ins = ins->next;
    <D.22247>:
    if (ins != 0B) goto <D.22246>; else goto <D.22248>;
    <D.22248>:
  }
  bb = bb->next_bb;
  <D.22250>:
  if (bb != 0B) goto <D.22249>; else goto <D.22251>;
  <D.22251>:
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__))
printf (const char * restrict __fmt)
{
  int D.22732;

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


mono_local_deadce (struct MonoCompile * cfg)
{
  struct MonoMemPool * D.22734;
  unsigned int D.22735;
  unsigned int D.22736;
  short unsigned int D.22737;
  int D.22738;
  int D.22739;
  int D.22740;
  char D.22741;
  int D.22744;
  long unsigned int D.22745;
  long unsigned int D.22746;
  long unsigned int D.22747;
  unsigned int D.22748;
  unsigned int D.22749;
  long unsigned int D.22750;
  long unsigned int D.22751;
  long unsigned int D.22752;
  long unsigned int D.22753;
  long unsigned int D.22754;
  long unsigned int D.22755;
  int D.22756;
  int D.22757;
  int D.22758;
  signed char D.22759;
  int D.22760;
  long unsigned int D.22761;
  long unsigned int D.22762;
  long unsigned int D.22763;
  unsigned int D.22764;
  unsigned int D.22765;
  long unsigned int D.22766;
  long unsigned int D.22767;
  long unsigned int D.22768;
  struct MonoInst * iftmp.11;
  struct MonoInst * D.22775;
  struct MonoInst * D.22778;
  struct MonoInst * D.22781;
  struct MonoInst * D.22784;
  _Bool D.22787;
  long int D.22788;
  long int D.22789;
  struct MonoInst * D.22797;
  short unsigned int D.22799;
  int D.22800;
  int D.22801;
  int D.22802;
  unsigned int D.22805;
  unsigned int D.22806;
  struct MonoInst * * D.22808;
  long unsigned int D.22809;
  long unsigned int D.22810;
  struct MonoInst * * D.22811;
  struct MonoInst * D.22812;
  char D.22813;
  int D.22816;
  long unsigned int D.22819;
  long unsigned int D.22820;
  unsigned int D.22821;
  unsigned int D.22822;
  long unsigned int D.22823;
  long unsigned int D.22824;
  short unsigned int D.22827;
  char D.22830;
  int D.22831;
  int D.22834;
  unsigned int D.22837;
  int D.22840;
  int D.22849;
  long unsigned int D.22855;
  long unsigned int D.22856;
  long unsigned int D.22857;
  long unsigned int D.22858;
  unsigned int D.22861;
  long unsigned int D.22863;
  struct MonoInst * * D.22864;
  struct MonoInst * D.22865;
  long unsigned int D.22867;
  long unsigned int D.22868;
  int iftmp.12;
  struct MonoInst * iftmp.13;
  unsigned char D.22879;
  int D.22880;
  int D.22881;
  _Bool D.22883;
  long int D.22884;
  long int D.22885;
  long unsigned int D.22887;
  long unsigned int D.22888;
  long unsigned int D.22889;
  short unsigned int D.22921;
  int D.22924;
  int D.22925;
  long unsigned int D.22936;
  long unsigned int D.22937;
  long unsigned int D.22938;
  long unsigned int D.22941;
  long unsigned int D.22942;
  long unsigned int D.22943;
  int D.22944;
  long unsigned int D.22945;
  long unsigned int D.22946;
  long unsigned int D.22947;
  unsigned int D.22948;
  unsigned int D.22949;
  long unsigned int D.22950;
  long unsigned int D.22951;
  short unsigned int D.22952;
  long unsigned int D.22955;
  long unsigned int D.22956;
  long unsigned int D.22957;
  short unsigned int D.22960;
  short unsigned int D.22962;
  short unsigned int D.22964;
  short unsigned int D.22966;
  short unsigned int D.22968;
  short unsigned int D.22970;
  struct GSList * D.22972;
  void * D.22975;
  long int D.22976;
  unsigned int D.22977;
  long unsigned int D.22978;
  long unsigned int D.22979;
  unsigned int D.22980;
  long unsigned int D.22981;
  long unsigned int D.22982;
  struct GSList * D.22983;
  unsigned int D.22986;
  long unsigned int D.22987;
  long unsigned int D.22988;
  unsigned int D.22989;
  long unsigned int D.22990;
  long unsigned int D.22991;
  struct MonoInst * iftmp.14;
  struct MonoBasicBlock * bb;
  struct MonoInst * ins;
  struct MonoInst * prev;
  struct MonoBitSet * used;
  struct MonoBitSet * defined;

  D.22734 = cfg->mempool;
  D.22735 = cfg->next_vreg;
  D.22736 = D.22735 + 1;
  used = mono_bitset_mp_new_noinit (D.22734, D.22736);
  D.22734 = cfg->mempool;
  D.22735 = cfg->next_vreg;
  D.22736 = D.22735 + 1;
  defined = mono_bitset_mp_new_noinit (D.22734, D.22736);
  bb = cfg->bb_entry;
  goto <D.22312>;
  <D.22311>:
  ins = bb->code;
  goto <D.22280>;
  <D.22279>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.22737 = ins->opcode;
        D.22738 = (int) D.22737;
        D.22739 = D.22738 + -313;
        D.22740 = D.22739 * 4;
        spec = &ins_info[D.22740];
        D.22741 = *spec;
        if (D.22741 != 32) goto <D.22742>; else goto <D.22743>;
        <D.22742>:
        D.22744 = ins->dreg;
        D.22745 = (long unsigned int) D.22744;
        D.22746 = D.22745 / 64;
        D.22747 = used->data[D.22746];
        D.22744 = ins->dreg;
        D.22748 = (unsigned int) D.22744;
        D.22749 = D.22748 & 63;
        D.22750 = 1 << D.22749;
        D.22751 = ~D.22750;
        D.22752 = D.22747 & D.22751;
        used->data[D.22746] = D.22752;
        D.22744 = ins->dreg;
        D.22745 = (long unsigned int) D.22744;
        D.22753 = D.22745 / 64;
        D.22754 = defined->data[D.22753];
        D.22744 = ins->dreg;
        D.22748 = (unsigned int) D.22744;
        D.22749 = D.22748 & 63;
        D.22750 = 1 << D.22749;
        D.22751 = ~D.22750;
        D.22755 = D.22754 & D.22751;
        defined->data[D.22753] = D.22755;
        <D.22743>:
        D.22756 = ins->sreg1;
        sregs[0] = D.22756;
        D.22757 = ins->sreg2;
        sregs[1] = D.22757;
        D.22758 = ins->sreg3;
        sregs[2] = D.22758;
        D.22737 = ins->opcode;
        D.22738 = (int) D.22737;
        D.22739 = D.22738 + -313;
        D.22759 = ins_sreg_counts[D.22739];
        num_sregs = (int) D.22759;
        i = 0;
        goto <D.22277>;
        <D.22276>:
        D.22760 = sregs[i];
        D.22761 = (long unsigned int) D.22760;
        D.22762 = D.22761 / 64;
        D.22763 = used->data[D.22762];
        D.22760 = sregs[i];
        D.22764 = (unsigned int) D.22760;
        D.22765 = D.22764 & 63;
        D.22766 = 1 << D.22765;
        D.22767 = ~D.22766;
        D.22768 = D.22763 & D.22767;
        used->data[D.22762] = D.22768;
        i = i + 1;
        <D.22277>:
        if (i < num_sregs) goto <D.22276>; else goto <D.22278>;
        <D.22278>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  ins = ins->next;
  <D.22280>:
  if (ins != 0B) goto <D.22279>; else goto <D.22281>;
  <D.22281>:
  ins = bb->last_ins;
  if (ins != 0B) goto <D.22770>; else goto <D.22771>;
  <D.22770>:
  iftmp.11 = ins->prev;
  goto <D.22772>;
  <D.22771>:
  iftmp.11 = 0B;
  <D.22772>:
  prev = iftmp.11;
  goto <D.22309>;
  <D.22308>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.22737 = ins->opcode;
        D.22738 = (int) D.22737;
        D.22739 = D.22738 + -313;
        D.22740 = D.22739 * 4;
        spec = &ins_info[D.22740];
        D.22737 = ins->opcode;
        if (D.22737 == 316) goto <D.22773>; else goto <D.22774>;
        <D.22773>:
        D.22775 = ins->prev;
        if (D.22775 != 0B) goto <D.22776>; else goto <D.22777>;
        <D.22776>:
        D.22775 = ins->prev;
        D.22778 = ins->next;
        D.22775->next = D.22778;
        <D.22777>:
        D.22778 = ins->next;
        if (D.22778 != 0B) goto <D.22779>; else goto <D.22780>;
        <D.22779>:
        D.22778 = ins->next;
        D.22775 = ins->prev;
        D.22778->prev = D.22775;
        <D.22780>:
        D.22781 = bb->code;
        if (D.22781 == ins) goto <D.22782>; else goto <D.22783>;
        <D.22782>:
        D.22778 = ins->next;
        bb->code = D.22778;
        <D.22783>:
        D.22784 = bb->last_ins;
        if (D.22784 == ins) goto <D.22785>; else goto <D.22786>;
        <D.22785>:
        D.22775 = ins->prev;
        bb->last_ins = D.22775;
        <D.22786>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.22758 = ins->sreg3;
        ins->sreg2 = D.22758;
        D.22757 = ins->sreg2;
        ins->sreg1 = D.22757;
        // predicted unlikely by continue predictor.
        goto <D.22286>;
        <D.22774>:
        D.22737 = ins->opcode;
        D.22787 = D.22737 <= 313;
        D.22788 = (long int) D.22787;
        D.22789 = __builtin_expect (D.22788, 0);
        if (D.22789 != 0) goto <D.22790>; else goto <D.22791>;
        <D.22790>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 521, "ins->opcode > MONO_CEE_LAST");
        <D.22791>:
        D.22737 = ins->opcode;
        if (D.22737 == 424) goto <D.22792>; else goto <D.22794>;
        <D.22794>:
        D.22737 = ins->opcode;
        if (D.22737 == 427) goto <D.22792>; else goto <D.22793>;
        <D.22792>:
        D.22775 = ins->prev;
        if (D.22775 != 0B) goto <D.22795>; else goto <D.22796>;
        <D.22795>:
        {
          struct MonoInst * def;
          const char * spec2;

          def = ins->prev;
          goto <D.22290>;
          <D.22289>:
          def = def->prev;
          <D.22290>:
          D.22797 = def->prev;
          if (D.22797 != 0B) goto <D.22798>; else goto <D.22291>;
          <D.22798>:
          D.22799 = def->opcode;
          if (D.22799 == 316) goto <D.22289>; else goto <D.22291>;
          <D.22291>:
          D.22799 = def->opcode;
          D.22800 = (int) D.22799;
          D.22801 = D.22800 + -313;
          D.22802 = D.22801 * 4;
          spec2 = &ins_info[D.22802];
          D.22756 = ins->sreg1;
          D.22805 = (unsigned int) D.22756;
          D.22806 = cfg->vreg_to_inst_len;
          if (D.22805 >= D.22806) goto <D.22803>; else goto <D.22807>;
          <D.22807>:
          D.22808 = cfg->vreg_to_inst;
          D.22756 = ins->sreg1;
          D.22809 = (long unsigned int) D.22756;
          D.22810 = D.22809 * 8;
          D.22811 = D.22808 + D.22810;
          D.22812 = *D.22811;
          if (D.22812 == 0B) goto <D.22803>; else goto <D.22804>;
          <D.22803>:
          D.22813 = *spec2;
          if (D.22813 != 32) goto <D.22814>; else goto <D.22815>;
          <D.22814>:
          D.22816 = def->dreg;
          D.22756 = ins->sreg1;
          if (D.22816 == D.22756) goto <D.22817>; else goto <D.22818>;
          <D.22817>:
          D.22756 = ins->sreg1;
          D.22809 = (long unsigned int) D.22756;
          D.22819 = D.22809 / 64;
          D.22820 = used->data[D.22819];
          D.22756 = ins->sreg1;
          D.22821 = (unsigned int) D.22756;
          D.22822 = D.22821 & 63;
          D.22823 = D.22820 >> D.22822;
          D.22824 = D.22823 & 1;
          if (D.22824 == 0) goto <D.22825>; else goto <D.22826>;
          <D.22825>:
          D.22799 = def->opcode;
          D.22827 = D.22799 + 65162;
          if (D.22827 > 13) goto <D.22828>; else goto <D.22829>;
          <D.22828>:
          D.22756 = ins->sreg1;
          D.22830 = *spec;
          D.22831 = reg_is_softreg (D.22756, D.22830);
          if (D.22831 != 0) goto <D.22832>; else goto <D.22833>;
          <D.22832>:
          D.22834 = mono_is_simd_accessor (def);
          if (D.22834 == 0) goto <D.22835>; else goto <D.22836>;
          <D.22835>:
          D.22837 = cfg->verbose_level;
          if (D.22837 > 2) goto <D.22838>; else goto <D.22839>;
          <D.22838>:
          D.22840 = bb->block_num;
          printf ("\tReverse copyprop in BB%d on ", D.22840);
          mono_print_ins (ins);
          <D.22839>:
          D.22744 = ins->dreg;
          def->dreg = D.22744;
          D.22775 = ins->prev;
          if (D.22775 != 0B) goto <D.22841>; else goto <D.22842>;
          <D.22841>:
          D.22775 = ins->prev;
          D.22778 = ins->next;
          D.22775->next = D.22778;
          <D.22842>:
          D.22778 = ins->next;
          if (D.22778 != 0B) goto <D.22843>; else goto <D.22844>;
          <D.22843>:
          D.22778 = ins->next;
          D.22775 = ins->prev;
          D.22778->prev = D.22775;
          <D.22844>:
          D.22781 = bb->code;
          if (D.22781 == ins) goto <D.22845>; else goto <D.22846>;
          <D.22845>:
          D.22778 = ins->next;
          bb->code = D.22778;
          <D.22846>:
          D.22784 = bb->last_ins;
          if (D.22784 == ins) goto <D.22847>; else goto <D.22848>;
          <D.22847>:
          D.22775 = ins->prev;
          bb->last_ins = D.22775;
          <D.22848>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22758 = ins->sreg3;
          ins->sreg2 = D.22758;
          D.22757 = ins->sreg2;
          ins->sreg1 = D.22757;
          D.22737 = ins->opcode;
          D.22738 = (int) D.22737;
          D.22739 = D.22738 + -313;
          D.22740 = D.22739 * 4;
          spec = &ins_info[D.22740];
          <D.22836>:
          <D.22833>:
          <D.22829>:
          <D.22826>:
          <D.22818>:
          <D.22815>:
          <D.22804>:
        }
        <D.22796>:
        <D.22793>:
        D.22744 = ins->dreg;
        D.22830 = *spec;
        D.22849 = reg_is_softreg_no_fpstack (D.22744, D.22830);
        if (D.22849 != 0) goto <D.22850>; else goto <D.22851>;
        <D.22850>:
        D.22744 = ins->dreg;
        D.22745 = (long unsigned int) D.22744;
        D.22855 = D.22745 / 64;
        D.22856 = used->data[D.22855];
        D.22744 = ins->dreg;
        D.22748 = (unsigned int) D.22744;
        D.22749 = D.22748 & 63;
        D.22857 = D.22856 >> D.22749;
        D.22858 = D.22857 & 1;
        if (D.22858 == 0) goto <D.22859>; else goto <D.22860>;
        <D.22859>:
        D.22744 = ins->dreg;
        D.22861 = (unsigned int) D.22744;
        D.22806 = cfg->vreg_to_inst_len;
        if (D.22861 >= D.22806) goto <D.22854>; else goto <D.22862>;
        <D.22862>:
        D.22808 = cfg->vreg_to_inst;
        D.22744 = ins->dreg;
        D.22745 = (long unsigned int) D.22744;
        D.22863 = D.22745 * 8;
        D.22864 = D.22808 + D.22863;
        D.22865 = *D.22864;
        if (D.22865 == 0B) goto <D.22854>; else goto <D.22866>;
        <D.22866>:
        D.22867 = BIT_FIELD_REF <*bb, 64, 1472>;
        D.22868 = D.22867 & 17592186044416;
        if (D.22868 == 0) goto <D.22869>; else goto <D.22853>;
        <D.22869>:
        D.22744 = ins->dreg;
        D.22861 = (unsigned int) D.22744;
        D.22806 = cfg->vreg_to_inst_len;
        if (D.22861 < D.22806) goto <D.22873>; else goto <D.22871>;
        <D.22873>:
        D.22808 = cfg->vreg_to_inst;
        D.22744 = ins->dreg;
        D.22745 = (long unsigned int) D.22744;
        D.22863 = D.22745 * 8;
        D.22864 = D.22808 + D.22863;
        D.22865 = *D.22864;
        if (D.22865 != 0B) goto <D.22874>; else goto <D.22871>;
        <D.22874>:
        D.22744 = ins->dreg;
        D.22861 = (unsigned int) D.22744;
        D.22806 = cfg->vreg_to_inst_len;
        if (D.22861 < D.22806) goto <D.22876>; else goto <D.22877>;
        <D.22876>:
        D.22808 = cfg->vreg_to_inst;
        D.22744 = ins->dreg;
        D.22745 = (long unsigned int) D.22744;
        D.22863 = D.22745 * 8;
        D.22864 = D.22808 + D.22863;
        iftmp.13 = *D.22864;
        goto <D.22878>;
        <D.22877>:
        iftmp.13 = 0B;
        <D.22878>:
        D.22879 = iftmp.13->flags;
        D.22880 = (int) D.22879;
        D.22881 = D.22880 & 20;
        if (D.22881 != 0) goto <D.22882>; else goto <D.22871>;
        <D.22882>:
        iftmp.12 = 1;
        goto <D.22872>;
        <D.22871>:
        iftmp.12 = 0;
        <D.22872>:
        D.22883 = iftmp.12 != 0;
        D.22884 = (long int) D.22883;
        D.22885 = __builtin_expect (D.22884, 0);
        if (D.22885 == 0) goto <D.22886>; else goto <D.22853>;
        <D.22886>:
        D.22744 = ins->dreg;
        D.22745 = (long unsigned int) D.22744;
        D.22855 = D.22745 / 64;
        D.22887 = defined->data[D.22855];
        D.22744 = ins->dreg;
        D.22748 = (unsigned int) D.22744;
        D.22749 = D.22748 & 63;
        D.22888 = D.22887 >> D.22749;
        D.22889 = D.22888 & 1;
        if (D.22889 != 0) goto <D.22854>; else goto <D.22853>;
        <D.22854>:
        D.22737 = ins->opcode;
        if (D.22737 == 424) goto <D.22852>; else goto <D.22890>;
        <D.22890>:
        D.22737 = ins->opcode;
        if (D.22737 == 426) goto <D.22852>; else goto <D.22891>;
        <D.22891>:
        D.22737 = ins->opcode;
        if (D.22737 == 427) goto <D.22852>; else goto <D.22892>;
        <D.22892>:
        D.22737 = ins->opcode;
        if (D.22737 == 362) goto <D.22852>; else goto <D.22893>;
        <D.22893>:
        D.22737 = ins->opcode;
        if (D.22737 == 363) goto <D.22852>; else goto <D.22894>;
        <D.22894>:
        D.22737 = ins->opcode;
        if (D.22737 == 428) goto <D.22852>; else goto <D.22895>;
        <D.22895>:
        D.22737 = ins->opcode;
        if (D.22737 == 429) goto <D.22852>; else goto <D.22896>;
        <D.22896>:
        D.22737 = ins->opcode;
        if (D.22737 == 365) goto <D.22852>; else goto <D.22897>;
        <D.22897>:
        D.22737 = ins->opcode;
        if (D.22737 == 538) goto <D.22852>; else goto <D.22898>;
        <D.22898>:
        D.22737 = ins->opcode;
        if (D.22737 == 626) goto <D.22852>; else goto <D.22899>;
        <D.22899>:
        D.22737 = ins->opcode;
        if (D.22737 == 625) goto <D.22852>; else goto <D.22900>;
        <D.22900>:
        D.22737 = ins->opcode;
        if (D.22737 == 492) goto <D.22852>; else goto <D.22901>;
        <D.22901>:
        D.22737 = ins->opcode;
        if (D.22737 == 566) goto <D.22852>; else goto <D.22902>;
        <D.22902>:
        D.22737 = ins->opcode;
        if (D.22737 == 817) goto <D.22852>; else goto <D.22903>;
        <D.22903>:
        D.22737 = ins->opcode;
        if (D.22737 == 635) goto <D.22852>; else goto <D.22904>;
        <D.22904>:
        D.22737 = ins->opcode;
        if (D.22737 == 636) goto <D.22852>; else goto <D.22905>;
        <D.22905>:
        D.22737 = ins->opcode;
        if (D.22737 == 637) goto <D.22852>; else goto <D.22906>;
        <D.22906>:
        D.22737 = ins->opcode;
        if (D.22737 == 632) goto <D.22852>; else goto <D.22907>;
        <D.22907>:
        D.22737 = ins->opcode;
        if (D.22737 == 591) goto <D.22852>; else goto <D.22908>;
        <D.22908>:
        D.22737 = ins->opcode;
        if (D.22737 == 580) goto <D.22852>; else goto <D.22909>;
        <D.22909>:
        D.22737 = ins->opcode;
        if (D.22737 == 762) goto <D.22852>; else goto <D.22910>;
        <D.22910>:
        D.22737 = ins->opcode;
        if (D.22737 == 503) goto <D.22852>; else goto <D.22911>;
        <D.22911>:
        D.22737 = ins->opcode;
        if (D.22737 == 590) goto <D.22852>; else goto <D.22912>;
        <D.22912>:
        D.22737 = ins->opcode;
        if (D.22737 == 581) goto <D.22852>; else goto <D.22913>;
        <D.22913>:
        D.22737 = ins->opcode;
        if (D.22737 == 495) goto <D.22852>; else goto <D.22914>;
        <D.22914>:
        D.22737 = ins->opcode;
        if (D.22737 == 314) goto <D.22852>; else goto <D.22915>;
        <D.22915>:
        D.22737 = ins->opcode;
        if (D.22737 == 319) goto <D.22852>; else goto <D.22916>;
        <D.22916>:
        D.22737 = ins->opcode;
        if (D.22737 == 316) goto <D.22852>; else goto <D.22917>;
        <D.22917>:
        D.22737 = ins->opcode;
        if (D.22737 == 765) goto <D.22852>; else goto <D.22918>;
        <D.22918>:
        D.22737 = ins->opcode;
        if (D.22737 == 799) goto <D.22852>; else goto <D.22853>;
        <D.22852>:
        D.22775 = ins->prev;
        if (D.22775 != 0B) goto <D.22919>; else goto <D.22920>;
        <D.22919>:
        D.22775 = ins->prev;
        D.22921 = D.22775->opcode;
        if (D.22921 == 327) goto <D.22922>; else goto <D.22923>;
        <D.22922>:
        {
          struct MonoInst * prev;

          prev = ins->prev;
          prev->opcode = 316;
          prev->dreg = -1;
          prev->sreg3 = -1;
          D.22924 = prev->sreg3;
          prev->sreg2 = D.22924;
          D.22925 = prev->sreg2;
          prev->sreg1 = D.22925;
        }
        <D.22923>:
        <D.22920>:
        D.22775 = ins->prev;
        if (D.22775 != 0B) goto <D.22926>; else goto <D.22927>;
        <D.22926>:
        D.22775 = ins->prev;
        D.22778 = ins->next;
        D.22775->next = D.22778;
        <D.22927>:
        D.22778 = ins->next;
        if (D.22778 != 0B) goto <D.22928>; else goto <D.22929>;
        <D.22928>:
        D.22778 = ins->next;
        D.22775 = ins->prev;
        D.22778->prev = D.22775;
        <D.22929>:
        D.22781 = bb->code;
        if (D.22781 == ins) goto <D.22930>; else goto <D.22931>;
        <D.22930>:
        D.22778 = ins->next;
        bb->code = D.22778;
        <D.22931>:
        D.22784 = bb->last_ins;
        if (D.22784 == ins) goto <D.22932>; else goto <D.22933>;
        <D.22932>:
        D.22775 = ins->prev;
        bb->last_ins = D.22775;
        <D.22933>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.22758 = ins->sreg3;
        ins->sreg2 = D.22758;
        D.22757 = ins->sreg2;
        ins->sreg1 = D.22757;
        D.22737 = ins->opcode;
        D.22738 = (int) D.22737;
        D.22739 = D.22738 + -313;
        D.22740 = D.22739 * 4;
        spec = &ins_info[D.22740];
        <D.22853>:
        <D.22860>:
        D.22830 = *spec;
        if (D.22830 != 32) goto <D.22934>; else goto <D.22935>;
        <D.22934>:
        D.22744 = ins->dreg;
        D.22745 = (long unsigned int) D.22744;
        D.22936 = D.22745 / 64;
        D.22937 = used->data[D.22936];
        D.22744 = ins->dreg;
        D.22748 = (unsigned int) D.22744;
        D.22749 = D.22748 & 63;
        D.22750 = 1 << D.22749;
        D.22751 = ~D.22750;
        D.22938 = D.22937 & D.22751;
        used->data[D.22936] = D.22938;
        <D.22935>:
        <D.22851>:
        D.22830 = *spec;
        if (D.22830 != 32) goto <D.22939>; else goto <D.22940>;
        <D.22939>:
        D.22744 = ins->dreg;
        D.22745 = (long unsigned int) D.22744;
        D.22941 = D.22745 / 64;
        D.22942 = defined->data[D.22941];
        D.22744 = ins->dreg;
        D.22748 = (unsigned int) D.22744;
        D.22749 = D.22748 & 63;
        D.22750 = 1 << D.22749;
        D.22943 = D.22942 | D.22750;
        defined->data[D.22941] = D.22943;
        <D.22940>:
        D.22756 = ins->sreg1;
        sregs[0] = D.22756;
        D.22757 = ins->sreg2;
        sregs[1] = D.22757;
        D.22758 = ins->sreg3;
        sregs[2] = D.22758;
        D.22737 = ins->opcode;
        D.22738 = (int) D.22737;
        D.22739 = D.22738 + -313;
        D.22759 = ins_sreg_counts[D.22739];
        num_sregs = (int) D.22759;
        i = 0;
        goto <D.22294>;
        <D.22293>:
        D.22944 = sregs[i];
        D.22945 = (long unsigned int) D.22944;
        D.22946 = D.22945 / 64;
        D.22947 = used->data[D.22946];
        D.22944 = sregs[i];
        D.22948 = (unsigned int) D.22944;
        D.22949 = D.22948 & 63;
        D.22950 = 1 << D.22949;
        D.22951 = D.22947 | D.22950;
        used->data[D.22946] = D.22951;
        i = i + 1;
        <D.22294>:
        if (i < num_sregs) goto <D.22293>; else goto <D.22295>;
        <D.22295>:
        D.22737 = ins->opcode;
        D.22952 = D.22737 + 65162;
        if (D.22952 <= 13) goto <D.22953>; else goto <D.22954>;
        <D.22953>:
        D.22744 = ins->dreg;
        D.22745 = (long unsigned int) D.22744;
        D.22955 = D.22745 / 64;
        D.22956 = used->data[D.22955];
        D.22744 = ins->dreg;
        D.22748 = (unsigned int) D.22744;
        D.22749 = D.22748 & 63;
        D.22750 = 1 << D.22749;
        D.22957 = D.22956 | D.22750;
        used->data[D.22955] = D.22957;
        <D.22954>:
        D.22737 = ins->opcode;
        D.22960 = D.22737 + 65193;
        if (D.22960 <= 2) goto <D.22958>; else goto <D.22961>;
        <D.22961>:
        D.22737 = ins->opcode;
        D.22962 = D.22737 + 65187;
        if (D.22962 <= 2) goto <D.22958>; else goto <D.22963>;
        <D.22963>:
        D.22737 = ins->opcode;
        D.22964 = D.22737 + 65184;
        if (D.22964 <= 2) goto <D.22958>; else goto <D.22965>;
        <D.22965>:
        D.22737 = ins->opcode;
        D.22966 = D.22737 + 65181;
        if (D.22966 <= 2) goto <D.22958>; else goto <D.22967>;
        <D.22967>:
        D.22737 = ins->opcode;
        D.22968 = D.22737 + 65190;
        if (D.22968 <= 2) goto <D.22958>; else goto <D.22969>;
        <D.22969>:
        D.22737 = ins->opcode;
        D.22970 = D.22737 + 65178;
        if (D.22970 <= 2) goto <D.22958>; else goto <D.22971>;
        <D.22971>:
        D.22737 = ins->opcode;
        if (D.22737 == 444) goto <D.22958>; else goto <D.22959>;
        <D.22958>:
        {
          struct MonoCallInst * call;
          struct GSList * l;

          call = ins;
          D.22972 = call->out_ireg_args;
          if (D.22972 != 0B) goto <D.22973>; else goto <D.22974>;
          <D.22973>:
          l = call->out_ireg_args;
          goto <D.22301>;
          <D.22300>:
          {
            guint32 regpair;
            guint32 reg;

            D.22975 = l->data;
            D.22976 = (long int) D.22975;
            regpair = (guint32) D.22976;
            reg = regpair & 16777215;
            D.22977 = reg / 64;
            D.22978 = (long unsigned int) D.22977;
            D.22978 = (long unsigned int) D.22977;
            D.22979 = used->data[D.22978];
            D.22980 = reg & 63;
            D.22981 = 1 << D.22980;
            D.22982 = D.22979 | D.22981;
            used->data[D.22978] = D.22982;
          }
          l = l->next;
          <D.22301>:
          if (l != 0B) goto <D.22300>; else goto <D.22302>;
          <D.22302>:
          <D.22974>:
          D.22983 = call->out_freg_args;
          if (D.22983 != 0B) goto <D.22984>; else goto <D.22985>;
          <D.22984>:
          l = call->out_freg_args;
          goto <D.22306>;
          <D.22305>:
          {
            guint32 regpair;
            guint32 reg;

            D.22975 = l->data;
            D.22976 = (long int) D.22975;
            regpair = (guint32) D.22976;
            reg = regpair & 16777215;
            D.22986 = reg / 64;
            D.22987 = (long unsigned int) D.22986;
            D.22987 = (long unsigned int) D.22986;
            D.22988 = used->data[D.22987];
            D.22989 = reg & 63;
            D.22990 = 1 << D.22989;
            D.22991 = D.22988 | D.22990;
            used->data[D.22987] = D.22991;
          }
          l = l->next;
          <D.22306>:
          if (l != 0B) goto <D.22305>; else goto <D.22307>;
          <D.22307>:
          <D.22985>:
        }
        <D.22959>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  <D.22286>:
  ins = prev;
  if (ins != 0B) goto <D.22993>; else goto <D.22994>;
  <D.22993>:
  iftmp.14 = ins->prev;
  goto <D.22995>;
  <D.22994>:
  iftmp.14 = 0B;
  <D.22995>:
  prev = iftmp.14;
  <D.22309>:
  if (ins != 0B) goto <D.22308>; else goto <D.22310>;
  <D.22310>:
  bb = bb->next_bb;
  <D.22312>:
  if (bb != 0B) goto <D.22311>; else goto <D.22313>;
  <D.22313>:
}


mono_bitset_mp_new_noinit (struct MonoMemPool * mp, guint32 max_size)
{
  unsigned int D.22998;
  unsigned int size.15;
  struct MonoBitSet * D.23000;
  int size;
  void * mem;

  D.22998 = mono_bitset_alloc_size (max_size, 0);
  size = (int) D.22998;
  size.15 = (unsigned int) size;
  mem = mono_mempool_alloc (mp, size.15);
  D.23000 = mono_bitset_mem_new (mem, max_size, 1);
  return D.23000;
}


reg_is_softreg (int reg, const char spec)
{
  gboolean D.23002;
  int iftmp.16;

  if (spec == 105) goto <D.23004>; else goto <D.23009>;
  <D.23009>:
  if (spec == 102) goto <D.23004>; else goto <D.23005>;
  <D.23004>:
  if (reg > 15) goto <D.23006>; else goto <D.23005>;
  <D.23005>:
  if (spec == 118) goto <D.23006>; else goto <D.23007>;
  <D.23006>:
  iftmp.16 = 1;
  goto <D.23008>;
  <D.23007>:
  iftmp.16 = 0;
  <D.23008>:
  D.23002 = iftmp.16;
  return D.23002;
}


mono_is_simd_accessor (struct MonoInst * ins)
{
  short unsigned int D.23011;
  int D.23012;
  gboolean D.23013;

  D.23011 = ins->opcode;
  D.23012 = (int) D.23011;
  switch (D.23012) <default: <D.22263>>
  <D.22263>:
  D.23013 = 0;
  return D.23013;
}


reg_is_softreg_no_fpstack (int reg, const char spec)
{
  gboolean D.23015;
  int iftmp.17;

  if (spec == 105) goto <D.23017>; else goto <D.23022>;
  <D.23022>:
  if (spec == 102) goto <D.23017>; else goto <D.23018>;
  <D.23017>:
  if (reg > 15) goto <D.23019>; else goto <D.23018>;
  <D.23018>:
  if (spec == 118) goto <D.23019>; else goto <D.23020>;
  <D.23019>:
  iftmp.17 = 1;
  goto <D.23021>;
  <D.23020>:
  iftmp.17 = 0;
  <D.23021>:
  D.23015 = iftmp.17;
  return D.23015;
}


