mono_local_cprop (struct MonoCompile * cfg)
{
  unsigned int D.21966;
  unsigned int D.21967;
  unsigned int D.21968;
  struct MonoMemPool * D.21969;
  int D.21970;
  unsigned int D.21975;
  unsigned int D.21976;
  struct MonoInst * * D.21977;
  sizetype D.21978;
  sizetype D.21979;
  sizetype D.21980;
  struct MonoInst * * D.21981;
  int D.21982;
  int D.21983;
  int D.21984;
  short unsigned int D.21985;
  int D.21986;
  int D.21987;
  signed char D.21988;
  unsigned int sreg.0;
  unsigned int D.21992;
  struct MonoInst * * D.21993;
  sizetype sreg.1;
  sizetype D.21995;
  sizetype D.21996;
  struct MonoInst * * D.21997;
  int D.21998;
  struct MonoInst * D.22001;
  struct MonoInst * D.22004;
  struct MonoInst * D.22007;
  struct MonoInst * D.22010;
  _Bool D.22013;
  long int D.22014;
  long int D.22015;
  int D.22020;
  unsigned int D.22021;
  unsigned int D.22022;
  struct MonoInst * * D.22023;
  short unsigned int D.22024;
  _Bool D.22027;
  _Bool D.22028;
  _Bool D.22029;
  unsigned int sreg.2;
  unsigned int D.22033;
  struct MonoInst * * D.22034;
  struct MonoInst * D.22035;
  short unsigned int D.22040;
  int D.22043;
  unsigned int D.22044;
  unsigned int D.22045;
  struct MonoInst * * D.22046;
  struct MonoInst * D.22047;
  gint32 * D.22049;
  int D.22050;
  gint32 * D.22051;
  int D.22052;
  int iftmp.3;
  unsigned int D.22056;
  unsigned int D.22057;
  struct MonoInst * * D.22059;
  struct MonoInst * * D.22060;
  struct MonoInst * D.22061;
  struct MonoInst * iftmp.4;
  unsigned char D.22067;
  int D.22068;
  int D.22069;
  _Bool D.22071;
  long int D.22072;
  long int D.22073;
  unsigned int D.22076;
  int D.22079;
  sizetype D.22080;
  const char * D.22081;
  char D.22082;
  _Bool D.22085;
  _Bool D.22086;
  _Bool D.22087;
  short unsigned int D.22096;
  _Bool D.22097;
  _Bool D.22098;
  _Bool D.22099;
  short unsigned int D.22101;
  int D.22103;
  unsigned int D.22104;
  unsigned int D.22105;
  struct MonoInst * * D.22106;
  struct MonoInst * D.22107;
  gint32 * D.22109;
  int D.22110;
  int iftmp.5;
  unsigned int D.22114;
  struct MonoInst * * D.22116;
  struct MonoInst * D.22117;
  struct MonoInst * iftmp.6;
  unsigned char D.22123;
  int D.22124;
  int D.22125;
  _Bool D.22127;
  long int D.22128;
  long int D.22129;
  struct MonoInst * D.22136;
  int iftmp.7;
  int D.22150;
  long long int D.22151;
  int D.22152;
  unsigned int D.22159;
  unsigned int D.22160;
  struct MonoInst * * D.22161;
  struct MonoInst * D.22162;
  short unsigned int D.22164;
  unsigned int D.22166;
  unsigned int D.22167;
  struct MonoInst * * D.22168;
  struct MonoInst * D.22169;
  int D.22182;
  int D.22186;
  short unsigned int D.22189;
  int D.22192;
  _Bool D.22196;
  _Bool D.22197;
  _Bool D.22198;
  _Bool D.22200;
  _Bool D.22201;
  _Bool D.22202;
  int D.22203;
  const void * D.22204;
  int D.22209;
  int D.22210;
  int D.22211;
  int D.22212;
  _Bool D.22213;
  _Bool D.22214;
  _Bool D.22215;
  int D.22218;
  int D.22221;
  int D.22222;
  short unsigned int D.22226;
  _Bool D.22227;
  _Bool D.22228;
  _Bool D.22229;
  short unsigned int D.22231;
  short unsigned int D.22232;
  _Bool D.22233;
  _Bool D.22234;
  _Bool D.22235;
  unsigned int D.22239;
  struct MonoInst * D.22241;
  int D.22243;
  int D.22244;
  int D.22251;
  int iftmp.8;
  short unsigned int D.22266;
  _Bool D.22267;
  _Bool D.22268;
  _Bool D.22269;
  int iftmp.9;
  short unsigned int D.22281;
  _Bool D.22282;
  _Bool D.22283;
  _Bool D.22284;
  guint16 iftmp.10;
  unsigned int D.22319;
  guint16 iftmp.11;
  guint16 iftmp.12;
  unsigned int c.13;
  int D.22335;
  int D.22336;
  unsigned int c.14;
  unsigned int D.22343;
  int D.22344;
  struct MonoInst * D.22345;
  int D.22346;
  int D.22347;
  const unsigned char * D.22348;
  int D.22349;
  struct MonoInst * D.22350;
  int D.22351;
  int D.22352;
  int D.22353;
  struct MonoInst * D.22354;
  int D.22355;
  int D.22356;
  unsigned int D.22359;
  int D.22360;
  int D.22361;
  struct MonoInst * D.22362;
  int D.22363;
  int D.22364;
  char D.22366;
  short unsigned int D.22371;
  int D.22374;
  unsigned int D.22375;
  int D.22380;
  int D.22381;
  int iftmp.15;
  unsigned int D.22389;
  struct MonoInst * * D.22391;
  struct MonoInst * D.22392;
  struct MonoInst * iftmp.16;
  unsigned char D.22398;
  int D.22399;
  int D.22400;
  _Bool D.22402;
  long int D.22403;
  long int D.22404;
  gint32 * D.22407;
  short unsigned int D.22410;
  short unsigned int D.22411;
  _Bool D.22412;
  short unsigned int D.22413;
  _Bool D.22414;
  _Bool D.22415;
  short unsigned int D.22417;
  short unsigned int D.22419;
  short unsigned int D.22421;
  short unsigned int D.22423;
  struct MonoBasicBlock * bb;
  struct MonoInst * * defs;
  gint32 * def_index;
  int max;
  void restart = <<< error >>>;

  restart:
  D.21966 = cfg->next_vreg;
  max = (int) D.21966;
  D.21966 = cfg->next_vreg;
  D.21967 = D.21966 + 1;
  D.21968 = D.21967 * 4;
  D.21969 = cfg->mempool;
  defs = mono_mempool_alloc (D.21969, D.21968);
  D.21966 = cfg->next_vreg;
  D.21967 = D.21966 + 1;
  D.21968 = D.21967 * 4;
  D.21969 = cfg->mempool;
  def_index = mono_mempool_alloc (D.21969, D.21968);
  bb = cfg->bb_entry;
  goto <D.21890>;
  <D.21889>:
  {
    struct MonoInst * ins;
    int ins_index;
    int last_call_index;

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

      try
        {
          D.21970 = ins->dreg;
          if (D.21970 != -1) goto <D.21971>; else goto <D.21972>;
          <D.21971>:
          D.21970 = ins->dreg;
          if (D.21970 < max) goto <D.21973>; else goto <D.21974>;
          <D.21973>:
          D.21970 = ins->dreg;
          D.21975 = (unsigned int) D.21970;
          D.21976 = D.21975 * 4;
          D.21977 = defs + D.21976;
          *D.21977 = 0B;
          D.21970 = ins->dreg;
          D.21978 = (sizetype) D.21970;
          D.21979 = D.21978 + 1;
          D.21980 = D.21979 * 4;
          D.21981 = defs + D.21980;
          *D.21981 = 0B;
          <D.21974>:
          <D.21972>:
          D.21982 = ins->sreg1;
          sregs[0] = D.21982;
          D.21983 = ins->sreg2;
          sregs[1] = D.21983;
          D.21984 = ins->sreg3;
          sregs[2] = D.21984;
          D.21985 = ins->opcode;
          D.21986 = (int) D.21985;
          D.21987 = D.21986 + -313;
          D.21988 = ins_sreg_counts[D.21987];
          num_sregs = (int) D.21988;
          i = 0;
          goto <D.21838>;
          <D.21837>:
          {
            int sreg;

            sreg = sregs[i];
            if (sreg < max) goto <D.21989>; else goto <D.21990>;
            <D.21989>:
            sreg.0 = (unsigned int) sreg;
            D.21992 = sreg.0 * 4;
            D.21993 = defs + D.21992;
            *D.21993 = 0B;
            sreg.1 = (sizetype) sreg;
            D.21995 = sreg.1 + 1;
            D.21996 = D.21995 * 4;
            D.21997 = defs + D.21996;
            *D.21997 = 0B;
            <D.21990>:
          }
          i = i + 1;
          <D.21838>:
          if (i < num_sregs) goto <D.21837>; else goto <D.21839>;
          <D.21839>:
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    ins = ins->next;
    <D.21841>:
    if (ins != 0B) goto <D.21840>; else goto <D.21842>;
    <D.21842>:
    ins_index = 0;
    last_call_index = -1;
    ins = bb->code;
    goto <D.21887>;
    <D.21886>:
    {
      const char * spec;
      int regtype;
      int srcindex;
      int sreg;
      int num_sregs;
      int sregs[3];

      try
        {
          D.21985 = ins->opcode;
          D.21986 = (int) D.21985;
          D.21987 = D.21986 + -313;
          D.21998 = D.21987 * 4;
          spec = &ins_info[D.21998];
          D.21985 = ins->opcode;
          if (D.21985 == 316) goto <D.21999>; else goto <D.22000>;
          <D.21999>:
          D.22001 = ins->prev;
          if (D.22001 != 0B) goto <D.22002>; else goto <D.22003>;
          <D.22002>:
          D.22001 = ins->prev;
          D.22004 = ins->next;
          D.22001->next = D.22004;
          <D.22003>:
          D.22004 = ins->next;
          if (D.22004 != 0B) goto <D.22005>; else goto <D.22006>;
          <D.22005>:
          D.22004 = ins->next;
          D.22001 = ins->prev;
          D.22004->prev = D.22001;
          <D.22006>:
          D.22007 = bb->code;
          if (D.22007 == ins) goto <D.22008>; else goto <D.22009>;
          <D.22008>:
          D.22004 = ins->next;
          bb->code = D.22004;
          <D.22009>:
          D.22010 = bb->last_ins;
          if (D.22010 == ins) goto <D.22011>; else goto <D.22012>;
          <D.22011>:
          D.22001 = ins->prev;
          bb->last_ins = D.22001;
          <D.22012>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.21984 = ins->sreg3;
          ins->sreg2 = D.21984;
          D.21983 = ins->sreg2;
          ins->sreg1 = D.21983;
          // predicted unlikely by continue predictor.
          goto <D.21849>;
          <D.22000>:
          D.21985 = ins->opcode;
          D.22013 = D.21985 <= 313;
          D.22014 = (long int) D.22013;
          D.22015 = __builtin_expect (D.22014, 0);
          if (D.22015 != 0) goto <D.22016>; else goto <D.22017>;
          <D.22016>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 105, "ins->opcode > MONO_CEE_LAST");
          <D.22017>:
          D.21985 = ins->opcode;
          if (D.21985 == 314) goto <D.22018>; else goto <D.22019>;
          <D.22018>:
          {
            struct MonoInst * var;

            var = ins->data.op[0].p;
            D.22020 = var->dreg;
            D.22021 = (unsigned int) D.22020;
            D.22022 = D.22021 * 4;
            D.22023 = defs + D.22022;
            *D.22023 = 0B;
          }
          <D.22019>:
          D.21985 = ins->opcode;
          D.22024 = D.21985 + 65162;
          if (D.22024 <= 16) goto <D.22025>; else goto <D.22026>;
          <D.22025>:
          sreg = ins->dreg;
          regtype = 105;
          D.22027 = regtype == 105;
          D.22028 = sreg != -1;
          D.22029 = D.22027 & D.22028;
          if (D.22029 != 0) goto <D.22030>; else goto <D.22031>;
          <D.22030>:
          sreg.2 = (unsigned int) sreg;
          D.22033 = sreg.2 * 4;
          D.22034 = defs + D.22033;
          D.22035 = *D.22034;
          if (D.22035 != 0B) goto <D.22036>; else goto <D.22037>;
          <D.22036>:
          {
            struct MonoInst * def;

            sreg.2 = (unsigned int) sreg;
            D.22033 = sreg.2 * 4;
            D.22034 = defs + D.22033;
            def = *D.22034;
            D.22040 = def->opcode;
            if (D.22040 == 428) goto <D.22041>; else goto <D.22042>;
            <D.22041>:
            D.22043 = def->sreg1;
            D.22044 = (unsigned int) D.22043;
            D.22045 = D.22044 * 4;
            D.22046 = defs + D.22045;
            D.22047 = *D.22046;
            if (D.22047 == 0B) goto <D.22038>; else goto <D.22048>;
            <D.22048>:
            D.22043 = def->sreg1;
            D.22044 = (unsigned int) D.22043;
            D.22045 = D.22044 * 4;
            D.22049 = def_index + D.22045;
            D.22050 = *D.22049;
            sreg.2 = (unsigned int) sreg;
            D.22033 = sreg.2 * 4;
            D.22051 = def_index + D.22033;
            D.22052 = *D.22051;
            if (D.22050 < D.22052) goto <D.22038>; else goto <D.22039>;
            <D.22038>:
            D.22043 = def->sreg1;
            D.22056 = (unsigned int) D.22043;
            D.22057 = cfg->vreg_to_inst_len;
            if (D.22056 < D.22057) goto <D.22058>; else goto <D.22054>;
            <D.22058>:
            D.22059 = cfg->vreg_to_inst;
            D.22043 = def->sreg1;
            D.22044 = (unsigned int) D.22043;
            D.22045 = D.22044 * 4;
            D.22060 = D.22059 + D.22045;
            D.22061 = *D.22060;
            if (D.22061 != 0B) goto <D.22062>; else goto <D.22054>;
            <D.22062>:
            D.22043 = def->sreg1;
            D.22056 = (unsigned int) D.22043;
            D.22057 = cfg->vreg_to_inst_len;
            if (D.22056 < D.22057) goto <D.22064>; else goto <D.22065>;
            <D.22064>:
            D.22059 = cfg->vreg_to_inst;
            D.22043 = def->sreg1;
            D.22044 = (unsigned int) D.22043;
            D.22045 = D.22044 * 4;
            D.22060 = D.22059 + D.22045;
            iftmp.4 = *D.22060;
            goto <D.22066>;
            <D.22065>:
            iftmp.4 = 0B;
            <D.22066>:
            D.22067 = iftmp.4->flags;
            D.22068 = (int) D.22067;
            D.22069 = D.22068 & 20;
            if (D.22069 != 0) goto <D.22070>; else goto <D.22054>;
            <D.22070>:
            iftmp.3 = 1;
            goto <D.22055>;
            <D.22054>:
            iftmp.3 = 0;
            <D.22055>:
            D.22071 = iftmp.3 != 0;
            D.22072 = (long int) D.22071;
            D.22073 = __builtin_expect (D.22072, 0);
            if (D.22073 == 0) goto <D.22074>; else goto <D.22075>;
            <D.22074>:
            {
              int vreg;

              vreg = def->sreg1;
              D.22076 = cfg->verbose_level;
              if (D.22076 > 2) goto <D.22077>; else goto <D.22078>;
              <D.22077>:
              printf ("CCOPY: R%d -> R%d\n", sreg, vreg);
              <D.22078>:
              ins->dreg = vreg;
            }
            <D.22075>:
            <D.22039>:
            <D.22042>:
          }
          <D.22037>:
          <D.22031>:
          <D.22026>:
          D.21982 = ins->sreg1;
          sregs[0] = D.21982;
          D.21983 = ins->sreg2;
          sregs[1] = D.21983;
          D.21984 = ins->sreg3;
          sregs[2] = D.21984;
          D.21985 = ins->opcode;
          D.21986 = (int) D.21985;
          D.21987 = D.21986 + -313;
          D.21988 = ins_sreg_counts[D.21987];
          num_sregs = (int) D.21988;
          srcindex = 0;
          goto <D.21860>;
          <D.21859>:
          {
            struct MonoInst * def;
            int nregs;

            D.21982 = ins->sreg1;
            sregs[0] = D.21982;
            D.21983 = ins->sreg2;
            sregs[1] = D.21983;
            D.21984 = ins->sreg3;
            sregs[2] = D.21984;
            D.21985 = ins->opcode;
            D.21986 = (int) D.21985;
            D.21987 = D.21986 + -313;
            D.21988 = ins_sreg_counts[D.21987];
            nregs = (int) D.21988;
            D.22079 = srcindex + 1;
            D.22080 = (sizetype) D.22079;
            D.22081 = spec + D.22080;
            D.22082 = *D.22081;
            regtype = (int) D.22082;
            sreg = sregs[srcindex];
            D.22085 = regtype == 32;
            D.22086 = sreg == -1;
            D.22087 = D.22085 | D.22086;
            if (D.22087 != 0) goto <D.22083>; else goto <D.22088>;
            <D.22088>:
            sreg.2 = (unsigned int) sreg;
            D.22033 = sreg.2 * 4;
            D.22034 = defs + D.22033;
            D.22035 = *D.22034;
            if (D.22035 == 0B) goto <D.22083>; else goto <D.22084>;
            <D.22083>:
            // predicted unlikely by continue predictor.
            goto <D.21855>;
            <D.22084>:
            sreg.2 = (unsigned int) sreg;
            D.22033 = sreg.2 * 4;
            D.22034 = defs + D.22033;
            def = *D.22034;
            D.22096 = def->opcode;
            D.22097 = D.22096 == 428;
            D.22098 = D.22096 == 430;
            D.22099 = D.22097 | D.22098;
            if (D.22099 != 0) goto <D.22095>; else goto <D.22100>;
            <D.22100>:
            D.22101 = def->opcode;
            if (D.22101 == 431) goto <D.22095>; else goto <D.22102>;
            <D.22102>:
            D.22101 = def->opcode;
            if (D.22101 == 962) goto <D.22095>; else goto <D.22094>;
            <D.22095>:
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22106 = defs + D.22105;
            D.22107 = *D.22106;
            if (D.22107 == 0B) goto <D.22093>; else goto <D.22108>;
            <D.22108>:
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22109 = def_index + D.22105;
            D.22110 = *D.22109;
            sreg.2 = (unsigned int) sreg;
            D.22033 = sreg.2 * 4;
            D.22051 = def_index + D.22033;
            D.22052 = *D.22051;
            if (D.22110 < D.22052) goto <D.22093>; else goto <D.22094>;
            <D.22093>:
            D.22103 = def->sreg1;
            D.22114 = (unsigned int) D.22103;
            D.22057 = cfg->vreg_to_inst_len;
            if (D.22114 < D.22057) goto <D.22115>; else goto <D.22112>;
            <D.22115>:
            D.22059 = cfg->vreg_to_inst;
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22116 = D.22059 + D.22105;
            D.22117 = *D.22116;
            if (D.22117 != 0B) goto <D.22118>; else goto <D.22112>;
            <D.22118>:
            D.22103 = def->sreg1;
            D.22114 = (unsigned int) D.22103;
            D.22057 = cfg->vreg_to_inst_len;
            if (D.22114 < D.22057) goto <D.22120>; else goto <D.22121>;
            <D.22120>:
            D.22059 = cfg->vreg_to_inst;
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22116 = D.22059 + D.22105;
            iftmp.6 = *D.22116;
            goto <D.22122>;
            <D.22121>:
            iftmp.6 = 0B;
            <D.22122>:
            D.22123 = iftmp.6->flags;
            D.22124 = (int) D.22123;
            D.22125 = D.22124 & 20;
            if (D.22125 != 0) goto <D.22126>; else goto <D.22112>;
            <D.22126>:
            iftmp.5 = 1;
            goto <D.22113>;
            <D.22112>:
            iftmp.5 = 0;
            <D.22113>:
            D.22127 = iftmp.5 != 0;
            D.22128 = (long int) D.22127;
            D.22129 = __builtin_expect (D.22128, 0);
            if (D.22129 == 0) goto <D.22130>; else goto <D.22131>;
            <D.22130>:
            D.22103 = def->sreg1;
            D.22114 = (unsigned int) D.22103;
            D.22057 = cfg->vreg_to_inst_len;
            if (D.22114 < D.22057) goto <D.22132>; else goto <D.22091>;
            <D.22132>:
            D.22059 = cfg->vreg_to_inst;
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22116 = D.22059 + D.22105;
            D.22117 = *D.22116;
            if (D.22117 != 0B) goto <D.22092>; else goto <D.22091>;
            <D.22091>:
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22106 = defs + D.22105;
            D.22107 = *D.22106;
            if (D.22107 == 0B) goto <D.22092>; else goto <D.22133>;
            <D.22133>:
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22109 = def_index + D.22105;
            D.22110 = *D.22109;
            if (D.22110 >= last_call_index) goto <D.22092>; else goto <D.22134>;
            <D.22134>:
            D.22101 = def->opcode;
            if (D.22101 == 431) goto <D.22092>; else goto <D.22090>;
            <D.22092>:
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22106 = defs + D.22105;
            D.22107 = *D.22106;
            if (D.22107 == 0B) goto <D.22089>; else goto <D.22135>;
            <D.22135>:
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22106 = defs + D.22105;
            D.22107 = *D.22106;
            D.22136 = D.22107->next;
            if (D.22136 != def) goto <D.22089>; else goto <D.22090>;
            <D.22089>:
            D.22101 = def->opcode;
            if (D.22101 != 430) goto <D.22137>; else goto <D.22138>;
            <D.22137>:
            D.22101 = def->opcode;
            if (D.22101 != 430) goto <D.22139>; else goto <D.22140>;
            <D.22139>:
            {
              int vreg;

              vreg = def->sreg1;
              D.22076 = cfg->verbose_level;
              if (D.22076 > 2) goto <D.22141>; else goto <D.22142>;
              <D.22141>:
              printf ("CCOPY/2: R%d -> R%d\n", sreg, vreg);
              <D.22142>:
              sregs[srcindex] = vreg;
              mono_inst_set_src_registers (ins, &sregs);
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.21855>;
            }
            <D.22140>:
            <D.22138>:
            <D.22090>:
            <D.22131>:
            <D.22094>:
            D.22101 = def->opcode;
            if (D.22101 == 362) goto <D.22148>; else goto <D.22144>;
            <D.22148>:
            if (srcindex == 0) goto <D.22149>; else goto <D.22145>;
            <D.22149>:
            D.21983 = ins->sreg2;
            if (D.21983 == -1) goto <D.22146>; else goto <D.22145>;
            <D.22145>:
            D.22150 = def->data.op[0].const_val;
            D.22151 = (long long int) D.22150;
            D.22152 = mono_arch_is_inst_imm (D.22151);
            if (D.22152 != 0) goto <D.22146>; else goto <D.22144>;
            <D.22146>:
            iftmp.7 = 1;
            goto <D.22147>;
            <D.22144>:
            iftmp.7 = 0;
            <D.22147>:
            if (iftmp.7 != 0) goto <D.22153>; else goto <D.22154>;
            <D.22153>:
            {
              guint32 opcode2;

              if (srcindex == 1) goto <D.22157>; else goto <D.22155>;
              <D.22157>:
              D.21982 = ins->sreg1;
              if (D.21982 != -1) goto <D.22158>; else goto <D.22155>;
              <D.22158>:
              D.21982 = ins->sreg1;
              D.22159 = (unsigned int) D.21982;
              D.22160 = D.22159 * 4;
              D.22161 = defs + D.22160;
              D.22162 = *D.22161;
              if (D.22162 != 0B) goto <D.22163>; else goto <D.22155>;
              <D.22163>:
              D.21982 = ins->sreg1;
              D.22159 = (unsigned int) D.21982;
              D.22160 = D.22159 * 4;
              D.22161 = defs + D.22160;
              D.22162 = *D.22161;
              D.22164 = D.22162->opcode;
              if (D.22164 == 362) goto <D.22165>; else goto <D.22155>;
              <D.22165>:
              D.21983 = ins->sreg2;
              D.22166 = (unsigned int) D.21983;
              D.22167 = D.22166 * 4;
              D.22168 = defs + D.22167;
              D.22169 = *D.22168;
              if (D.22169 != 0B) goto <D.22170>; else goto <D.22155>;
              <D.22170>:
              D.21983 = ins->sreg2;
              D.22166 = (unsigned int) D.21983;
              D.22167 = D.22166 * 4;
              D.22168 = defs + D.22167;
              D.22169 = *D.22168;
              D.21982 = ins->sreg1;
              D.22159 = (unsigned int) D.21982;
              D.22160 = D.22159 * 4;
              D.22161 = defs + D.22160;
              D.22162 = *D.22161;
              mono_constant_fold_ins (cfg, ins, D.22162, D.22169, 1);
              goto <D.22156>;
              <D.22155>:
              if (srcindex == 0) goto <D.22173>; else goto <D.22171>;
              <D.22173>:
              D.21983 = ins->sreg2;
              if (D.21983 != -1) goto <D.22174>; else goto <D.22171>;
              <D.22174>:
              D.21983 = ins->sreg2;
              D.22166 = (unsigned int) D.21983;
              D.22167 = D.22166 * 4;
              D.22168 = defs + D.22167;
              D.22169 = *D.22168;
              if (D.22169 != 0B) goto <D.22175>; else goto <D.22171>;
              <D.22175>:
              {
                int opcode;

                D.21985 = ins->opcode;
                opcode = (int) D.21985;
                D.21983 = ins->sreg2;
                D.22166 = (unsigned int) D.21983;
                D.22167 = D.22166 * 4;
                D.22168 = defs + D.22167;
                D.22169 = *D.22168;
                D.21982 = ins->sreg1;
                D.22159 = (unsigned int) D.21982;
                D.22160 = D.22159 * 4;
                D.22161 = defs + D.22160;
                D.22162 = *D.22161;
                mono_constant_fold_ins (cfg, ins, D.22162, D.22169, 1);
                D.21985 = ins->opcode;
                D.21986 = (int) D.21985;
                if (D.21986 != opcode) goto <D.22176>; else goto <D.22177>;
                <D.22176>:
                srcindex = -1;
                // predicted unlikely by continue predictor.
                goto <D.21855>;
                <D.22177>:
              }
              goto <D.22172>;
              <D.22171>:
              if (srcindex == 0) goto <D.22178>; else goto <D.22179>;
              <D.22178>:
              D.21983 = ins->sreg2;
              if (D.21983 == -1) goto <D.22180>; else goto <D.22181>;
              <D.22180>:
              D.21982 = ins->sreg1;
              D.22159 = (unsigned int) D.21982;
              D.22160 = D.22159 * 4;
              D.22161 = defs + D.22160;
              D.22162 = *D.22161;
              mono_constant_fold_ins (cfg, ins, D.22162, 0B, 1);
              <D.22181>:
              <D.22179>:
              <D.22172>:
              <D.22156>:
              D.21985 = ins->opcode;
              D.21986 = (int) D.21985;
              D.22182 = mono_op_to_op_imm (D.21986);
              opcode2 = (guint32) D.22182;
              if (opcode2 != 4294967295) goto <D.22185>; else goto <D.22183>;
              <D.22185>:
              D.22150 = def->data.op[0].const_val;
              D.22151 = (long long int) D.22150;
              D.22186 = mono_arch_is_inst_imm (D.22151);
              if (D.22186 != 0) goto <D.22187>; else goto <D.22183>;
              <D.22187>:
              if (srcindex == 1) goto <D.22184>; else goto <D.22188>;
              <D.22188>:
              D.21983 = ins->sreg2;
              if (D.21983 == -1) goto <D.22184>; else goto <D.22183>;
              <D.22184>:
              D.22189 = (short unsigned int) opcode2;
              ins->opcode = D.22189;
              D.22101 = def->opcode;
              if (D.22101 == 363) goto <D.22190>; else goto <D.22191>;
              <D.22190>:
              D.22150 = def->data.op[0].const_val;
              ins->data.op[0].const_val = D.22150;
              D.22192 = def->data.op[1].const_val;
              ins->data.op[1].const_val = D.22192;
              goto <D.22193>;
              <D.22191>:
              D.22150 = def->data.op[0].const_val;
              ins->data.op[1].const_val = D.22150;
              <D.22193>:
              sregs[srcindex] = -1;
              mono_inst_set_src_registers (ins, &sregs);
              D.22196 = opcode2 == 343;
              D.22197 = opcode2 == 346;
              D.22198 = D.22196 | D.22197;
              if (D.22198 != 0) goto <D.22194>; else goto <D.22199>;
              <D.22199>:
              D.22200 = opcode2 == 352;
              D.22201 = opcode2 == 349;
              D.22202 = D.22200 | D.22201;
              if (D.22202 != 0) goto <D.22194>; else goto <D.22195>;
              <D.22194>:
              D.22203 = ins->data.op[1].const_val;
              D.22204 = (const void *) D.22203;
              MEM[(struct MonoCallInst *)ins].fptr = D.22204;
              <D.22195>:
              srcindex = -1;
              // predicted unlikely by continue predictor.
              goto <D.21855>;
              <D.22183>:
              D.21985 = ins->opcode;
              if (D.21985 == 1037) goto <D.22205>; else goto <D.22206>;
              <D.22205>:
              if (srcindex == 1) goto <D.22207>; else goto <D.22208>;
              <D.22207>:
              ins->opcode = 433;
              D.22203 = ins->data.op[1].const_val;
              D.22150 = def->data.op[0].const_val;
              D.22209 = ins->backend.shift_amount;
              D.22210 = D.22150 << D.22209;
              D.22211 = D.22203 + D.22210;
              ins->data.op[1].const_val = D.22211;
              ins->sreg2 = -1;
              <D.22208>:
              <D.22206>:
              D.21985 = ins->opcode;
              D.21986 = (int) D.21985;
              D.22212 = mono_load_membase_to_load_mem (D.21986);
              opcode2 = (guint32) D.22212;
              D.22213 = srcindex == 0;
              D.22214 = opcode2 != 4294967295;
              D.22215 = D.22213 & D.22214;
              if (D.22215 != 0) goto <D.22216>; else goto <D.22217>;
              <D.22216>:
              D.22150 = def->data.op[0].const_val;
              D.22151 = (long long int) D.22150;
              D.22218 = mono_arch_is_inst_imm (D.22151);
              if (D.22218 != 0) goto <D.22219>; else goto <D.22220>;
              <D.22219>:
              D.22189 = (short unsigned int) opcode2;
              ins->opcode = D.22189;
              D.22150 = def->data.op[0].const_val;
              D.22221 = ins->data.op[0].const_val;
              D.22222 = D.22150 + D.22221;
              ins->data.op[1].const_val = D.22222;
              ins->sreg1 = -1;
              <D.22220>:
              <D.22217>:
            }
            goto <D.22223>;
            <D.22154>:
            D.22226 = def->opcode;
            D.22227 = D.22226 == 433;
            D.22228 = D.22226 == 542;
            D.22229 = D.22227 | D.22228;
            if (D.22229 != 0) goto <D.22230>; else goto <D.22224>;
            <D.22230>:
            D.22231 = ins->opcode;
            D.22232 = D.22231 + 65145;
            D.22233 = D.22232 <= 12;
            D.22234 = D.22231 == 1032;
            D.22235 = D.22233 | D.22234;
            if (D.22235 != 0) goto <D.22236>; else goto <D.22224>;
            <D.22236>:
            D.22103 = def->sreg1;
            D.22114 = (unsigned int) D.22103;
            D.22239 = cfg->frame_reg;
            if (D.22114 == D.22239) goto <D.22237>; else goto <D.22240>;
            <D.22240>:
            D.22241 = def->next;
            if (D.22241 == ins) goto <D.22242>; else goto <D.22238>;
            <D.22242>:
            D.22243 = def->dreg;
            D.22103 = def->sreg1;
            if (D.22243 != D.22103) goto <D.22237>; else goto <D.22238>;
            <D.22237>:
            D.22103 = def->sreg1;
            ins->sreg1 = D.22103;
            D.22221 = ins->data.op[0].const_val;
            D.22192 = def->data.op[1].const_val;
            D.22244 = D.22221 + D.22192;
            ins->data.op[0].const_val = D.22244;
            <D.22238>:
            goto <D.22225>;
            <D.22224>:
            D.21985 = ins->opcode;
            if (D.21985 == 630) goto <D.22247>; else goto <D.22245>;
            <D.22247>:
            D.22101 = def->opcode;
            if (D.22101 == 629) goto <D.22248>; else goto <D.22245>;
            <D.22248>:
            D.22241 = def->next;
            if (D.22241 == ins) goto <D.22249>; else goto <D.22245>;
            <D.22249>:
            D.22243 = def->dreg;
            D.22103 = def->sreg1;
            if (D.22243 != D.22103) goto <D.22250>; else goto <D.22245>;
            <D.22250>:
            D.22103 = def->sreg1;
            ins->sreg1 = D.22103;
            D.22203 = ins->data.op[1].const_val;
            D.22192 = def->data.op[1].const_val;
            D.22251 = D.22203 - D.22192;
            ins->data.op[1].const_val = D.22251;
            goto <D.22246>;
            <D.22245>:
            D.21985 = ins->opcode;
            if (D.21985 == 629) goto <D.22254>; else goto <D.22252>;
            <D.22254>:
            D.22101 = def->opcode;
            if (D.22101 == 630) goto <D.22255>; else goto <D.22252>;
            <D.22255>:
            D.22241 = def->next;
            if (D.22241 == ins) goto <D.22256>; else goto <D.22252>;
            <D.22256>:
            D.22243 = def->dreg;
            D.22103 = def->sreg1;
            if (D.22243 != D.22103) goto <D.22257>; else goto <D.22252>;
            <D.22257>:
            D.22103 = def->sreg1;
            ins->sreg1 = D.22103;
            D.22203 = ins->data.op[1].const_val;
            D.22192 = def->data.op[1].const_val;
            D.22251 = D.22203 - D.22192;
            ins->data.op[1].const_val = D.22251;
            goto <D.22253>;
            <D.22252>:
            D.21985 = ins->opcode;
            if (D.21985 == 375) goto <D.22261>; else goto <D.22258>;
            <D.22261>:
            D.22266 = def->opcode;
            D.22267 = D.22266 == 595;
            D.22268 = D.22266 == 584;
            D.22269 = D.22267 | D.22268;
            if (D.22269 != 0) goto <D.22263>; else goto <D.22270>;
            <D.22270>:
            D.22101 = def->opcode;
            if (D.22101 == 766) goto <D.22263>; else goto <D.22264>;
            <D.22263>:
            iftmp.8 = 1;
            goto <D.22265>;
            <D.22264>:
            iftmp.8 = 0;
            <D.22265>:
            if (iftmp.8 != 0) goto <D.22271>; else goto <D.22258>;
            <D.22271>:
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22106 = defs + D.22105;
            D.22107 = *D.22106;
            if (D.22107 == 0B) goto <D.22259>; else goto <D.22272>;
            <D.22272>:
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22109 = def_index + D.22105;
            D.22110 = *D.22109;
            sreg.2 = (unsigned int) sreg;
            D.22033 = sreg.2 * 4;
            D.22051 = def_index + D.22033;
            D.22052 = *D.22051;
            if (D.22110 < D.22052) goto <D.22259>; else goto <D.22258>;
            <D.22259>:
            D.22103 = def->sreg1;
            ins->sreg1 = D.22103;
            goto <D.22260>;
            <D.22258>:
            D.21985 = ins->opcode;
            if (D.21985 == 376) goto <D.22275>; else goto <D.22276>;
            <D.22275>:
            D.22281 = def->opcode;
            D.22282 = D.22281 == 594;
            D.22283 = D.22281 == 585;
            D.22284 = D.22282 | D.22283;
            if (D.22284 != 0) goto <D.22278>; else goto <D.22285>;
            <D.22285>:
            D.22101 = def->opcode;
            if (D.22101 == 766) goto <D.22278>; else goto <D.22279>;
            <D.22278>:
            iftmp.9 = 1;
            goto <D.22280>;
            <D.22279>:
            iftmp.9 = 0;
            <D.22280>:
            if (iftmp.9 != 0) goto <D.22286>; else goto <D.22287>;
            <D.22286>:
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22106 = defs + D.22105;
            D.22107 = *D.22106;
            if (D.22107 == 0B) goto <D.22273>; else goto <D.22288>;
            <D.22288>:
            D.22103 = def->sreg1;
            D.22104 = (unsigned int) D.22103;
            D.22105 = D.22104 * 4;
            D.22109 = def_index + D.22105;
            D.22110 = *D.22109;
            sreg.2 = (unsigned int) sreg;
            D.22033 = sreg.2 * 4;
            D.22051 = def_index + D.22033;
            D.22052 = *D.22051;
            if (D.22110 < D.22052) goto <D.22273>; else goto <D.22274>;
            <D.22273>:
            D.22103 = def->sreg1;
            ins->sreg1 = D.22103;
            <D.22274>:
            <D.22287>:
            <D.22276>:
            <D.22260>:
            <D.22253>:
            <D.22246>:
            <D.22225>:
            <D.22223>:
          }
          <D.21855>:
          srcindex = srcindex + 1;
          <D.21860>:
          if (srcindex < num_sregs) goto <D.21859>; else goto <D.21861>;
          <D.21861>:
          D.21985 = ins->opcode;
          D.21986 = (int) D.21985;
          switch (D.21986) <default: <D.22365>, case 428: <D.21862>, case 433: <D.21865>, case 434: <D.21867>, case 435: <D.21869>, case 629: <D.21866>, case 630: <D.21868>, case 631: <D.21870>, case 632: <D.21876>, case 633: <D.21873>, case 635: <D.21872>, case 962: <D.21863>>
          <D.21862>:
          <D.21863>:
          D.21970 = ins->dreg;
          D.21982 = ins->sreg1;
          if (D.21970 == D.21982) goto <D.22289>; else goto <D.22290>;
          <D.22289>:
          D.22001 = ins->prev;
          if (D.22001 != 0B) goto <D.22291>; else goto <D.22292>;
          <D.22291>:
          D.22001 = ins->prev;
          D.22004 = ins->next;
          D.22001->next = D.22004;
          <D.22292>:
          D.22004 = ins->next;
          if (D.22004 != 0B) goto <D.22293>; else goto <D.22294>;
          <D.22293>:
          D.22004 = ins->next;
          D.22001 = ins->prev;
          D.22004->prev = D.22001;
          <D.22294>:
          D.22007 = bb->code;
          if (D.22007 == ins) goto <D.22295>; else goto <D.22296>;
          <D.22295>:
          D.22004 = ins->next;
          bb->code = D.22004;
          <D.22296>:
          D.22010 = bb->last_ins;
          if (D.22010 == ins) goto <D.22297>; else goto <D.22298>;
          <D.22297>:
          D.22001 = ins->prev;
          bb->last_ins = D.22001;
          <D.22298>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.21984 = ins->sreg3;
          ins->sreg2 = D.21984;
          D.21983 = ins->sreg2;
          ins->sreg1 = D.21983;
          D.21985 = ins->opcode;
          D.21986 = (int) D.21985;
          D.21987 = D.21986 + -313;
          D.21998 = D.21987 * 4;
          spec = &ins_info[D.21998];
          <D.22290>:
          goto <D.21864>;
          <D.21865>:
          <D.21866>:
          <D.21867>:
          <D.21868>:
          D.22203 = ins->data.op[1].const_val;
          if (D.22203 == 0) goto <D.22299>; else goto <D.22300>;
          <D.22299>:
          ins->opcode = 428;
          D.21985 = ins->opcode;
          D.21986 = (int) D.21985;
          D.21987 = D.21986 + -313;
          D.21998 = D.21987 * 4;
          spec = &ins_info[D.21998];
          <D.22300>:
          goto <D.21864>;
          <D.21869>:
          <D.21870>:
          D.22203 = ins->data.op[1].const_val;
          if (D.22203 == 0) goto <D.22301>; else goto <D.22302>;
          <D.22301>:
          D.21985 = ins->opcode;
          if (D.21985 == 544) goto <D.22304>; else goto <D.22305>;
          <D.22304>:
          iftmp.10 = 363;
          goto <D.22306>;
          <D.22305>:
          iftmp.10 = 362;
          <D.22306>:
          ins->opcode = iftmp.10;
          ins->data.op[0].const_val = 0;
          ins->sreg1 = -1;
          goto <D.22307>;
          <D.22302>:
          D.22203 = ins->data.op[1].const_val;
          if (D.22203 == 1) goto <D.22308>; else goto <D.22309>;
          <D.22308>:
          ins->opcode = 428;
          goto <D.22310>;
          <D.22309>:
          D.21985 = ins->opcode;
          if (D.21985 == 631) goto <D.22313>; else goto <D.22311>;
          <D.22313>:
          D.22203 = ins->data.op[1].const_val;
          if (D.22203 == -1) goto <D.22314>; else goto <D.22311>;
          <D.22314>:
          ins->opcode = 582;
          goto <D.22312>;
          <D.22311>:
          D.21985 = ins->opcode;
          if (D.21985 == 544) goto <D.22317>; else goto <D.22315>;
          <D.22317>:
          D.22203 = ins->data.op[1].const_val;
          if (D.22203 == -1) goto <D.22318>; else goto <D.22315>;
          <D.22318>:
          ins->opcode = 496;
          goto <D.22316>;
          <D.22315>:
          {
            int power2;

            D.22203 = ins->data.op[1].const_val;
            D.22319 = (unsigned int) D.22203;
            power2 = mono_is_power_of_two (D.22319);
            if (power2 >= 0) goto <D.22320>; else goto <D.22321>;
            <D.22320>:
            D.21985 = ins->opcode;
            if (D.21985 != 435) goto <D.22323>; else goto <D.22324>;
            <D.22323>:
            D.21985 = ins->opcode;
            if (D.21985 == 544) goto <D.22326>; else goto <D.22327>;
            <D.22326>:
            iftmp.12 = 548;
            goto <D.22328>;
            <D.22327>:
            iftmp.12 = 639;
            <D.22328>:
            iftmp.11 = iftmp.12;
            goto <D.22329>;
            <D.22324>:
            iftmp.11 = 443;
            <D.22329>:
            ins->opcode = iftmp.11;
            ins->data.op[1].const_val = power2;
            <D.22321>:
          }
          <D.22316>:
          <D.22312>:
          <D.22310>:
          <D.22307>:
          D.21985 = ins->opcode;
          D.21986 = (int) D.21985;
          D.21987 = D.21986 + -313;
          D.21998 = D.21987 * 4;
          spec = &ins_info[D.21998];
          goto <D.21864>;
          <D.21872>:
          <D.21873>:
          {
            int c;
            int power2;

            c = ins->data.op[1].const_val;
            c.13 = (unsigned int) c;
            power2 = mono_is_power_of_two (c.13);
            if (power2 >= 0) goto <D.22331>; else goto <D.22332>;
            <D.22331>:
            D.21985 = ins->opcode;
            if (D.21985 == 635) goto <D.22333>; else goto <D.22334>;
            <D.22333>:
            ins->opcode = 636;
            ins->sreg2 = -1;
            D.22335 = 1 << power2;
            D.22336 = D.22335 + -1;
            ins->data.op[1].const_val = D.22336;
            goto <D.22337>;
            <D.22334>:
            D.21985 = ins->opcode;
            if (D.21985 == 633) goto <D.22338>; else goto <D.22339>;
            <D.22338>:
            ins->opcode = 641;
            ins->sreg2 = -1;
            ins->data.op[1].const_val = power2;
            <D.22339>:
            <D.22337>:
            <D.22332>:
            D.21985 = ins->opcode;
            D.21986 = (int) D.21985;
            D.21987 = D.21986 + -313;
            D.21998 = D.21987 * 4;
            spec = &ins_info[D.21998];
            goto <D.21864>;
          }
          <D.21876>:
          {
            int c;
            int power2;
            struct MonoInst * tmp1;
            struct MonoInst * tmp2;
            struct MonoInst * tmp3;
            struct MonoInst * tmp4;

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

              D.22343 = mono_alloc_ireg (cfg);
              r1 = (int) D.22343;
              D.21969 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.21969, 48);
              tmp1->data.op[1].const_val = 0;
              D.22344 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.22344;
              tmp1->prev = 0B;
              D.22345 = tmp1->prev;
              tmp1->next = D.22345;
              tmp1->opcode = 641;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.22346 = tmp1->sreg3;
              tmp1->sreg2 = D.22346;
              D.22347 = tmp1->sreg2;
              tmp1->sreg1 = D.22347;
              D.22348 = cfg->ip;
              tmp1->cil_code = D.22348;
              tmp1->dreg = r1;
              D.21982 = ins->sreg1;
              tmp1->sreg1 = D.21982;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.21969 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.21969, 48);
              tmp2->data.op[1].const_val = 0;
              D.22349 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.22349;
              tmp2->prev = 0B;
              D.22350 = tmp2->prev;
              tmp2->next = D.22350;
              tmp2->opcode = 569;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.22351 = tmp2->sreg3;
              tmp2->sreg2 = D.22351;
              D.22352 = tmp2->sreg2;
              tmp2->sreg1 = D.22352;
              D.22348 = cfg->ip;
              tmp2->cil_code = D.22348;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.21982 = ins->sreg1;
              tmp2->sreg2 = D.21982;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.21969 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.21969, 48);
              tmp3->data.op[1].const_val = 0;
              D.22353 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.22353;
              tmp3->prev = 0B;
              D.22354 = tmp3->prev;
              tmp3->next = D.22354;
              tmp3->opcode = 640;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.22355 = tmp3->sreg3;
              tmp3->sreg2 = D.22355;
              D.22356 = tmp3->sreg2;
              tmp3->sreg1 = D.22356;
              D.22348 = cfg->ip;
              tmp3->cil_code = D.22348;
              D.21970 = ins->dreg;
              tmp3->dreg = D.21970;
              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.21984 = ins->sreg3;
              ins->sreg2 = D.21984;
              D.21983 = ins->sreg2;
              ins->sreg1 = D.21983;
              goto restart;
            }
            <D.22342>:
            if (power2 > 0) goto <D.22357>; else goto <D.22358>;
            <D.22357>:
            {
              int r1;

              D.22359 = mono_alloc_ireg (cfg);
              r1 = (int) D.22359;
              D.21969 = cfg->mempool;
              tmp1 = mono_mempool_alloc (D.21969, 48);
              tmp1->data.op[1].const_val = 0;
              D.22344 = tmp1->data.op[1].const_val;
              tmp1->data.op[0].const_val = D.22344;
              tmp1->prev = 0B;
              D.22345 = tmp1->prev;
              tmp1->next = D.22345;
              tmp1->opcode = 640;
              tmp1->flags = 0;
              tmp1->type = 0;
              tmp1->dreg = -1;
              tmp1->sreg3 = -1;
              D.22346 = tmp1->sreg3;
              tmp1->sreg2 = D.22346;
              D.22347 = tmp1->sreg2;
              tmp1->sreg1 = D.22347;
              D.22348 = cfg->ip;
              tmp1->cil_code = D.22348;
              tmp1->dreg = r1;
              D.21982 = ins->sreg1;
              tmp1->sreg1 = D.21982;
              tmp1->data.op[1].const_val = 31;
              mono_bblock_insert_after_ins (bb, ins, tmp1);
              D.21969 = cfg->mempool;
              tmp2 = mono_mempool_alloc (D.21969, 48);
              tmp2->data.op[1].const_val = 0;
              D.22349 = tmp2->data.op[1].const_val;
              tmp2->data.op[0].const_val = D.22349;
              tmp2->prev = 0B;
              D.22350 = tmp2->prev;
              tmp2->next = D.22350;
              tmp2->opcode = 641;
              tmp2->flags = 0;
              tmp2->type = 0;
              tmp2->dreg = -1;
              tmp2->sreg3 = -1;
              D.22351 = tmp2->sreg3;
              tmp2->sreg2 = D.22351;
              D.22352 = tmp2->sreg2;
              tmp2->sreg1 = D.22352;
              D.22348 = cfg->ip;
              tmp2->cil_code = D.22348;
              tmp2->dreg = r1;
              tmp2->sreg1 = r1;
              D.22360 = 32 - power2;
              tmp2->data.op[1].const_val = D.22360;
              mono_bblock_insert_after_ins (bb, tmp1, tmp2);
              D.21969 = cfg->mempool;
              tmp3 = mono_mempool_alloc (D.21969, 48);
              tmp3->data.op[1].const_val = 0;
              D.22353 = tmp3->data.op[1].const_val;
              tmp3->data.op[0].const_val = D.22353;
              tmp3->prev = 0B;
              D.22354 = tmp3->prev;
              tmp3->next = D.22354;
              tmp3->opcode = 569;
              tmp3->flags = 0;
              tmp3->type = 0;
              tmp3->dreg = -1;
              tmp3->sreg3 = -1;
              D.22355 = tmp3->sreg3;
              tmp3->sreg2 = D.22355;
              D.22356 = tmp3->sreg2;
              tmp3->sreg1 = D.22356;
              D.22348 = cfg->ip;
              tmp3->cil_code = D.22348;
              tmp3->dreg = r1;
              tmp3->sreg1 = r1;
              D.21982 = ins->sreg1;
              tmp3->sreg2 = D.21982;
              mono_bblock_insert_after_ins (bb, tmp2, tmp3);
              D.21969 = cfg->mempool;
              tmp4 = mono_mempool_alloc (D.21969, 48);
              tmp4->data.op[1].const_val = 0;
              D.22361 = tmp4->data.op[1].const_val;
              tmp4->data.op[0].const_val = D.22361;
              tmp4->prev = 0B;
              D.22362 = tmp4->prev;
              tmp4->next = D.22362;
              tmp4->opcode = 640;
              tmp4->flags = 0;
              tmp4->type = 0;
              tmp4->dreg = -1;
              tmp4->sreg3 = -1;
              D.22363 = tmp4->sreg3;
              tmp4->sreg2 = D.22363;
              D.22364 = tmp4->sreg2;
              tmp4->sreg1 = D.22364;
              D.22348 = cfg->ip;
              tmp4->cil_code = D.22348;
              D.21970 = ins->dreg;
              tmp4->dreg = D.21970;
              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.21984 = ins->sreg3;
              ins->sreg2 = D.21984;
              D.21983 = ins->sreg2;
              ins->sreg1 = D.21983;
              goto restart;
            }
            <D.22358>:
            goto <D.21864>;
          }
          <D.22365>:
          <D.21864>:
          D.22366 = *spec;
          if (D.22366 != 32) goto <D.22367>; else goto <D.22368>;
          <D.22367>:
          {
            struct MonoInst * def;

            D.21970 = ins->dreg;
            D.21975 = (unsigned int) D.21970;
            D.21976 = D.21975 * 4;
            D.21977 = defs + D.21976;
            def = *D.21977;
            if (def != 0B) goto <D.22369>; else goto <D.22370>;
            <D.22369>:
            D.22371 = def->opcode;
            if (D.22371 == 433) goto <D.22372>; else goto <D.22373>;
            <D.22372>:
            D.22374 = def->sreg1;
            D.22375 = (unsigned int) D.22374;
            D.22239 = cfg->frame_reg;
            if (D.22375 == D.22239) goto <D.22376>; else goto <D.22377>;
            <D.22376>:
            D.21985 = ins->opcode;
            D.22024 = D.21985 + 65162;
            if (D.22024 <= 16) goto <D.22378>; else goto <D.22379>;
            <D.22378>:
            D.22374 = def->sreg1;
            ins->dreg = D.22374;
            D.22221 = ins->data.op[0].const_val;
            D.22380 = def->data.op[1].const_val;
            D.22381 = D.22221 + D.22380;
            ins->data.op[0].const_val = D.22381;
            <D.22379>:
            <D.22377>:
            <D.22373>:
            <D.22370>:
          }
          <D.22368>:
          D.22366 = *spec;
          if (D.22366 != 32) goto <D.22382>; else goto <D.22383>;
          <D.22382>:
          D.21985 = ins->opcode;
          D.22024 = D.21985 + 65162;
          if (D.22024 > 16) goto <D.22384>; else goto <D.22385>;
          <D.22384>:
          D.21970 = ins->dreg;
          D.22389 = (unsigned int) D.21970;
          D.22057 = cfg->vreg_to_inst_len;
          if (D.22389 < D.22057) goto <D.22390>; else goto <D.22387>;
          <D.22390>:
          D.22059 = cfg->vreg_to_inst;
          D.21970 = ins->dreg;
          D.21975 = (unsigned int) D.21970;
          D.21976 = D.21975 * 4;
          D.22391 = D.22059 + D.21976;
          D.22392 = *D.22391;
          if (D.22392 != 0B) goto <D.22393>; else goto <D.22387>;
          <D.22393>:
          D.21970 = ins->dreg;
          D.22389 = (unsigned int) D.21970;
          D.22057 = cfg->vreg_to_inst_len;
          if (D.22389 < D.22057) goto <D.22395>; else goto <D.22396>;
          <D.22395>:
          D.22059 = cfg->vreg_to_inst;
          D.21970 = ins->dreg;
          D.21975 = (unsigned int) D.21970;
          D.21976 = D.21975 * 4;
          D.22391 = D.22059 + D.21976;
          iftmp.16 = *D.22391;
          goto <D.22397>;
          <D.22396>:
          iftmp.16 = 0B;
          <D.22397>:
          D.22398 = iftmp.16->flags;
          D.22399 = (int) D.22398;
          D.22400 = D.22399 & 20;
          if (D.22400 != 0) goto <D.22401>; else goto <D.22387>;
          <D.22401>:
          iftmp.15 = 1;
          goto <D.22388>;
          <D.22387>:
          iftmp.15 = 0;
          <D.22388>:
          D.22402 = iftmp.15 != 0;
          D.22403 = (long int) D.22402;
          D.22404 = __builtin_expect (D.22403, 0);
          if (D.22404 == 0) goto <D.22405>; else goto <D.22406>;
          <D.22405>:
          D.21970 = ins->dreg;
          D.21975 = (unsigned int) D.21970;
          D.21976 = D.21975 * 4;
          D.21977 = defs + D.21976;
          *D.21977 = ins;
          D.21970 = ins->dreg;
          D.21975 = (unsigned int) D.21970;
          D.21976 = D.21975 * 4;
          D.22407 = def_index + D.21976;
          *D.22407 = ins_index;
          <D.22406>:
          <D.22385>:
          <D.22383>:
          D.22410 = ins->opcode;
          D.22411 = D.22410 + 65193;
          D.22412 = D.22411 <= 2;
          D.22413 = D.22410 + 65187;
          D.22414 = D.22413 <= 2;
          D.22415 = D.22412 | D.22414;
          if (D.22415 != 0) goto <D.22408>; else goto <D.22416>;
          <D.22416>:
          D.21985 = ins->opcode;
          D.22417 = D.21985 + 65184;
          if (D.22417 <= 2) goto <D.22408>; else goto <D.22418>;
          <D.22418>:
          D.21985 = ins->opcode;
          D.22419 = D.21985 + 65181;
          if (D.22419 <= 2) goto <D.22408>; else goto <D.22420>;
          <D.22420>:
          D.21985 = ins->opcode;
          D.22421 = D.21985 + 65190;
          if (D.22421 <= 2) goto <D.22408>; else goto <D.22422>;
          <D.22422>:
          D.21985 = ins->opcode;
          D.22423 = D.21985 + 65178;
          if (D.22423 <= 2) goto <D.22408>; else goto <D.22424>;
          <D.22424>:
          D.21985 = ins->opcode;
          if (D.21985 == 448) goto <D.22408>; else goto <D.22409>;
          <D.22408>:
          last_call_index = ins_index;
          <D.22409>:
          ins_index = ins_index + 1;
        }
      finally
        {
          sregs = {CLOBBER};
        }
    }
    <D.21849>:
    ins = ins->next;
    <D.21887>:
    if (ins != 0B) goto <D.21886>; else goto <D.21888>;
    <D.21888>:
  }
  bb = bb->next_bb;
  <D.21890>:
  if (bb != 0B) goto <D.21889>; else goto <D.21891>;
  <D.21891>:
}


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

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


mono_local_deadce (struct MonoCompile * cfg)
{
  unsigned int D.22430;
  unsigned int D.22431;
  struct MonoMemPool * D.22432;
  short unsigned int D.22433;
  int D.22434;
  int D.22435;
  int D.22436;
  char D.22437;
  int D.22440;
  unsigned int D.22441;
  unsigned int D.22442;
  unsigned int D.22443;
  int D.22444;
  unsigned int D.22445;
  unsigned int D.22446;
  unsigned int D.22447;
  unsigned int D.22448;
  unsigned int D.22449;
  unsigned int D.22450;
  int D.22451;
  unsigned int D.22452;
  unsigned int D.22453;
  unsigned int D.22454;
  int D.22455;
  unsigned int D.22456;
  unsigned int D.22457;
  unsigned int D.22458;
  unsigned int D.22459;
  unsigned int D.22460;
  unsigned int D.22461;
  int D.22462;
  int D.22463;
  int D.22464;
  signed char D.22465;
  int D.22466;
  unsigned int D.22467;
  unsigned int D.22468;
  unsigned int D.22469;
  int D.22470;
  unsigned int D.22471;
  unsigned int D.22472;
  unsigned int D.22473;
  int D.22474;
  unsigned int D.22475;
  unsigned int D.22476;
  unsigned int D.22477;
  int D.22478;
  unsigned int D.22479;
  unsigned int D.22480;
  unsigned int D.22481;
  struct MonoInst * iftmp.17;
  struct MonoInst * D.22488;
  struct MonoInst * D.22491;
  struct MonoInst * D.22494;
  struct MonoInst * D.22497;
  _Bool D.22500;
  long int D.22501;
  long int D.22502;
  short unsigned int D.22507;
  _Bool D.22508;
  _Bool D.22509;
  _Bool D.22510;
  struct MonoInst * D.22514;
  short unsigned int D.22516;
  int D.22517;
  int D.22518;
  int D.22519;
  unsigned int D.22522;
  unsigned int D.22523;
  struct MonoInst * * D.22525;
  unsigned int D.22526;
  unsigned int D.22527;
  struct MonoInst * * D.22528;
  struct MonoInst * D.22529;
  char D.22530;
  int D.22533;
  unsigned int D.22536;
  unsigned int D.22537;
  int D.22538;
  unsigned int D.22539;
  unsigned int D.22540;
  short unsigned int D.22543;
  char D.22546;
  int D.22547;
  int D.22548;
  int D.22551;
  unsigned int D.22554;
  int D.22557;
  int D.22566;
  unsigned int D.22572;
  unsigned int D.22573;
  unsigned int D.22574;
  unsigned int D.22577;
  unsigned int D.22579;
  struct MonoInst * * D.22580;
  struct MonoInst * D.22581;
  unsigned char D.22583;
  unsigned char D.22584;
  int iftmp.18;
  struct MonoInst * iftmp.19;
  unsigned char D.22595;
  int D.22596;
  int D.22597;
  _Bool D.22599;
  long int D.22600;
  long int D.22601;
  unsigned int D.22603;
  unsigned int D.22604;
  short unsigned int D.22605;
  _Bool D.22606;
  _Bool D.22607;
  _Bool D.22608;
  short unsigned int D.22614;
  _Bool D.22615;
  _Bool D.22616;
  _Bool D.22617;
  short unsigned int D.22644;
  int D.22647;
  int D.22648;
  unsigned int D.22659;
  unsigned int D.22660;
  unsigned int D.22661;
  unsigned int D.22664;
  unsigned int D.22665;
  unsigned int D.22666;
  int D.22667;
  unsigned int D.22668;
  unsigned int D.22669;
  unsigned int D.22670;
  int D.22671;
  unsigned int D.22672;
  unsigned int D.22673;
  short unsigned int D.22674;
  unsigned int D.22677;
  unsigned int D.22678;
  unsigned int D.22679;
  short unsigned int D.22682;
  short unsigned int D.22683;
  _Bool D.22684;
  short unsigned int D.22685;
  _Bool D.22686;
  _Bool D.22687;
  short unsigned int D.22689;
  short unsigned int D.22691;
  short unsigned int D.22693;
  short unsigned int D.22695;
  struct GSList * D.22697;
  void * D.22700;
  unsigned int D.22701;
  unsigned int D.22702;
  int reg.20;
  int D.22704;
  unsigned int D.22705;
  unsigned int D.22706;
  struct GSList * D.22707;
  unsigned int D.22710;
  unsigned int D.22711;
  int reg.21;
  int D.22713;
  unsigned int D.22714;
  unsigned int D.22715;
  struct MonoInst * iftmp.22;
  struct MonoBasicBlock * bb;
  struct MonoInst * ins;
  struct MonoInst * prev;
  struct MonoBitSet * used;
  struct MonoBitSet * defined;

  D.22430 = cfg->next_vreg;
  D.22431 = D.22430 + 1;
  D.22432 = cfg->mempool;
  used = mono_bitset_mp_new_noinit (D.22432, D.22431);
  D.22430 = cfg->next_vreg;
  D.22431 = D.22430 + 1;
  D.22432 = cfg->mempool;
  defined = mono_bitset_mp_new_noinit (D.22432, D.22431);
  bb = cfg->bb_entry;
  goto <D.21963>;
  <D.21962>:
  ins = bb->code;
  goto <D.21931>;
  <D.21930>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.22433 = ins->opcode;
        D.22434 = (int) D.22433;
        D.22435 = D.22434 + -313;
        D.22436 = D.22435 * 4;
        spec = &ins_info[D.22436];
        D.22437 = *spec;
        if (D.22437 != 32) goto <D.22438>; else goto <D.22439>;
        <D.22438>:
        D.22440 = ins->dreg;
        D.22441 = (unsigned int) D.22440;
        D.22442 = D.22441 / 32;
        D.22443 = used->data[D.22442];
        D.22440 = ins->dreg;
        D.22444 = D.22440 & 31;
        D.22445 = 1 << D.22444;
        D.22446 = ~D.22445;
        D.22447 = D.22443 & D.22446;
        used->data[D.22442] = D.22447;
        D.22440 = ins->dreg;
        D.22441 = (unsigned int) D.22440;
        D.22448 = D.22441 / 32;
        D.22449 = defined->data[D.22448];
        D.22440 = ins->dreg;
        D.22444 = D.22440 & 31;
        D.22445 = 1 << D.22444;
        D.22446 = ~D.22445;
        D.22450 = D.22449 & D.22446;
        defined->data[D.22448] = D.22450;
        D.22440 = ins->dreg;
        D.22451 = D.22440 + 1;
        D.22452 = (unsigned int) D.22451;
        D.22453 = D.22452 / 32;
        D.22454 = used->data[D.22453];
        D.22440 = ins->dreg;
        D.22451 = D.22440 + 1;
        D.22455 = D.22451 & 31;
        D.22456 = 1 << D.22455;
        D.22457 = ~D.22456;
        D.22458 = D.22454 & D.22457;
        used->data[D.22453] = D.22458;
        D.22440 = ins->dreg;
        D.22451 = D.22440 + 1;
        D.22452 = (unsigned int) D.22451;
        D.22459 = D.22452 / 32;
        D.22460 = defined->data[D.22459];
        D.22440 = ins->dreg;
        D.22451 = D.22440 + 1;
        D.22455 = D.22451 & 31;
        D.22456 = 1 << D.22455;
        D.22457 = ~D.22456;
        D.22461 = D.22460 & D.22457;
        defined->data[D.22459] = D.22461;
        <D.22439>:
        D.22462 = ins->sreg1;
        sregs[0] = D.22462;
        D.22463 = ins->sreg2;
        sregs[1] = D.22463;
        D.22464 = ins->sreg3;
        sregs[2] = D.22464;
        D.22433 = ins->opcode;
        D.22434 = (int) D.22433;
        D.22435 = D.22434 + -313;
        D.22465 = ins_sreg_counts[D.22435];
        num_sregs = (int) D.22465;
        i = 0;
        goto <D.21928>;
        <D.21927>:
        D.22466 = sregs[i];
        D.22467 = (unsigned int) D.22466;
        D.22468 = D.22467 / 32;
        D.22469 = used->data[D.22468];
        D.22466 = sregs[i];
        D.22470 = D.22466 & 31;
        D.22471 = 1 << D.22470;
        D.22472 = ~D.22471;
        D.22473 = D.22469 & D.22472;
        used->data[D.22468] = D.22473;
        D.22466 = sregs[i];
        D.22474 = D.22466 + 1;
        D.22475 = (unsigned int) D.22474;
        D.22476 = D.22475 / 32;
        D.22477 = used->data[D.22476];
        D.22466 = sregs[i];
        D.22474 = D.22466 + 1;
        D.22478 = D.22474 & 31;
        D.22479 = 1 << D.22478;
        D.22480 = ~D.22479;
        D.22481 = D.22477 & D.22480;
        used->data[D.22476] = D.22481;
        i = i + 1;
        <D.21928>:
        if (i < num_sregs) goto <D.21927>; else goto <D.21929>;
        <D.21929>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  ins = ins->next;
  <D.21931>:
  if (ins != 0B) goto <D.21930>; else goto <D.21932>;
  <D.21932>:
  ins = bb->last_ins;
  if (ins != 0B) goto <D.22483>; else goto <D.22484>;
  <D.22483>:
  iftmp.17 = ins->prev;
  goto <D.22485>;
  <D.22484>:
  iftmp.17 = 0B;
  <D.22485>:
  prev = iftmp.17;
  goto <D.21960>;
  <D.21959>:
  {
    const char * spec;
    int sregs[3];
    int num_sregs;
    int i;

    try
      {
        D.22433 = ins->opcode;
        D.22434 = (int) D.22433;
        D.22435 = D.22434 + -313;
        D.22436 = D.22435 * 4;
        spec = &ins_info[D.22436];
        D.22433 = ins->opcode;
        if (D.22433 == 316) goto <D.22486>; else goto <D.22487>;
        <D.22486>:
        D.22488 = ins->prev;
        if (D.22488 != 0B) goto <D.22489>; else goto <D.22490>;
        <D.22489>:
        D.22488 = ins->prev;
        D.22491 = ins->next;
        D.22488->next = D.22491;
        <D.22490>:
        D.22491 = ins->next;
        if (D.22491 != 0B) goto <D.22492>; else goto <D.22493>;
        <D.22492>:
        D.22491 = ins->next;
        D.22488 = ins->prev;
        D.22491->prev = D.22488;
        <D.22493>:
        D.22494 = bb->code;
        if (D.22494 == ins) goto <D.22495>; else goto <D.22496>;
        <D.22495>:
        D.22491 = ins->next;
        bb->code = D.22491;
        <D.22496>:
        D.22497 = bb->last_ins;
        if (D.22497 == ins) goto <D.22498>; else goto <D.22499>;
        <D.22498>:
        D.22488 = ins->prev;
        bb->last_ins = D.22488;
        <D.22499>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.22464 = ins->sreg3;
        ins->sreg2 = D.22464;
        D.22463 = ins->sreg2;
        ins->sreg1 = D.22463;
        // predicted unlikely by continue predictor.
        goto <D.21937>;
        <D.22487>:
        D.22433 = ins->opcode;
        D.22500 = D.22433 <= 313;
        D.22501 = (long int) D.22500;
        D.22502 = __builtin_expect (D.22501, 0);
        if (D.22502 != 0) goto <D.22503>; else goto <D.22504>;
        <D.22503>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "local-propagation.c", 521, "ins->opcode > MONO_CEE_LAST");
        <D.22504>:
        D.22507 = ins->opcode;
        D.22508 = D.22507 == 428;
        D.22509 = D.22507 == 431;
        D.22510 = D.22508 | D.22509;
        if (D.22510 != 0) goto <D.22505>; else goto <D.22511>;
        <D.22511>:
        D.22433 = ins->opcode;
        if (D.22433 == 962) goto <D.22505>; else goto <D.22506>;
        <D.22505>:
        D.22488 = ins->prev;
        if (D.22488 != 0B) goto <D.22512>; else goto <D.22513>;
        <D.22512>:
        {
          struct MonoInst * def;
          const char * spec2;

          def = ins->prev;
          goto <D.21941>;
          <D.21940>:
          def = def->prev;
          <D.21941>:
          D.22514 = def->prev;
          if (D.22514 != 0B) goto <D.22515>; else goto <D.21942>;
          <D.22515>:
          D.22516 = def->opcode;
          if (D.22516 == 316) goto <D.21940>; else goto <D.21942>;
          <D.21942>:
          D.22516 = def->opcode;
          D.22517 = (int) D.22516;
          D.22518 = D.22517 + -313;
          D.22519 = D.22518 * 4;
          spec2 = &ins_info[D.22519];
          D.22462 = ins->sreg1;
          D.22522 = (unsigned int) D.22462;
          D.22523 = cfg->vreg_to_inst_len;
          if (D.22522 >= D.22523) goto <D.22520>; else goto <D.22524>;
          <D.22524>:
          D.22525 = cfg->vreg_to_inst;
          D.22462 = ins->sreg1;
          D.22526 = (unsigned int) D.22462;
          D.22527 = D.22526 * 4;
          D.22528 = D.22525 + D.22527;
          D.22529 = *D.22528;
          if (D.22529 == 0B) goto <D.22520>; else goto <D.22521>;
          <D.22520>:
          D.22530 = *spec2;
          if (D.22530 != 32) goto <D.22531>; else goto <D.22532>;
          <D.22531>:
          D.22533 = def->dreg;
          D.22462 = ins->sreg1;
          if (D.22533 == D.22462) goto <D.22534>; else goto <D.22535>;
          <D.22534>:
          D.22462 = ins->sreg1;
          D.22526 = (unsigned int) D.22462;
          D.22536 = D.22526 / 32;
          D.22537 = used->data[D.22536];
          D.22462 = ins->sreg1;
          D.22538 = D.22462 & 31;
          D.22539 = 1 << D.22538;
          D.22540 = D.22537 & D.22539;
          if (D.22540 == 0) goto <D.22541>; else goto <D.22542>;
          <D.22541>:
          D.22516 = def->opcode;
          D.22543 = D.22516 + 65162;
          if (D.22543 > 16) goto <D.22544>; else goto <D.22545>;
          <D.22544>:
          D.22546 = *spec;
          D.22547 = (int) D.22546;
          D.22462 = ins->sreg1;
          D.22548 = reg_is_softreg (D.22462, D.22547);
          if (D.22548 != 0) goto <D.22549>; else goto <D.22550>;
          <D.22549>:
          D.22551 = mono_is_simd_accessor (def);
          if (D.22551 == 0) goto <D.22552>; else goto <D.22553>;
          <D.22552>:
          D.22554 = cfg->verbose_level;
          if (D.22554 > 2) goto <D.22555>; else goto <D.22556>;
          <D.22555>:
          D.22557 = bb->block_num;
          printf ("\tReverse copyprop in BB%d on ", D.22557);
          mono_print_ins (ins);
          <D.22556>:
          D.22440 = ins->dreg;
          def->dreg = D.22440;
          D.22488 = ins->prev;
          if (D.22488 != 0B) goto <D.22558>; else goto <D.22559>;
          <D.22558>:
          D.22488 = ins->prev;
          D.22491 = ins->next;
          D.22488->next = D.22491;
          <D.22559>:
          D.22491 = ins->next;
          if (D.22491 != 0B) goto <D.22560>; else goto <D.22561>;
          <D.22560>:
          D.22491 = ins->next;
          D.22488 = ins->prev;
          D.22491->prev = D.22488;
          <D.22561>:
          D.22494 = bb->code;
          if (D.22494 == ins) goto <D.22562>; else goto <D.22563>;
          <D.22562>:
          D.22491 = ins->next;
          bb->code = D.22491;
          <D.22563>:
          D.22497 = bb->last_ins;
          if (D.22497 == ins) goto <D.22564>; else goto <D.22565>;
          <D.22564>:
          D.22488 = ins->prev;
          bb->last_ins = D.22488;
          <D.22565>:
          ins->opcode = 316;
          ins->dreg = -1;
          ins->sreg3 = -1;
          D.22464 = ins->sreg3;
          ins->sreg2 = D.22464;
          D.22463 = ins->sreg2;
          ins->sreg1 = D.22463;
          D.22433 = ins->opcode;
          D.22434 = (int) D.22433;
          D.22435 = D.22434 + -313;
          D.22436 = D.22435 * 4;
          spec = &ins_info[D.22436];
          <D.22553>:
          <D.22550>:
          <D.22545>:
          <D.22542>:
          <D.22535>:
          <D.22532>:
          <D.22521>:
        }
        <D.22513>:
        <D.22506>:
        D.22546 = *spec;
        D.22547 = (int) D.22546;
        D.22440 = ins->dreg;
        D.22566 = reg_is_softreg_no_fpstack (D.22440, D.22547);
        if (D.22566 != 0) goto <D.22567>; else goto <D.22568>;
        <D.22567>:
        D.22440 = ins->dreg;
        D.22441 = (unsigned int) D.22440;
        D.22572 = D.22441 / 32;
        D.22573 = used->data[D.22572];
        D.22440 = ins->dreg;
        D.22444 = D.22440 & 31;
        D.22445 = 1 << D.22444;
        D.22574 = D.22573 & D.22445;
        if (D.22574 == 0) goto <D.22575>; else goto <D.22576>;
        <D.22575>:
        D.22440 = ins->dreg;
        D.22577 = (unsigned int) D.22440;
        D.22523 = cfg->vreg_to_inst_len;
        if (D.22577 >= D.22523) goto <D.22571>; else goto <D.22578>;
        <D.22578>:
        D.22525 = cfg->vreg_to_inst;
        D.22440 = ins->dreg;
        D.22441 = (unsigned int) D.22440;
        D.22579 = D.22441 * 4;
        D.22580 = D.22525 + D.22579;
        D.22581 = *D.22580;
        if (D.22581 == 0B) goto <D.22571>; else goto <D.22582>;
        <D.22582>:
        D.22583 = BIT_FIELD_REF <*bb, 8, 912>;
        D.22584 = D.22583 & 8;
        if (D.22584 == 0) goto <D.22585>; else goto <D.22570>;
        <D.22585>:
        D.22440 = ins->dreg;
        D.22577 = (unsigned int) D.22440;
        D.22523 = cfg->vreg_to_inst_len;
        if (D.22577 < D.22523) goto <D.22589>; else goto <D.22587>;
        <D.22589>:
        D.22525 = cfg->vreg_to_inst;
        D.22440 = ins->dreg;
        D.22441 = (unsigned int) D.22440;
        D.22579 = D.22441 * 4;
        D.22580 = D.22525 + D.22579;
        D.22581 = *D.22580;
        if (D.22581 != 0B) goto <D.22590>; else goto <D.22587>;
        <D.22590>:
        D.22440 = ins->dreg;
        D.22577 = (unsigned int) D.22440;
        D.22523 = cfg->vreg_to_inst_len;
        if (D.22577 < D.22523) goto <D.22592>; else goto <D.22593>;
        <D.22592>:
        D.22525 = cfg->vreg_to_inst;
        D.22440 = ins->dreg;
        D.22441 = (unsigned int) D.22440;
        D.22579 = D.22441 * 4;
        D.22580 = D.22525 + D.22579;
        iftmp.19 = *D.22580;
        goto <D.22594>;
        <D.22593>:
        iftmp.19 = 0B;
        <D.22594>:
        D.22595 = iftmp.19->flags;
        D.22596 = (int) D.22595;
        D.22597 = D.22596 & 20;
        if (D.22597 != 0) goto <D.22598>; else goto <D.22587>;
        <D.22598>:
        iftmp.18 = 1;
        goto <D.22588>;
        <D.22587>:
        iftmp.18 = 0;
        <D.22588>:
        D.22599 = iftmp.18 != 0;
        D.22600 = (long int) D.22599;
        D.22601 = __builtin_expect (D.22600, 0);
        if (D.22601 == 0) goto <D.22602>; else goto <D.22570>;
        <D.22602>:
        D.22440 = ins->dreg;
        D.22441 = (unsigned int) D.22440;
        D.22572 = D.22441 / 32;
        D.22603 = defined->data[D.22572];
        D.22440 = ins->dreg;
        D.22444 = D.22440 & 31;
        D.22445 = 1 << D.22444;
        D.22604 = D.22603 & D.22445;
        if (D.22604 != 0) goto <D.22571>; else goto <D.22570>;
        <D.22571>:
        D.22605 = ins->opcode;
        D.22606 = D.22605 == 428;
        D.22607 = D.22605 == 430;
        D.22608 = D.22606 | D.22607;
        if (D.22608 != 0) goto <D.22569>; else goto <D.22609>;
        <D.22609>:
        D.22433 = ins->opcode;
        if (D.22433 == 431) goto <D.22569>; else goto <D.22610>;
        <D.22610>:
        D.22433 = ins->opcode;
        if (D.22433 == 962) goto <D.22569>; else goto <D.22611>;
        <D.22611>:
        D.22433 = ins->opcode;
        if (D.22433 == 362) goto <D.22569>; else goto <D.22612>;
        <D.22612>:
        D.22433 = ins->opcode;
        if (D.22433 == 363) goto <D.22569>; else goto <D.22613>;
        <D.22613>:
        D.22614 = ins->opcode;
        D.22615 = D.22614 == 432;
        D.22616 = D.22614 == 963;
        D.22617 = D.22615 | D.22616;
        if (D.22617 != 0) goto <D.22569>; else goto <D.22618>;
        <D.22618>:
        D.22433 = ins->opcode;
        if (D.22433 == 433) goto <D.22569>; else goto <D.22619>;
        <D.22619>:
        D.22433 = ins->opcode;
        if (D.22433 == 365) goto <D.22569>; else goto <D.22620>;
        <D.22620>:
        D.22433 = ins->opcode;
        if (D.22433 == 542) goto <D.22569>; else goto <D.22621>;
        <D.22621>:
        D.22433 = ins->opcode;
        if (D.22433 == 630) goto <D.22569>; else goto <D.22622>;
        <D.22622>:
        D.22433 = ins->opcode;
        if (D.22433 == 629) goto <D.22569>; else goto <D.22623>;
        <D.22623>:
        D.22433 = ins->opcode;
        if (D.22433 == 496) goto <D.22569>; else goto <D.22624>;
        <D.22624>:
        D.22433 = ins->opcode;
        if (D.22433 == 570) goto <D.22569>; else goto <D.22625>;
        <D.22625>:
        D.22433 = ins->opcode;
        if (D.22433 == 979) goto <D.22569>; else goto <D.22626>;
        <D.22626>:
        D.22433 = ins->opcode;
        if (D.22433 == 639) goto <D.22569>; else goto <D.22627>;
        <D.22627>:
        D.22433 = ins->opcode;
        if (D.22433 == 640) goto <D.22569>; else goto <D.22628>;
        <D.22628>:
        D.22433 = ins->opcode;
        if (D.22433 == 641) goto <D.22569>; else goto <D.22629>;
        <D.22629>:
        D.22433 = ins->opcode;
        if (D.22433 == 636) goto <D.22569>; else goto <D.22630>;
        <D.22630>:
        D.22433 = ins->opcode;
        if (D.22433 == 595) goto <D.22569>; else goto <D.22631>;
        <D.22631>:
        D.22433 = ins->opcode;
        if (D.22433 == 584) goto <D.22569>; else goto <D.22632>;
        <D.22632>:
        D.22433 = ins->opcode;
        if (D.22433 == 766) goto <D.22569>; else goto <D.22633>;
        <D.22633>:
        D.22433 = ins->opcode;
        if (D.22433 == 507) goto <D.22569>; else goto <D.22634>;
        <D.22634>:
        D.22433 = ins->opcode;
        if (D.22433 == 594) goto <D.22569>; else goto <D.22635>;
        <D.22635>:
        D.22433 = ins->opcode;
        if (D.22433 == 585) goto <D.22569>; else goto <D.22636>;
        <D.22636>:
        D.22433 = ins->opcode;
        if (D.22433 == 499) goto <D.22569>; else goto <D.22637>;
        <D.22637>:
        D.22433 = ins->opcode;
        if (D.22433 == 314) goto <D.22569>; else goto <D.22638>;
        <D.22638>:
        D.22433 = ins->opcode;
        if (D.22433 == 319) goto <D.22569>; else goto <D.22639>;
        <D.22639>:
        D.22433 = ins->opcode;
        if (D.22433 == 316) goto <D.22569>; else goto <D.22640>;
        <D.22640>:
        D.22433 = ins->opcode;
        if (D.22433 == 769) goto <D.22569>; else goto <D.22641>;
        <D.22641>:
        D.22433 = ins->opcode;
        if (D.22433 == 803) goto <D.22569>; else goto <D.22570>;
        <D.22569>:
        D.22488 = ins->prev;
        if (D.22488 != 0B) goto <D.22642>; else goto <D.22643>;
        <D.22642>:
        D.22488 = ins->prev;
        D.22644 = D.22488->opcode;
        if (D.22644 == 327) goto <D.22645>; else goto <D.22646>;
        <D.22645>:
        {
          struct MonoInst * prev;

          prev = ins->prev;
          prev->opcode = 316;
          prev->dreg = -1;
          prev->sreg3 = -1;
          D.22647 = prev->sreg3;
          prev->sreg2 = D.22647;
          D.22648 = prev->sreg2;
          prev->sreg1 = D.22648;
        }
        <D.22646>:
        <D.22643>:
        D.22488 = ins->prev;
        if (D.22488 != 0B) goto <D.22649>; else goto <D.22650>;
        <D.22649>:
        D.22488 = ins->prev;
        D.22491 = ins->next;
        D.22488->next = D.22491;
        <D.22650>:
        D.22491 = ins->next;
        if (D.22491 != 0B) goto <D.22651>; else goto <D.22652>;
        <D.22651>:
        D.22491 = ins->next;
        D.22488 = ins->prev;
        D.22491->prev = D.22488;
        <D.22652>:
        D.22494 = bb->code;
        if (D.22494 == ins) goto <D.22653>; else goto <D.22654>;
        <D.22653>:
        D.22491 = ins->next;
        bb->code = D.22491;
        <D.22654>:
        D.22497 = bb->last_ins;
        if (D.22497 == ins) goto <D.22655>; else goto <D.22656>;
        <D.22655>:
        D.22488 = ins->prev;
        bb->last_ins = D.22488;
        <D.22656>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.22464 = ins->sreg3;
        ins->sreg2 = D.22464;
        D.22463 = ins->sreg2;
        ins->sreg1 = D.22463;
        D.22433 = ins->opcode;
        D.22434 = (int) D.22433;
        D.22435 = D.22434 + -313;
        D.22436 = D.22435 * 4;
        spec = &ins_info[D.22436];
        <D.22570>:
        <D.22576>:
        D.22546 = *spec;
        if (D.22546 != 32) goto <D.22657>; else goto <D.22658>;
        <D.22657>:
        D.22440 = ins->dreg;
        D.22441 = (unsigned int) D.22440;
        D.22659 = D.22441 / 32;
        D.22660 = used->data[D.22659];
        D.22440 = ins->dreg;
        D.22444 = D.22440 & 31;
        D.22445 = 1 << D.22444;
        D.22446 = ~D.22445;
        D.22661 = D.22660 & D.22446;
        used->data[D.22659] = D.22661;
        <D.22658>:
        <D.22568>:
        D.22546 = *spec;
        if (D.22546 != 32) goto <D.22662>; else goto <D.22663>;
        <D.22662>:
        D.22440 = ins->dreg;
        D.22441 = (unsigned int) D.22440;
        D.22664 = D.22441 / 32;
        D.22665 = defined->data[D.22664];
        D.22440 = ins->dreg;
        D.22444 = D.22440 & 31;
        D.22445 = 1 << D.22444;
        D.22666 = D.22665 | D.22445;
        defined->data[D.22664] = D.22666;
        <D.22663>:
        D.22462 = ins->sreg1;
        sregs[0] = D.22462;
        D.22463 = ins->sreg2;
        sregs[1] = D.22463;
        D.22464 = ins->sreg3;
        sregs[2] = D.22464;
        D.22433 = ins->opcode;
        D.22434 = (int) D.22433;
        D.22435 = D.22434 + -313;
        D.22465 = ins_sreg_counts[D.22435];
        num_sregs = (int) D.22465;
        i = 0;
        goto <D.21945>;
        <D.21944>:
        D.22667 = sregs[i];
        D.22668 = (unsigned int) D.22667;
        D.22669 = D.22668 / 32;
        D.22670 = used->data[D.22669];
        D.22667 = sregs[i];
        D.22671 = D.22667 & 31;
        D.22672 = 1 << D.22671;
        D.22673 = D.22670 | D.22672;
        used->data[D.22669] = D.22673;
        i = i + 1;
        <D.21945>:
        if (i < num_sregs) goto <D.21944>; else goto <D.21946>;
        <D.21946>:
        D.22433 = ins->opcode;
        D.22674 = D.22433 + 65162;
        if (D.22674 <= 16) goto <D.22675>; else goto <D.22676>;
        <D.22675>:
        D.22440 = ins->dreg;
        D.22441 = (unsigned int) D.22440;
        D.22677 = D.22441 / 32;
        D.22678 = used->data[D.22677];
        D.22440 = ins->dreg;
        D.22444 = D.22440 & 31;
        D.22445 = 1 << D.22444;
        D.22679 = D.22678 | D.22445;
        used->data[D.22677] = D.22679;
        <D.22676>:
        D.22682 = ins->opcode;
        D.22683 = D.22682 + 65193;
        D.22684 = D.22683 <= 2;
        D.22685 = D.22682 + 65187;
        D.22686 = D.22685 <= 2;
        D.22687 = D.22684 | D.22686;
        if (D.22687 != 0) goto <D.22680>; else goto <D.22688>;
        <D.22688>:
        D.22433 = ins->opcode;
        D.22689 = D.22433 + 65184;
        if (D.22689 <= 2) goto <D.22680>; else goto <D.22690>;
        <D.22690>:
        D.22433 = ins->opcode;
        D.22691 = D.22433 + 65181;
        if (D.22691 <= 2) goto <D.22680>; else goto <D.22692>;
        <D.22692>:
        D.22433 = ins->opcode;
        D.22693 = D.22433 + 65190;
        if (D.22693 <= 2) goto <D.22680>; else goto <D.22694>;
        <D.22694>:
        D.22433 = ins->opcode;
        D.22695 = D.22433 + 65178;
        if (D.22695 <= 2) goto <D.22680>; else goto <D.22696>;
        <D.22696>:
        D.22433 = ins->opcode;
        if (D.22433 == 448) goto <D.22680>; else goto <D.22681>;
        <D.22680>:
        {
          struct MonoCallInst * call;
          struct GSList * l;

          call = ins;
          D.22697 = call->out_ireg_args;
          if (D.22697 != 0B) goto <D.22698>; else goto <D.22699>;
          <D.22698>:
          l = call->out_ireg_args;
          goto <D.21952>;
          <D.21951>:
          {
            guint32 regpair;
            guint32 reg;

            D.22700 = l->data;
            regpair = (guint32) D.22700;
            reg = regpair & 16777215;
            D.22701 = reg / 32;
            D.22702 = used->data[D.22701];
            reg.20 = (int) reg;
            D.22704 = reg.20 & 31;
            D.22705 = 1 << D.22704;
            D.22706 = D.22702 | D.22705;
            used->data[D.22701] = D.22706;
          }
          l = l->next;
          <D.21952>:
          if (l != 0B) goto <D.21951>; else goto <D.21953>;
          <D.21953>:
          <D.22699>:
          D.22707 = call->out_freg_args;
          if (D.22707 != 0B) goto <D.22708>; else goto <D.22709>;
          <D.22708>:
          l = call->out_freg_args;
          goto <D.21957>;
          <D.21956>:
          {
            guint32 regpair;
            guint32 reg;

            D.22700 = l->data;
            regpair = (guint32) D.22700;
            reg = regpair & 16777215;
            D.22710 = reg / 32;
            D.22711 = used->data[D.22710];
            reg.21 = (int) reg;
            D.22713 = reg.21 & 31;
            D.22714 = 1 << D.22713;
            D.22715 = D.22711 | D.22714;
            used->data[D.22710] = D.22715;
          }
          l = l->next;
          <D.21957>:
          if (l != 0B) goto <D.21956>; else goto <D.21958>;
          <D.21958>:
          <D.22709>:
        }
        <D.22681>:
      }
    finally
      {
        sregs = {CLOBBER};
      }
  }
  <D.21937>:
  ins = prev;
  if (ins != 0B) goto <D.22717>; else goto <D.22718>;
  <D.22717>:
  iftmp.22 = ins->prev;
  goto <D.22719>;
  <D.22718>:
  iftmp.22 = 0B;
  <D.22719>:
  prev = iftmp.22;
  <D.21960>:
  if (ins != 0B) goto <D.21959>; else goto <D.21961>;
  <D.21961>:
  bb = bb->next_bb;
  <D.21963>:
  if (bb != 0B) goto <D.21962>; else goto <D.21964>;
  <D.21964>:
}


mono_bitset_mp_new_noinit (struct MonoMemPool * mp, guint32 max_size)
{
  unsigned int D.22722;
  unsigned int size.23;
  struct MonoBitSet * D.22724;
  int size;
  void * mem;

  D.22722 = mono_bitset_alloc_size (max_size, 0);
  size = (int) D.22722;
  size.23 = (unsigned int) size;
  mem = mono_mempool_alloc (mp, size.23);
  D.22724 = mono_bitset_mem_new (mem, max_size, 1);
  return D.22724;
}


reg_is_softreg (int reg, const char spec)
{
  gboolean D.22726;
  int iftmp.24;
  _Bool iftmp.25;
  _Bool D.22735;
  _Bool D.22736;
  _Bool D.22737;
  _Bool D.22739;
  _Bool D.22740;

  D.22735 = spec == 105;
  D.22736 = spec == 102;
  D.22737 = D.22735 | D.22736;
  if (D.22737 != 0) goto <D.22732>; else goto <D.22738>;
  <D.22738>:
  if (spec == 120) goto <D.22732>; else goto <D.22733>;
  <D.22732>:
  iftmp.25 = 1;
  goto <D.22734>;
  <D.22733>:
  iftmp.25 = 0;
  <D.22734>:
  D.22739 = reg > 7;
  D.22740 = iftmp.25 & D.22739;
  if (D.22740 != 0) goto <D.22728>; else goto <D.22741>;
  <D.22741>:
  if (spec == 118) goto <D.22728>; else goto <D.22729>;
  <D.22728>:
  iftmp.24 = 1;
  goto <D.22730>;
  <D.22729>:
  iftmp.24 = 0;
  <D.22730>:
  D.22726 = iftmp.24;
  return D.22726;
}


mono_is_simd_accessor (struct MonoInst * ins)
{
  short unsigned int D.22743;
  int D.22744;
  gboolean D.22745;

  D.22743 = ins->opcode;
  D.22744 = (int) D.22743;
  switch (D.22744) <default: <D.21914>, case 932: <D.21903>, case 933: <D.21905>, case 934: <D.21906>, case 935: <D.21907>, case 936: <D.21908>, case 937: <D.21904>, case 939: <D.21909>, case 940: <D.21910>, case 941: <D.21911>, case 942: <D.21912>, case 943: <D.21913>>
  <D.21903>:
  <D.21904>:
  <D.21905>:
  <D.21906>:
  <D.21907>:
  <D.21908>:
  <D.21909>:
  <D.21910>:
  <D.21911>:
  <D.21912>:
  <D.21913>:
  D.22745 = 1;
  return D.22745;
  <D.21914>:
  D.22745 = 0;
  return D.22745;
}


reg_is_softreg_no_fpstack (int reg, const char spec)
{
  gboolean D.22747;
  int iftmp.26;
  _Bool D.22752;
  _Bool D.22753;
  _Bool D.22754;
  _Bool D.22755;
  _Bool D.22756;

  D.22752 = spec == 105;
  D.22753 = spec == 120;
  D.22754 = D.22752 | D.22753;
  D.22755 = reg > 7;
  D.22756 = D.22754 & D.22755;
  if (D.22756 != 0) goto <D.22749>; else goto <D.22757>;
  <D.22757>:
  if (spec == 118) goto <D.22749>; else goto <D.22750>;
  <D.22749>:
  iftmp.26 = 1;
  goto <D.22751>;
  <D.22750>:
  iftmp.26 = 0;
  <D.22751>:
  D.22747 = iftmp.26;
  return D.22747;
}


