mono_perform_abc_removal (struct MonoCompile * cfg)
{
  unsigned int D.24658;
  int verbose_level.0;
  int verbose_level.1;
  struct MonoMethod * D.24663;
  char * D.24664;
  struct MonoMemPool * D.24665;
  unsigned int D.24666;
  unsigned int D.24667;
  void * D.24668;
  unsigned int D.24669;
  void * D.24670;
  unsigned int D.24671;
  void * D.24672;
  void * D.24673;
  MonoIntegerValueKind * D.24674;
  unsigned int i.2;
  unsigned int D.24676;
  MonoIntegerValueKind * D.24677;
  struct MonoSummarizedValueRelation * D.24678;
  unsigned int D.24679;
  struct MonoSummarizedValueRelation * D.24680;
  struct MonoInst * * D.24681;
  struct MonoInst * * D.24682;
  unsigned int i.3;
  int D.24686;
  short unsigned int D.24687;
  int D.24688;
  int D.24689;
  int D.24690;
  char D.24693;
  short unsigned int D.24695;
  struct MonoInst * iftmp.4;
  int D.24701;
  unsigned int D.24702;
  unsigned int D.24703;
  struct MonoInst * * D.24706;
  unsigned int D.24707;
  unsigned int D.24708;
  struct MonoInst * * D.24709;
  MonoIntegerValueKind * D.24713;
  struct MonoType * D.24714;
  <unnamed type> D.24715;
  unsigned int D.24716;
  struct MonoSummarizedValueRelation * D.24717;
  <unnamed type> D.24718;
  int D.24719;
  struct MonoSummarizedValueRelation * D.24722;
  int D.24725;
  struct MonoSummarizedValue * D.24732;
  <unnamed type> D.24733;
  unsigned int D.24736;
  unsigned int related_index.5;
  unsigned int D.24738;
  struct MonoSummarizedValueRelation * D.24739;
  int D.24740;
  int D.24741;
  unsigned int related_variable.6;
  unsigned int D.24743;
  struct MonoSummarizedValueRelation * D.24744;
  struct MonoSummarizedValueRelation * D.24745;
  struct MonoSummarizedValueRelation * D.24746;
  struct MonoSummarizedValue * D.24749;
  struct MonoBasicBlock * * D.24750;
  struct MonoBasicBlock * D.24751;
  struct MonoVariableRelationsEvaluationArea area;
  struct MonoBasicBlock * bb;
  int i;

  try
    {
      D.24658 = cfg->verbose_level;
      verbose_level.0 = (int) D.24658;
      verbose_level = verbose_level.0;
      verbose_level.1 = verbose_level;
      if (verbose_level.1 > 2) goto <D.24661>; else goto <D.24662>;
      <D.24661>:
      D.24663 = cfg->method;
      D.24664 = mono_method_full_name (D.24663, 1);
      printf ("\nRemoving array bound checks in %s\n", D.24664);
      <D.24662>:
      area.cfg = cfg;
      D.24665 = cfg->mempool;
      D.24666 = cfg->next_vreg;
      D.24667 = D.24666 * 48;
      D.24668 = mono_mempool_alloc (D.24665, D.24667);
      area.relations = D.24668;
      D.24665 = cfg->mempool;
      D.24666 = cfg->next_vreg;
      D.24669 = D.24666 * 28;
      D.24670 = mono_mempool_alloc (D.24665, D.24669);
      area.contexts = D.24670;
      D.24665 = cfg->mempool;
      D.24666 = cfg->next_vreg;
      D.24671 = D.24666 * 4;
      D.24672 = mono_mempool_alloc (D.24665, D.24671);
      area.variable_value_kind = D.24672;
      D.24665 = cfg->mempool;
      D.24666 = cfg->next_vreg;
      D.24671 = D.24666 * 4;
      D.24673 = mono_mempool_alloc (D.24665, D.24671);
      area.defs = D.24673;
      i = 0;
      goto <D.24635>;
      <D.24634>:
      D.24674 = area.variable_value_kind;
      i.2 = (unsigned int) i;
      D.24676 = i.2 * 4;
      D.24677 = D.24674 + D.24676;
      *D.24677 = 0;
      D.24678 = area.relations;
      i.2 = (unsigned int) i;
      D.24679 = i.2 * 24;
      D.24680 = D.24678 + D.24679;
      D.24680->relation = 1;
      D.24678 = area.relations;
      i.2 = (unsigned int) i;
      D.24679 = i.2 * 24;
      D.24680 = D.24678 + D.24679;
      D.24680->relation_is_static_definition = 1;
      D.24678 = area.relations;
      i.2 = (unsigned int) i;
      D.24679 = i.2 * 24;
      D.24680 = D.24678 + D.24679;
      D.24680->related_value.type = 0;
      D.24678 = area.relations;
      i.2 = (unsigned int) i;
      D.24679 = i.2 * 24;
      D.24680 = D.24678 + D.24679;
      D.24680->next = 0B;
      D.24681 = area.defs;
      i.2 = (unsigned int) i;
      D.24676 = i.2 * 4;
      D.24682 = D.24681 + D.24676;
      *D.24682 = 0B;
      i = i + 1;
      <D.24635>:
      i.3 = (unsigned int) i;
      D.24666 = cfg->next_vreg;
      if (i.3 < D.24666) goto <D.24634>; else goto <D.24636>;
      <D.24636>:
      bb = cfg->bb_entry;
      goto <D.24648>;
      <D.24647>:
      {
        struct MonoInst * ins;

        verbose_level.1 = verbose_level;
        if (verbose_level.1 > 2) goto <D.24684>; else goto <D.24685>;
        <D.24684>:
        D.24686 = bb->block_num;
        printf ("\nABCREM BLOCK %d:\n", D.24686);
        <D.24685>:
        ins = bb->code;
        goto <D.24645>;
        <D.24644>:
        {
          const char * spec;

          D.24687 = ins->opcode;
          D.24688 = (int) D.24687;
          D.24689 = D.24688 + -313;
          D.24690 = D.24689 * 4;
          spec = &ins_info[D.24690];
          D.24693 = *spec;
          if (D.24693 == 32) goto <D.24691>; else goto <D.24694>;
          <D.24694>:
          D.24687 = ins->opcode;
          D.24695 = D.24687 + 65162;
          if (D.24695 <= 13) goto <D.24691>; else goto <D.24692>;
          <D.24691>:
          // predicted unlikely by continue predictor.
          goto <D.24639>;
          <D.24692>:
          D.24693 = *spec;
          if (D.24693 == 105) goto <D.24696>; else goto <D.24697>;
          <D.24696>:
          {
            MonoIntegerValueKind effective_value_kind;
            struct MonoRelationsEvaluationRange range;
            struct MonoSummarizedValueRelation * type_relation;
            struct MonoInst * var;

            try
              {
                verbose_level.1 = verbose_level;
                if (verbose_level.1 > 2) goto <D.24698>; else goto <D.24699>;
                <D.24698>:
                mono_print_ins (ins);
                <D.24699>:
                D.24701 = ins->dreg;
                D.24702 = (unsigned int) D.24701;
                D.24703 = cfg->vreg_to_inst_len;
                if (D.24702 < D.24703) goto <D.24704>; else goto <D.24705>;
                <D.24704>:
                D.24706 = cfg->vreg_to_inst;
                D.24701 = ins->dreg;
                D.24707 = (unsigned int) D.24701;
                D.24708 = D.24707 * 4;
                D.24709 = D.24706 + D.24708;
                iftmp.4 = *D.24709;
                goto <D.24710>;
                <D.24705>:
                iftmp.4 = 0B;
                <D.24710>:
                var = iftmp.4;
                if (var != 0B) goto <D.24711>; else goto <D.24712>;
                <D.24711>:
                D.24674 = area.variable_value_kind;
                D.24701 = ins->dreg;
                D.24707 = (unsigned int) D.24701;
                D.24708 = D.24707 * 4;
                D.24713 = D.24674 + D.24708;
                D.24714 = var->data.op[1].vtype;
                D.24715 = type_to_value_kind (D.24714);
                *D.24713 = D.24715;
                <D.24712>:
                D.24678 = area.relations;
                D.24701 = ins->dreg;
                D.24707 = (unsigned int) D.24701;
                D.24716 = D.24707 * 24;
                D.24717 = D.24678 + D.24716;
                D.24674 = area.variable_value_kind;
                D.24701 = ins->dreg;
                D.24707 = (unsigned int) D.24701;
                D.24708 = D.24707 * 4;
                D.24713 = D.24674 + D.24708;
                D.24718 = *D.24713;
                effective_value_kind = get_relation_from_ins (&area, ins, D.24717, D.24718);
                range.lower = -2147483648;
                range.upper = 2147483647;
                D.24674 = area.variable_value_kind;
                D.24701 = ins->dreg;
                D.24707 = (unsigned int) D.24701;
                D.24708 = D.24707 * 4;
                D.24713 = D.24674 + D.24708;
                D.24718 = *D.24713;
                apply_value_kind_to_range (&range, D.24718);
                apply_value_kind_to_range (&range, effective_value_kind);
                D.24719 = range.upper;
                if (D.24719 != 2147483647) goto <D.24720>; else goto <D.24721>;
                <D.24720>:
                D.24665 = cfg->mempool;
                type_relation = mono_mempool_alloc (D.24665, 24);
                type_relation->relation = 3;
                type_relation->related_value.type = 1;
                D.24719 = range.upper;
                type_relation->related_value.value.constant.value = D.24719;
                type_relation->relation_is_static_definition = 1;
                D.24678 = area.relations;
                D.24701 = ins->dreg;
                D.24707 = (unsigned int) D.24701;
                D.24716 = D.24707 * 24;
                D.24717 = D.24678 + D.24716;
                D.24722 = D.24717->next;
                type_relation->next = D.24722;
                D.24678 = area.relations;
                D.24701 = ins->dreg;
                D.24707 = (unsigned int) D.24701;
                D.24716 = D.24707 * 24;
                D.24717 = D.24678 + D.24716;
                D.24717->next = type_relation;
                verbose_level.1 = verbose_level;
                if (verbose_level.1 > 2) goto <D.24723>; else goto <D.24724>;
                <D.24723>:
                D.24701 = ins->dreg;
                D.24719 = range.upper;
                printf ("[var%d <= %d]", D.24701, D.24719);
                <D.24724>:
                <D.24721>:
                D.24725 = range.lower;
                if (D.24725 != -2147483648) goto <D.24726>; else goto <D.24727>;
                <D.24726>:
                D.24665 = cfg->mempool;
                type_relation = mono_mempool_alloc (D.24665, 24);
                type_relation->relation = 5;
                type_relation->related_value.type = 1;
                D.24725 = range.lower;
                type_relation->related_value.value.constant.value = D.24725;
                type_relation->relation_is_static_definition = 1;
                D.24678 = area.relations;
                D.24701 = ins->dreg;
                D.24707 = (unsigned int) D.24701;
                D.24716 = D.24707 * 24;
                D.24717 = D.24678 + D.24716;
                D.24722 = D.24717->next;
                type_relation->next = D.24722;
                D.24678 = area.relations;
                D.24701 = ins->dreg;
                D.24707 = (unsigned int) D.24701;
                D.24716 = D.24707 * 24;
                D.24717 = D.24678 + D.24716;
                D.24717->next = type_relation;
                verbose_level.1 = verbose_level;
                if (verbose_level.1 > 2) goto <D.24728>; else goto <D.24729>;
                <D.24728>:
                D.24701 = ins->dreg;
                D.24725 = range.lower;
                printf ("[var%d >= %d]", D.24701, D.24725);
                <D.24729>:
                <D.24727>:
                verbose_level.1 = verbose_level;
                if (verbose_level.1 > 2) goto <D.24730>; else goto <D.24731>;
                <D.24730>:
                D.24701 = ins->dreg;
                printf ("Summarized variable %d: ", D.24701);
                D.24678 = area.relations;
                D.24701 = ins->dreg;
                D.24707 = (unsigned int) D.24701;
                D.24716 = D.24707 * 24;
                D.24717 = D.24678 + D.24716;
                D.24732 = &D.24717->related_value;
                print_summarized_value (D.24732);
                printf ("\n");
                <D.24731>:
              }
            finally
              {
                range = {CLOBBER};
              }
          }
          <D.24697>:
        }
        <D.24639>:
        ins = ins->next;
        <D.24645>:
        if (ins != 0B) goto <D.24644>; else goto <D.24646>;
        <D.24646>:
      }
      bb = bb->next_bb;
      <D.24648>:
      if (bb != 0B) goto <D.24647>; else goto <D.24649>;
      <D.24649>:
      i = 0;
      goto <D.24653>;
      <D.24652>:
      D.24678 = area.relations;
      i.2 = (unsigned int) i;
      D.24679 = i.2 * 24;
      D.24680 = D.24678 + D.24679;
      D.24733 = D.24680->related_value.type;
      if (D.24733 == 2) goto <D.24734>; else goto <D.24735>;
      <D.24734>:
      {
        int related_index;
        int related_variable;

        D.24666 = cfg->next_vreg;
        i.3 = (unsigned int) i;
        D.24736 = D.24666 + i.3;
        related_index = (int) D.24736;
        D.24678 = area.relations;
        i.2 = (unsigned int) i;
        D.24679 = i.2 * 24;
        D.24680 = D.24678 + D.24679;
        related_variable = D.24680->related_value.value.variable.variable;
        D.24678 = area.relations;
        related_index.5 = (unsigned int) related_index;
        D.24738 = related_index.5 * 24;
        D.24739 = D.24678 + D.24738;
        D.24739->relation = 1;
        D.24678 = area.relations;
        related_index.5 = (unsigned int) related_index;
        D.24738 = related_index.5 * 24;
        D.24739 = D.24678 + D.24738;
        D.24739->relation_is_static_definition = 1;
        D.24678 = area.relations;
        related_index.5 = (unsigned int) related_index;
        D.24738 = related_index.5 * 24;
        D.24739 = D.24678 + D.24738;
        D.24739->related_value.type = 2;
        D.24678 = area.relations;
        related_index.5 = (unsigned int) related_index;
        D.24738 = related_index.5 * 24;
        D.24739 = D.24678 + D.24738;
        D.24739->related_value.value.variable.variable = i;
        D.24678 = area.relations;
        related_index.5 = (unsigned int) related_index;
        D.24738 = related_index.5 * 24;
        D.24739 = D.24678 + D.24738;
        D.24678 = area.relations;
        i.2 = (unsigned int) i;
        D.24679 = i.2 * 24;
        D.24680 = D.24678 + D.24679;
        D.24740 = D.24680->related_value.value.variable.delta;
        D.24741 = -D.24740;
        D.24739->related_value.value.variable.delta = D.24741;
        D.24678 = area.relations;
        related_index.5 = (unsigned int) related_index;
        D.24738 = related_index.5 * 24;
        D.24739 = D.24678 + D.24738;
        D.24678 = area.relations;
        related_variable.6 = (unsigned int) related_variable;
        D.24743 = related_variable.6 * 24;
        D.24744 = D.24678 + D.24743;
        D.24745 = D.24744->next;
        D.24739->next = D.24745;
        D.24678 = area.relations;
        related_variable.6 = (unsigned int) related_variable;
        D.24743 = related_variable.6 * 24;
        D.24744 = D.24678 + D.24743;
        D.24678 = area.relations;
        related_index.5 = (unsigned int) related_index;
        D.24738 = related_index.5 * 24;
        D.24746 = D.24678 + D.24738;
        D.24744->next = D.24746;
        verbose_level.1 = verbose_level;
        if (verbose_level.1 > 2) goto <D.24747>; else goto <D.24748>;
        <D.24747>:
        printf ("Added symmetric summarized value for variable variable %d (to %d): ", i, related_variable);
        D.24678 = area.relations;
        related_index.5 = (unsigned int) related_index;
        D.24738 = related_index.5 * 24;
        D.24739 = D.24678 + D.24738;
        D.24749 = &D.24739->related_value;
        print_summarized_value (D.24749);
        printf ("\n");
        <D.24748>:
      }
      <D.24735>:
      i = i + 1;
      <D.24653>:
      i.3 = (unsigned int) i;
      D.24666 = cfg->next_vreg;
      if (i.3 < D.24666) goto <D.24652>; else goto <D.24654>;
      <D.24654>:
      D.24750 = cfg->bblocks;
      D.24751 = *D.24750;
      process_block (cfg, D.24751, &area);
    }
  finally
    {
      area = {CLOBBER};
    }
}


type_to_value_kind (struct MonoType * type)
{
  unsigned char D.24752;
  unsigned char D.24753;
  MonoIntegerValueKind D.24756;
  unsigned char D.24757;
  int D.24758;

  D.24752 = BIT_FIELD_REF <*type, 8, 56>;
  D.24753 = D.24752 & 64;
  if (D.24753 != 0) goto <D.24754>; else goto <D.24755>;
  <D.24754>:
  D.24756 = 0;
  return D.24756;
  <D.24755>:
  D.24757 = type->type;
  D.24758 = (int) D.24757;
  switch (D.24758) <default: <D.24627>, case 4: <D.24617>, case 5: <D.24618>, case 6: <D.24619>, case 7: <D.24620>, case 8: <D.24621>, case 9: <D.24622>, case 10: <D.24625>, case 11: <D.24626>, case 24: <D.24623>, case 25: <D.24624>>
  <D.24617>:
  D.24756 = 1;
  return D.24756;
  <D.24618>:
  D.24756 = 17;
  return D.24756;
  <D.24619>:
  D.24756 = 2;
  return D.24756;
  <D.24620>:
  D.24756 = 18;
  return D.24756;
  <D.24621>:
  D.24756 = 4;
  return D.24756;
  <D.24622>:
  D.24756 = 20;
  return D.24756;
  <D.24623>:
  D.24756 = 4;
  return D.24756;
  <D.24624>:
  D.24756 = 20;
  return D.24756;
  <D.24625>:
  D.24756 = 8;
  return D.24756;
  <D.24626>:
  D.24756 = 24;
  return D.24756;
  <D.24627>:
  D.24756 = 0;
  return D.24756;
}


get_relation_from_ins (struct MonoVariableRelationsEvaluationArea * area, struct MonoInst * ins, struct MonoSummarizedValueRelation * result, MonoIntegerValueKind result_value_kind)
{
  unsigned char D.24760;
  short unsigned int D.24767;
  int D.24768;
  int D.24769;
  int D.24770;
  int * D.24771;
  int D.24772;
  int * D.24773;
  int D.24774;
  int D.24775;
  int D.24776;
  struct MonoInst * * D.24777;
  int D.24778;
  unsigned int D.24779;
  unsigned int D.24780;
  struct MonoInst * * D.24781;
  MonoIntegerValueKind D.24782;
  MonoIntegerValueKind value_kind;
  struct MonoSummarizedValue * value;

  value = &result->related_value;
  D.24760 = ins->type;
  if (D.24760 == 2) goto <D.24761>; else goto <D.24762>;
  <D.24761>:
  value_kind = 8;
  goto <D.24763>;
  <D.24762>:
  D.24760 = ins->type;
  if (D.24760 == 1) goto <D.24764>; else goto <D.24765>;
  <D.24764>:
  value_kind = 4;
  goto <D.24766>;
  <D.24765>:
  value_kind = 0;
  <D.24766>:
  <D.24763>:
  result->relation = 1;
  value->type = 0;
  D.24767 = ins->opcode;
  D.24768 = (int) D.24767;
  switch (D.24768) <default: <D.24440>, case 314: <D.24439>, case 319: <D.24433>, case 362: <D.24429>, case 424: <D.24431>, case 571: <D.24436>, case 625: <D.24434>, case 626: <D.24435>, case 762: <D.24432>, case 782: <D.24438>, case 783: <D.24437>>
  <D.24429>:
  value->type = 1;
  D.24769 = ins->data.op[0].const_val;
  value->value.constant.value = D.24769;
  goto <D.24430>;
  <D.24431>:
  value->type = 2;
  D.24770 = ins->sreg1;
  value->value.variable.variable = D.24770;
  value->value.variable.delta = 0;
  goto <D.24430>;
  <D.24432>:
  value->type = 2;
  D.24770 = ins->sreg1;
  value->value.variable.variable = D.24770;
  value->value.variable.delta = 0;
  value_kind = 8;
  goto <D.24430>;
  <D.24433>:
  value->type = 3;
  D.24771 = ins->data.op[1].phi_args;
  D.24772 = *D.24771;
  value->value.phi.number_of_alternatives = D.24772;
  D.24771 = ins->data.op[1].phi_args;
  D.24773 = D.24771 + 4;
  value->value.phi.phi_alternatives = D.24773;
  goto <D.24430>;
  <D.24434>:
  value->type = 2;
  D.24770 = ins->sreg1;
  value->value.variable.variable = D.24770;
  D.24774 = ins->data.op[1].const_val;
  value->value.variable.delta = D.24774;
  goto <D.24430>;
  <D.24435>:
  value->type = 2;
  D.24770 = ins->sreg1;
  value->value.variable.variable = D.24770;
  D.24774 = ins->data.op[1].const_val;
  D.24775 = -D.24774;
  value->value.variable.delta = D.24775;
  goto <D.24430>;
  <D.24436>:
  result->relation = 2;
  value->type = 2;
  D.24776 = ins->sreg2;
  value->value.variable.variable = D.24776;
  value->value.variable.delta = 0;
  value_kind = 20;
  goto <D.24430>;
  <D.24437>:
  value->type = 2;
  D.24770 = ins->sreg1;
  value->value.variable.variable = D.24770;
  value->value.variable.delta = 0;
  value_kind = 20;
  goto <D.24430>;
  <D.24438>:
  value->type = 2;
  D.24770 = ins->sreg1;
  value->value.variable.variable = D.24770;
  value->value.variable.delta = 0;
  D.24777 = area->defs;
  D.24778 = ins->dreg;
  D.24779 = (unsigned int) D.24778;
  D.24780 = D.24779 * 4;
  D.24781 = D.24777 + D.24780;
  *D.24781 = ins;
  goto <D.24430>;
  <D.24439>:
  result->relation = 4;
  value->type = 1;
  value->value.constant.value = 0;
  goto <D.24430>;
  <D.24440>:
  goto <D.24430>;
  <D.24430>:
  D.24782 = value_kind;
  return D.24782;
}


apply_value_kind_to_range (struct MonoRelationsEvaluationRange * range, MonoIntegerValueKind value_kind)
{
  unsigned int D.24787;
  int D.24790;
  unsigned int D.24793;
  int D.24796;

  if (value_kind != 0) goto <D.24785>; else goto <D.24786>;
  <D.24785>:
  D.24787 = value_kind & 16;
  if (D.24787 != 0) goto <D.24788>; else goto <D.24789>;
  <D.24788>:
  D.24790 = range->lower;
  if (D.24790 < 0) goto <D.24791>; else goto <D.24792>;
  <D.24791>:
  range->lower = 0;
  <D.24792>:
  D.24793 = value_kind & 15;
  if (D.24793 == 1) goto <D.24794>; else goto <D.24795>;
  <D.24794>:
  D.24796 = range->upper;
  if (D.24796 > 255) goto <D.24797>; else goto <D.24798>;
  <D.24797>:
  range->upper = 255;
  <D.24798>:
  goto <D.24799>;
  <D.24795>:
  D.24793 = value_kind & 15;
  if (D.24793 == 2) goto <D.24800>; else goto <D.24801>;
  <D.24800>:
  D.24796 = range->upper;
  if (D.24796 > 65535) goto <D.24802>; else goto <D.24803>;
  <D.24802>:
  range->upper = 65535;
  <D.24803>:
  <D.24801>:
  <D.24799>:
  goto <D.24804>;
  <D.24789>:
  D.24793 = value_kind & 15;
  if (D.24793 == 1) goto <D.24805>; else goto <D.24806>;
  <D.24805>:
  D.24790 = range->lower;
  if (D.24790 < -128) goto <D.24807>; else goto <D.24808>;
  <D.24807>:
  range->lower = -128;
  <D.24808>:
  D.24796 = range->upper;
  if (D.24796 > 127) goto <D.24809>; else goto <D.24810>;
  <D.24809>:
  range->upper = 127;
  <D.24810>:
  goto <D.24811>;
  <D.24806>:
  D.24793 = value_kind & 15;
  if (D.24793 == 2) goto <D.24812>; else goto <D.24813>;
  <D.24812>:
  D.24790 = range->lower;
  if (D.24790 < -32768) goto <D.24814>; else goto <D.24815>;
  <D.24814>:
  range->lower = -32768;
  <D.24815>:
  D.24796 = range->upper;
  if (D.24796 > 32767) goto <D.24816>; else goto <D.24817>;
  <D.24816>:
  range->upper = 32767;
  <D.24817>:
  <D.24813>:
  <D.24811>:
  <D.24804>:
  <D.24786>:
}


print_summarized_value (struct MonoSummarizedValue * value)
{
  <unnamed type> D.24818;
  int D.24819;
  int D.24820;
  int D.24821;
  int * D.24824;
  unsigned int phi.7;
  unsigned int D.24826;
  int * D.24827;
  int D.24828;
  int D.24829;

  D.24818 = value->type;
  switch (D.24818) <default: <D.24401>, case 0: <D.24392>, case 1: <D.24394>, case 2: <D.24395>, case 3: <D.24396>>
  <D.24392>:
  printf ("ANY");
  goto <D.24393>;
  <D.24394>:
  D.24819 = value->value.constant.value;
  printf ("CONSTANT %d", D.24819);
  goto <D.24393>;
  <D.24395>:
  D.24820 = value->value.variable.variable;
  D.24821 = value->value.variable.delta;
  printf ("VARIABLE %d, delta %d", D.24820, D.24821);
  goto <D.24393>;
  <D.24396>:
  {
    int phi;

    printf ("PHI (");
    phi = 0;
    goto <D.24399>;
    <D.24398>:
    if (phi != 0) goto <D.24822>; else goto <D.24823>;
    <D.24822>:
    printf (",");
    <D.24823>:
    D.24824 = value->value.phi.phi_alternatives;
    phi.7 = (unsigned int) phi;
    D.24826 = phi.7 * 4;
    D.24827 = D.24824 + D.24826;
    D.24828 = *D.24827;
    printf ("%d", D.24828);
    phi = phi + 1;
    <D.24399>:
    D.24829 = value->value.phi.number_of_alternatives;
    if (D.24829 > phi) goto <D.24398>; else goto <D.24400>;
    <D.24400>:
    printf (")");
    goto <D.24393>;
  }
  <D.24401>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "abcremoval.c", 118);
  <D.24393>:
}


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

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


process_block (struct MonoCompile * cfg, struct MonoBasicBlock * bb, struct MonoVariableRelationsEvaluationArea * area)
{
  int verbose_level.8;
  int D.24835;
  int D.24836;
  unsigned int D.24837;
  <unnamed type> D.24842;
  int D.24845;
  <unnamed type> D.24846;
  int D.24849;
  short unsigned int D.24852;
  struct MonoMemPool * D.24859;
  struct GSList * check_relations.9;
  struct GSList * check_relations.10;
  struct GSList * check_relations.11;
  int D.24865;
  int D.24866;
  int D.24871;
  int D.24872;
  short unsigned int D.24877;
  short unsigned int D.24881;
  struct MonoInst * * D.24885;
  unsigned int reg.12;
  unsigned int D.24887;
  struct MonoInst * * D.24888;
  struct MonoInst * D.24889;
  short unsigned int D.24892;
  unsigned char D.24897;
  unsigned char D.24898;
  void * D.24901;
  void * D.24902;
  int inst_index;
  struct MonoInst * ins;
  struct MonoAdditionalVariableRelationsForBB additional_relations;
  struct GSList * dominated_bb;
  struct GSList * l;
  struct GSList * check_relations;

  try
    {
      check_relations = 0B;
      verbose_level.8 = verbose_level;
      if (verbose_level.8 > 2) goto <D.24833>; else goto <D.24834>;
      <D.24833>:
      D.24835 = bb->block_num;
      D.24836 = bb->dfn;
      printf ("\nProcessing block %d [dfn %d]...\n", D.24835, D.24836);
      <D.24834>:
      D.24837 = bb->region;
      if (D.24837 != 4294967295) goto <D.24838>; else goto <D.24839>;
      <D.24838>:
      return;
      <D.24839>:
      get_relations_from_previous_bb (area, bb, &additional_relations);
      verbose_level.8 = verbose_level;
      if (verbose_level.8 > 2) goto <D.24840>; else goto <D.24841>;
      <D.24840>:
      D.24842 = additional_relations.relation1.relation.relation;
      if (D.24842 != 7) goto <D.24843>; else goto <D.24844>;
      <D.24843>:
      D.24845 = additional_relations.relation1.variable;
      printf ("Adding relation 1 on variable %d: ", D.24845);
      print_summarized_value_relation (&additional_relations.relation1.relation);
      printf ("\n");
      <D.24844>:
      D.24846 = additional_relations.relation2.relation.relation;
      if (D.24846 != 7) goto <D.24847>; else goto <D.24848>;
      <D.24847>:
      D.24849 = additional_relations.relation2.variable;
      printf ("Adding relation 2 on variable %d: ", D.24849);
      print_summarized_value_relation (&additional_relations.relation2.relation);
      printf ("\n");
      <D.24848>:
      <D.24841>:
      apply_change_to_evaluation_area (area, &additional_relations.relation1);
      apply_change_to_evaluation_area (area, &additional_relations.relation2);
      inst_index = 0;
      ins = bb->code;
      goto <D.24606>;
      <D.24605>:
      {
        struct MonoAdditionalVariableRelation * rel;
        int array_var;
        int index_var;

        verbose_level.8 = verbose_level;
        if (verbose_level.8 > 2) goto <D.24850>; else goto <D.24851>;
        <D.24850>:
        printf ("Processing instruction %d\n", inst_index);
        inst_index = inst_index + 1;
        <D.24851>:
        D.24852 = ins->opcode;
        if (D.24852 == 784) goto <D.24853>; else goto <D.24854>;
        <D.24853>:
        verbose_level.8 = verbose_level;
        if (verbose_level.8 > 2) goto <D.24855>; else goto <D.24856>;
        <D.24855>:
        printf ("Attempting check removal...\n");
        <D.24856>:
        array_var = ins->sreg1;
        index_var = ins->sreg2;
        remove_abc_from_inst (ins, area);
        D.24852 = ins->opcode;
        if (D.24852 != 316) goto <D.24857>; else goto <D.24858>;
        <D.24857>:
        D.24859 = cfg->mempool;
        rel = mono_mempool_alloc0 (D.24859, 32);
        rel->variable = index_var;
        rel->relation.relation = 2;
        rel->relation.related_value.type = 2;
        rel->relation.related_value.value.variable.variable = array_var;
        rel->relation.related_value.value.variable.delta = 0;
        apply_change_to_evaluation_area (area, rel);
        D.24859 = cfg->mempool;
        check_relations.9 = check_relations;
        check_relations.10 = g_slist_append_mempool (D.24859, check_relations.9, rel);
        check_relations = check_relations.10;
        D.24859 = cfg->mempool;
        rel = mono_mempool_alloc0 (D.24859, 32);
        rel->variable = index_var;
        rel->relation.relation = 5;
        rel->relation.related_value.type = 1;
        rel->relation.related_value.value.constant.value = 0;
        apply_change_to_evaluation_area (area, rel);
        D.24859 = cfg->mempool;
        check_relations.9 = check_relations;
        check_relations.11 = g_slist_append_mempool (D.24859, check_relations.9, rel);
        check_relations = check_relations.11;
        <D.24858>:
        <D.24854>:
        D.24852 = ins->opcode;
        if (D.24852 == 340) goto <D.24863>; else goto <D.24864>;
        <D.24863>:
        D.24865 = ins->sreg1;
        D.24866 = eval_non_null (area, D.24865);
        if (D.24866 != 0) goto <D.24867>; else goto <D.24868>;
        <D.24867>:
        verbose_level.8 = verbose_level;
        if (verbose_level.8 > 1) goto <D.24869>; else goto <D.24870>;
        <D.24869>:
        printf ("ARRAY-ACCESS: removed check_this instruction.\n");
        <D.24870>:
        ins->opcode = 316;
        ins->dreg = -1;
        ins->sreg3 = -1;
        D.24871 = ins->sreg3;
        ins->sreg2 = D.24871;
        D.24872 = ins->sreg2;
        ins->sreg1 = D.24872;
        <D.24868>:
        <D.24864>:
        D.24852 = ins->opcode;
        if (D.24852 == 799) goto <D.24873>; else goto <D.24874>;
        <D.24873>:
        D.24865 = ins->sreg1;
        add_non_null (area, cfg, D.24865, &check_relations);
        <D.24874>:
        if (0 != 0) goto <D.24875>; else goto <D.24876>;
        <D.24875>:
        {
          int reg;

          D.24852 = ins->opcode;
          D.24877 = D.24852 + 65162;
          if (D.24877 <= 13) goto <D.24878>; else goto <D.24879>;
          <D.24878>:
          reg = ins->dreg;
          goto <D.24880>;
          <D.24879>:
          D.24852 = ins->opcode;
          D.24881 = D.24852 + 65148;
          if (D.24881 <= 11) goto <D.24882>; else goto <D.24883>;
          <D.24882>:
          reg = ins->sreg1;
          goto <D.24884>;
          <D.24883>:
          reg = ins->sreg1;
          <D.24884>:
          <D.24880>:
          D.24885 = area->defs;
          reg.12 = (unsigned int) reg;
          D.24887 = reg.12 * 4;
          D.24888 = D.24885 + D.24887;
          D.24889 = *D.24888;
          if (D.24889 != 0B) goto <D.24890>; else goto <D.24891>;
          <D.24890>:
          D.24885 = area->defs;
          reg.12 = (unsigned int) reg;
          D.24887 = reg.12 * 4;
          D.24888 = D.24885 + D.24887;
          D.24889 = *D.24888;
          D.24892 = D.24889->opcode;
          if (D.24892 == 782) goto <D.24893>; else goto <D.24894>;
          <D.24893>:
          verbose_level.8 = verbose_level;
          if (verbose_level.8 > 1) goto <D.24895>; else goto <D.24896>;
          <D.24895>:
          printf ("ARRAY-ACCESS: removed MONO_INST_FAULT flag.\n");
          <D.24896>:
          D.24897 = ins->flags;
          D.24898 = D.24897 & 223;
          ins->flags = D.24898;
          <D.24894>:
          <D.24891>:
        }
        <D.24876>:
      }
      ins = ins->next;
      <D.24606>:
      if (ins != 0B) goto <D.24605>; else goto <D.24607>;
      <D.24607>:
      verbose_level.8 = verbose_level;
      if (verbose_level.8 > 2) goto <D.24899>; else goto <D.24900>;
      <D.24899>:
      D.24835 = bb->block_num;
      D.24836 = bb->dfn;
      printf ("Processing block %d [dfn %d] done.\n", D.24835, D.24836);
      <D.24900>:
      dominated_bb = bb->dominated;
      goto <D.24609>;
      <D.24608>:
      D.24901 = dominated_bb->data;
      process_block (cfg, D.24901, area);
      dominated_bb = dominated_bb->next;
      <D.24609>:
      if (dominated_bb != 0B) goto <D.24608>; else goto <D.24610>;
      <D.24610>:
      l = check_relations;
      goto <D.24612>;
      <D.24611>:
      D.24902 = l->data;
      remove_change_from_evaluation_area (D.24902);
      l = l->next;
      <D.24612>:
      if (l != 0B) goto <D.24611>; else goto <D.24613>;
      <D.24613>:
      remove_change_from_evaluation_area (&additional_relations.relation1);
      remove_change_from_evaluation_area (&additional_relations.relation2);
    }
  finally
    {
      additional_relations = {CLOBBER};
      check_relations = {CLOBBER};
    }
}


get_relations_from_previous_bb (struct MonoVariableRelationsEvaluationArea * area, struct MonoBasicBlock * bb, struct MonoAdditionalVariableRelationsForBB * relations)
{
  short int D.24906;
  struct MonoBasicBlock * * D.24909;
  struct MonoInst * D.24912;
  struct MonoInst * D.24914;
  struct MonoInst * D.24915;
  struct MonoBasicBlock * * D.24918;
  struct MonoBasicBlock * D.24919;
  struct MonoBasicBlock * * D.24923;
  struct MonoBasicBlock * D.24924;
  unsigned int D.24930;
  unsigned int D.24931;
  unsigned int D.24932;
  unsigned int D.24933;
  unsigned int D.24934;
  unsigned int D.24935;
  unsigned int D.24936;
  short unsigned int D.24937;
  int D.24940;
  int D.24941;
  int D.24945;
  struct MonoBasicBlock * in_bb;
  struct MonoInst * ins;
  struct MonoInst * compare;
  struct MonoInst * branch;
  MonoValueRelation branch_relation;
  MonoValueRelation symmetric_relation;
  gboolean code_path;

  relations->relation1.relation.relation = 7;
  relations->relation1.relation.related_value.type = 0;
  relations->relation1.relation.next = 0B;
  relations->relation1.relation.relation_is_static_definition = 0;
  relations->relation1.relation.next = 0B;
  relations->relation1.insertion_point = 0B;
  relations->relation1.variable = -1;
  relations->relation2.relation.relation = 7;
  relations->relation2.relation.related_value.type = 0;
  relations->relation2.relation.next = 0B;
  relations->relation2.relation.relation_is_static_definition = 0;
  relations->relation2.relation.next = 0B;
  relations->relation2.insertion_point = 0B;
  relations->relation2.variable = -1;
  D.24906 = bb->in_count;
  if (D.24906 == 1) goto <D.24907>; else goto <D.24908>;
  <D.24907>:
  D.24909 = bb->in_bb;
  in_bb = *D.24909;
  D.24912 = in_bb->last_ins;
  if (D.24912 == 0B) goto <D.24910>; else goto <D.24913>;
  <D.24913>:
  D.24914 = in_bb->code;
  D.24912 = in_bb->last_ins;
  if (D.24914 == D.24912) goto <D.24910>; else goto <D.24911>;
  <D.24910>:
  return;
  <D.24911>:
  ins = in_bb->code;
  goto <D.24469>;
  <D.24468>:
  ins = ins->next;
  <D.24469>:
  D.24915 = ins->next;
  D.24912 = in_bb->last_ins;
  if (D.24915 != D.24912) goto <D.24468>; else goto <D.24470>;
  <D.24470>:
  compare = ins;
  branch = ins->next;
  branch_relation = get_relation_from_branch_instruction (branch);
  if (branch_relation != 7) goto <D.24916>; else goto <D.24917>;
  <D.24916>:
  D.24918 = branch->data.op[1].many_blocks;
  D.24919 = *D.24918;
  if (D.24919 == bb) goto <D.24920>; else goto <D.24921>;
  <D.24920>:
  code_path = 1;
  goto <D.24922>;
  <D.24921>:
  D.24918 = branch->data.op[1].many_blocks;
  D.24923 = D.24918 + 4;
  D.24924 = *D.24923;
  if (D.24924 == bb) goto <D.24925>; else goto <D.24926>;
  <D.24925>:
  code_path = 0;
  goto <D.24927>;
  <D.24926>:
  code_path = 1;
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "abcremoval.c", 475);
  <D.24927>:
  <D.24922>:
  if (code_path == 0) goto <D.24928>; else goto <D.24929>;
  <D.24928>:
  D.24930 = ~branch_relation;
  branch_relation = D.24930 & 7;
  <D.24929>:
  D.24931 = branch_relation & 1;
  D.24932 = branch_relation & 2;
  D.24933 = D.24932 << 1;
  D.24934 = D.24931 | D.24933;
  D.24935 = branch_relation & 4;
  D.24936 = D.24935 >> 1;
  symmetric_relation = D.24934 | D.24936;
  D.24937 = compare->opcode;
  if (D.24937 == 326) goto <D.24938>; else goto <D.24939>;
  <D.24938>:
  D.24940 = compare->sreg1;
  relations->relation1.variable = D.24940;
  relations->relation1.relation.relation = branch_relation;
  relations->relation1.relation.related_value.type = 2;
  D.24941 = compare->sreg2;
  relations->relation1.relation.related_value.value.variable.variable = D.24941;
  relations->relation1.relation.related_value.value.variable.delta = 0;
  D.24941 = compare->sreg2;
  relations->relation2.variable = D.24941;
  relations->relation2.relation.relation = symmetric_relation;
  relations->relation2.relation.related_value.type = 2;
  D.24940 = compare->sreg1;
  relations->relation2.relation.related_value.value.variable.variable = D.24940;
  relations->relation2.relation.related_value.value.variable.delta = 0;
  goto <D.24942>;
  <D.24939>:
  D.24937 = compare->opcode;
  if (D.24937 == 327) goto <D.24943>; else goto <D.24944>;
  <D.24943>:
  D.24940 = compare->sreg1;
  relations->relation1.variable = D.24940;
  relations->relation1.relation.relation = branch_relation;
  relations->relation1.relation.related_value.type = 1;
  D.24945 = compare->data.op[1].const_val;
  relations->relation1.relation.related_value.value.constant.value = D.24945;
  <D.24944>:
  <D.24942>:
  <D.24917>:
  <D.24908>:
}


get_relation_from_branch_instruction (struct MonoInst * ins)
{
  short unsigned int D.24950;
  short unsigned int D.24951;
  _Bool D.24952;
  short unsigned int D.24953;
  _Bool D.24954;
  _Bool D.24955;
  short unsigned int D.24957;
  short unsigned int D.24958;
  int D.24959;
  MonoValueRelation D.24960;

  D.24950 = ins->opcode;
  D.24951 = D.24950 + 64985;
  D.24952 = D.24951 <= 9;
  D.24953 = D.24950 + 64878;
  D.24954 = D.24953 <= 9;
  D.24955 = D.24952 | D.24954;
  if (D.24955 != 0) goto <D.24947>; else goto <D.24956>;
  <D.24956>:
  D.24957 = ins->opcode;
  D.24958 = D.24957 + 64888;
  if (D.24958 <= 9) goto <D.24947>; else goto <D.24948>;
  <D.24947>:
  {
    CompRelation rel;

    D.24957 = ins->opcode;
    D.24959 = (int) D.24957;
    rel = mono_opcode_to_cond (D.24959);
    switch (rel) <default: <D.24455>, case 0: <D.24445>, case 1: <D.24446>, case 2: <D.24447>, case 3: <D.24449>, case 4: <D.24451>, case 5: <D.24453>, case 6: <D.24448>, case 7: <D.24450>, case 8: <D.24452>, case 9: <D.24454>>
    <D.24445>:
    D.24960 = 1;
    return D.24960;
    <D.24446>:
    D.24960 = 6;
    return D.24960;
    <D.24447>:
    <D.24448>:
    D.24960 = 3;
    return D.24960;
    <D.24449>:
    <D.24450>:
    D.24960 = 5;
    return D.24960;
    <D.24451>:
    <D.24452>:
    D.24960 = 2;
    return D.24960;
    <D.24453>:
    <D.24454>:
    D.24960 = 4;
    return D.24960;
    <D.24455>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "abcremoval.c", 421);
    D.24960 = 7;
    return D.24960;
  }
  goto <D.24949>;
  <D.24948>:
  D.24960 = 7;
  return D.24960;
  <D.24949>:
}


print_summarized_value_relation (struct MonoSummarizedValueRelation * relation)
{
  <unnamed type> D.24962;
  int D.24963;
  struct MonoSummarizedValue * D.24964;

  printf ("Relation ");
  D.24962 = relation->relation;
  D.24963 = (int) D.24962;
  print_relation (D.24963);
  printf (" with value ");
  D.24964 = &relation->related_value;
  print_summarized_value (D.24964);
}


print_relation (int relation)
{
  int D.24965;
  int D.24968;
  int D.24973;
  int print_or;

  print_or = 0;
  printf ("(");
  D.24965 = relation & 2;
  if (D.24965 != 0) goto <D.24966>; else goto <D.24967>;
  <D.24966>:
  printf ("LT");
  print_or = 1;
  <D.24967>:
  D.24968 = relation & 1;
  if (D.24968 != 0) goto <D.24969>; else goto <D.24970>;
  <D.24969>:
  if (print_or != 0) goto <D.24971>; else goto <D.24972>;
  <D.24971>:
  printf ("|");
  <D.24972>:
  printf ("EQ");
  print_or = 1;
  <D.24970>:
  D.24973 = relation & 4;
  if (D.24973 != 0) goto <D.24974>; else goto <D.24975>;
  <D.24974>:
  if (print_or != 0) goto <D.24976>; else goto <D.24977>;
  <D.24976>:
  printf ("|");
  <D.24977>:
  printf ("GT");
  print_or = 1;
  <D.24975>:
  printf (")");
}


remove_abc_from_inst (struct MonoInst * ins, struct MonoVariableRelationsEvaluationArea * area)
{
  struct MonoRelationsEvaluationContext * D.24978;
  unsigned int array_variable.13;
  unsigned int D.24980;
  unsigned int index_variable.14;
  unsigned int D.24982;
  struct MonoCompile * D.24983;
  unsigned int D.24984;
  int D.24985;
  int D.24989;
  int D.24991;
  int D.24993;
  int D.24994;
  int verbose_level.15;
  int D.24998;
  int D.24999;
  int array_variable;
  int index_variable;
  struct MonoRelationsEvaluationContext * array_context;
  struct MonoRelationsEvaluationContext * index_context;

  array_variable = ins->sreg1;
  index_variable = ins->sreg2;
  D.24978 = area->contexts;
  array_variable.13 = (unsigned int) array_variable;
  D.24980 = array_variable.13 * 28;
  array_context = D.24978 + D.24980;
  D.24978 = area->contexts;
  index_variable.14 = (unsigned int) index_variable;
  D.24982 = index_variable.14 * 28;
  index_context = D.24978 + D.24982;
  D.24978 = area->contexts;
  D.24983 = area->cfg;
  D.24984 = D.24983->next_vreg;
  D.24985 = (int) D.24984;
  clean_contexts (D.24978, D.24985);
  evaluate_relation_with_target_variable (area, index_variable, array_variable, 0B);
  evaluate_relation_with_target_variable (area, array_variable, array_variable, 0B);
  D.24989 = index_context->ranges.zero.lower;
  if (D.24989 >= 0) goto <D.24990>; else goto <D.24986>;
  <D.24990>:
  D.24991 = index_context->ranges.variable.upper;
  if (D.24991 < 0) goto <D.24987>; else goto <D.24992>;
  <D.24992>:
  D.24993 = index_context->ranges.zero.upper;
  D.24994 = array_context->ranges.zero.lower;
  if (D.24993 < D.24994) goto <D.24987>; else goto <D.24986>;
  <D.24987>:
  verbose_level.15 = verbose_level;
  if (verbose_level.15 > 1) goto <D.24996>; else goto <D.24997>;
  <D.24996>:
  printf ("ARRAY-ACCESS: removed bounds check on array %d with index %d\n", array_variable, index_variable);
  <D.24997>:
  ins->opcode = 316;
  ins->dreg = -1;
  ins->sreg3 = -1;
  D.24998 = ins->sreg3;
  ins->sreg2 = D.24998;
  D.24999 = ins->sreg2;
  ins->sreg1 = D.24999;
  goto <D.24988>;
  <D.24986>:
  verbose_level.15 = verbose_level;
  if (verbose_level.15 > 2) goto <D.25000>; else goto <D.25001>;
  <D.25000>:
  D.24989 = index_context->ranges.zero.lower;
  if (D.24989 >= 0) goto <D.25002>; else goto <D.25003>;
  <D.25002>:
  printf ("ARRAY-ACCESS: Removed lower bound check on array %d with index %d\n", array_variable, index_variable);
  <D.25003>:
  D.24991 = index_context->ranges.variable.upper;
  if (D.24991 < 0) goto <D.25004>; else goto <D.25005>;
  <D.25004>:
  printf ("ARRAY-ACCESS: Removed upper bound check (through variable) on array %d with index %d\n", array_variable, index_variable);
  <D.25005>:
  D.24993 = index_context->ranges.zero.upper;
  D.24994 = array_context->ranges.zero.lower;
  if (D.24993 < D.24994) goto <D.25006>; else goto <D.25007>;
  <D.25006>:
  printf ("ARRAY-ACCESS: Removed upper bound check (through constant) on array %d with index %d\n", array_variable, index_variable);
  <D.25007>:
  <D.25001>:
  <D.24988>:
}


clean_contexts (struct MonoRelationsEvaluationContext * contexts, int number)
{
  unsigned int i.16;
  unsigned int D.25009;
  struct MonoRelationsEvaluationContext * D.25010;
  int i;

  i = 0;
  goto <D.24488>;
  <D.24487>:
  i.16 = (unsigned int) i;
  D.25009 = i.16 * 28;
  D.25010 = contexts + D.25009;
  D.25010->status = 0;
  i = i + 1;
  <D.24488>:
  if (i < number) goto <D.24487>; else goto <D.24489>;
  <D.24489>:
}


evaluate_relation_with_target_variable (struct MonoVariableRelationsEvaluationArea * area, int variable, int target_variable, struct MonoRelationsEvaluationContext * father_context)
{
  struct MonoRelationsEvaluationContext * D.25011;
  unsigned int variable.17;
  unsigned int D.25013;
  <unnamed type> D.25014;
  struct MonoSummarizedValueRelation * D.25015;
  unsigned int D.25016;
  int verbose_level.18;
  <unnamed type> D.25026;
  struct MonoRelationsEvaluationRange * D.25027;
  int D.25028;
  <unnamed type> D.25029;
  unsigned int related_variable.19;
  unsigned int D.25033;
  <unnamed type> D.25037;
  struct MonoSummarizedValueRelation * D.25039;
  <unnamed type> D.25040;
  int D.25042;
  unsigned int D.25043;
  int D.25052;
  int D.25054;
  int iftmp.20;
  int D.25057;
  int iftmp.21;
  int D.25072;
  int iftmp.22;
  int D.25075;
  int iftmp.23;
  int D.25090;
  int iftmp.24;
  int D.25093;
  int iftmp.25;
  int D.25108;
  int iftmp.26;
  int D.25111;
  int iftmp.27;
  struct MonoRelationsEvaluationRanges * D.25125;
  struct MonoRelationsEvaluationRanges * D.25130;
  int * D.25133;
  unsigned int phi.28;
  unsigned int D.25135;
  int * D.25136;
  unsigned int D.25141;
  unsigned int D.25144;
  unsigned int D.25147;
  unsigned int phi_alternative.29;
  unsigned int D.25152;
  struct MonoRelationsEvaluationContext * D.25153;
  int D.25154;
  int D.25155;
  int D.25156;
  int D.25157;
  int D.25158;
  int D.25159;
  int D.25160;
  int D.25161;
  int D.25162;
  int D.25163;
  int D.25164;
  int D.25165;
  int D.25166;
  int D.25171;
  int D.25172;
  int D.25173;
  int D.25174;
  struct MonoSummarizedValueRelation * D.25184;
  struct MonoSummarizedValueRelation * D.25187;
  int D.25188;
  <unnamed type> D.25191;
  int D.25194;
  <unnamed type> D.25212;
  unsigned int D.25213;
  struct MonoRelationsEvaluationContext * context;

  D.25011 = area->contexts;
  variable.17 = (unsigned int) variable;
  D.25013 = variable.17 * 28;
  context = D.25011 + D.25013;
  D.25014 = context->status;
  switch (D.25014) <default: <D.24565>, case 0: <D.24529>, case 1: <D.24551>, case 2: <D.24564>>
  <D.24529>:
  {
    struct MonoSummarizedValueRelation * relation;

    D.25015 = area->relations;
    variable.17 = (unsigned int) variable;
    D.25016 = variable.17 * 24;
    relation = D.25015 + D.25016;
    verbose_level.18 = verbose_level;
    if (verbose_level.18 > 2) goto <D.25018>; else goto <D.25019>;
    <D.25018>:
    printf ("Evaluating variable %d (target variable %d)\n", variable, target_variable);
    print_summarized_value_relation (relation);
    printf ("\n");
    <D.25019>:
    context->status = 1;
    context->father = father_context;
    context->ranges.zero.lower = -2147483648;
    context->ranges.zero.upper = 2147483647;
    context->ranges.variable.lower = -2147483648;
    context->ranges.variable.upper = 2147483647;
    if (variable == target_variable) goto <D.25020>; else goto <D.25021>;
    <D.25020>:
    verbose_level.18 = verbose_level;
    if (verbose_level.18 > 2) goto <D.25022>; else goto <D.25023>;
    <D.25022>:
    printf ("Target variable reached (%d), continuing to evaluate relations with constants\n", variable);
    <D.25023>:
    context->ranges.variable.lower = 0;
    context->ranges.variable.upper = 0;
    <D.25021>:
    goto <D.24548>;
    <D.24547>:
    context->current_relation = relation;
    verbose_level.18 = verbose_level;
    if (verbose_level.18 > 2) goto <D.25024>; else goto <D.25025>;
    <D.25024>:
    printf ("Processing (%d): ", variable);
    print_summarized_value_relation (relation);
    printf ("\n");
    <D.25025>:
    D.25026 = relation->related_value.type;
    switch (D.25026) <default: <D.24546>, case 0: <D.24531>, case 1: <D.24533>, case 2: <D.24534>, case 3: <D.24537>>
    <D.24531>:
    goto <D.24532>;
    <D.24533>:
    D.25027 = &context->ranges.zero;
    D.25028 = relation->related_value.value.constant.value;
    D.25029 = relation->relation;
    intersect_value (D.25027, D.25028, D.25029);
    goto <D.24532>;
    <D.24534>:
    D.25029 = relation->relation;
    if (D.25029 != 7) goto <D.25030>; else goto <D.25031>;
    <D.25030>:
    {
      int related_variable;
      struct MonoRelationsEvaluationContext * related_context;

      related_variable = relation->related_value.value.variable.variable;
      D.25011 = area->contexts;
      related_variable.19 = (unsigned int) related_variable;
      D.25033 = related_variable.19 * 28;
      related_context = D.25011 + D.25033;
      D.25037 = related_context->status;
      if (D.25037 == 0) goto <D.25034>; else goto <D.25038>;
      <D.25038>:
      D.25039 = related_context->current_relation;
      D.25040 = D.25039->related_value.type;
      if (D.25040 != 2) goto <D.25034>; else goto <D.25041>;
      <D.25041>:
      D.25039 = related_context->current_relation;
      D.25042 = D.25039->related_value.value.variable.variable;
      if (D.25042 != variable) goto <D.25034>; else goto <D.25035>;
      <D.25034>:
      evaluate_relation_with_target_variable (area, related_variable, target_variable, context);
      D.25014 = context->status;
      D.25043 = D.25014 & 28;
      if (D.25043 != 0) goto <D.25044>; else goto <D.25045>;
      <D.25044>:
      verbose_level.18 = verbose_level;
      if (verbose_level.18 > 2) goto <D.25046>; else goto <D.25047>;
      <D.25046>:
      printf ("Recursivity detected for variable %d (target variable %d), status ", variable, target_variable);
      D.25014 = context->status;
      print_evaluation_context_status (D.25014);
      <D.25047>:
      D.25037 = related_context->status;
      if (D.25037 == 2) goto <D.25048>; else goto <D.25049>;
      <D.25048>:
      context->ranges = related_context->ranges;
      D.25052 = relation->related_value.value.variable.delta;
      if (D.25052 > 0) goto <D.25053>; else goto <D.25050>;
      <D.25053>:
      D.25054 = context->ranges.zero.lower;
      if (D.25054 != -2147483648) goto <D.25055>; else goto <D.25050>;
      <D.25055>:
      D.25054 = context->ranges.zero.lower;
      D.25052 = relation->related_value.value.variable.delta;
      D.25057 = D.25054 + D.25052;
      D.25054 = context->ranges.zero.lower;
      if (D.25057 > D.25054) goto <D.25058>; else goto <D.25059>;
      <D.25058>:
      D.25054 = context->ranges.zero.lower;
      D.25052 = relation->related_value.value.variable.delta;
      iftmp.20 = D.25054 + D.25052;
      goto <D.25060>;
      <D.25059>:
      iftmp.20 = 2147483647;
      <D.25060>:
      context->ranges.zero.lower = iftmp.20;
      goto <D.25051>;
      <D.25050>:
      D.25052 = relation->related_value.value.variable.delta;
      if (D.25052 < 0) goto <D.25061>; else goto <D.25062>;
      <D.25061>:
      D.25054 = context->ranges.zero.lower;
      if (D.25054 != 2147483647) goto <D.25063>; else goto <D.25064>;
      <D.25063>:
      D.25054 = context->ranges.zero.lower;
      D.25052 = relation->related_value.value.variable.delta;
      D.25057 = D.25054 + D.25052;
      D.25054 = context->ranges.zero.lower;
      if (D.25057 < D.25054) goto <D.25066>; else goto <D.25067>;
      <D.25066>:
      D.25054 = context->ranges.zero.lower;
      D.25052 = relation->related_value.value.variable.delta;
      iftmp.21 = D.25054 + D.25052;
      goto <D.25068>;
      <D.25067>:
      iftmp.21 = -2147483648;
      <D.25068>:
      context->ranges.zero.lower = iftmp.21;
      <D.25064>:
      <D.25062>:
      <D.25051>:
      D.25052 = relation->related_value.value.variable.delta;
      if (D.25052 > 0) goto <D.25071>; else goto <D.25069>;
      <D.25071>:
      D.25072 = context->ranges.zero.upper;
      if (D.25072 != -2147483648) goto <D.25073>; else goto <D.25069>;
      <D.25073>:
      D.25072 = context->ranges.zero.upper;
      D.25052 = relation->related_value.value.variable.delta;
      D.25075 = D.25072 + D.25052;
      D.25072 = context->ranges.zero.upper;
      if (D.25075 > D.25072) goto <D.25076>; else goto <D.25077>;
      <D.25076>:
      D.25072 = context->ranges.zero.upper;
      D.25052 = relation->related_value.value.variable.delta;
      iftmp.22 = D.25072 + D.25052;
      goto <D.25078>;
      <D.25077>:
      iftmp.22 = 2147483647;
      <D.25078>:
      context->ranges.zero.upper = iftmp.22;
      goto <D.25070>;
      <D.25069>:
      D.25052 = relation->related_value.value.variable.delta;
      if (D.25052 < 0) goto <D.25079>; else goto <D.25080>;
      <D.25079>:
      D.25072 = context->ranges.zero.upper;
      if (D.25072 != 2147483647) goto <D.25081>; else goto <D.25082>;
      <D.25081>:
      D.25072 = context->ranges.zero.upper;
      D.25052 = relation->related_value.value.variable.delta;
      D.25075 = D.25072 + D.25052;
      D.25072 = context->ranges.zero.upper;
      if (D.25075 < D.25072) goto <D.25084>; else goto <D.25085>;
      <D.25084>:
      D.25072 = context->ranges.zero.upper;
      D.25052 = relation->related_value.value.variable.delta;
      iftmp.23 = D.25072 + D.25052;
      goto <D.25086>;
      <D.25085>:
      iftmp.23 = -2147483648;
      <D.25086>:
      context->ranges.zero.upper = iftmp.23;
      <D.25082>:
      <D.25080>:
      <D.25070>:
      D.25052 = relation->related_value.value.variable.delta;
      if (D.25052 > 0) goto <D.25089>; else goto <D.25087>;
      <D.25089>:
      D.25090 = context->ranges.variable.lower;
      if (D.25090 != -2147483648) goto <D.25091>; else goto <D.25087>;
      <D.25091>:
      D.25090 = context->ranges.variable.lower;
      D.25052 = relation->related_value.value.variable.delta;
      D.25093 = D.25090 + D.25052;
      D.25090 = context->ranges.variable.lower;
      if (D.25093 > D.25090) goto <D.25094>; else goto <D.25095>;
      <D.25094>:
      D.25090 = context->ranges.variable.lower;
      D.25052 = relation->related_value.value.variable.delta;
      iftmp.24 = D.25090 + D.25052;
      goto <D.25096>;
      <D.25095>:
      iftmp.24 = 2147483647;
      <D.25096>:
      context->ranges.variable.lower = iftmp.24;
      goto <D.25088>;
      <D.25087>:
      D.25052 = relation->related_value.value.variable.delta;
      if (D.25052 < 0) goto <D.25097>; else goto <D.25098>;
      <D.25097>:
      D.25090 = context->ranges.variable.lower;
      if (D.25090 != 2147483647) goto <D.25099>; else goto <D.25100>;
      <D.25099>:
      D.25090 = context->ranges.variable.lower;
      D.25052 = relation->related_value.value.variable.delta;
      D.25093 = D.25090 + D.25052;
      D.25090 = context->ranges.variable.lower;
      if (D.25093 < D.25090) goto <D.25102>; else goto <D.25103>;
      <D.25102>:
      D.25090 = context->ranges.variable.lower;
      D.25052 = relation->related_value.value.variable.delta;
      iftmp.25 = D.25090 + D.25052;
      goto <D.25104>;
      <D.25103>:
      iftmp.25 = -2147483648;
      <D.25104>:
      context->ranges.variable.lower = iftmp.25;
      <D.25100>:
      <D.25098>:
      <D.25088>:
      D.25052 = relation->related_value.value.variable.delta;
      if (D.25052 > 0) goto <D.25107>; else goto <D.25105>;
      <D.25107>:
      D.25108 = context->ranges.variable.upper;
      if (D.25108 != -2147483648) goto <D.25109>; else goto <D.25105>;
      <D.25109>:
      D.25108 = context->ranges.variable.upper;
      D.25052 = relation->related_value.value.variable.delta;
      D.25111 = D.25108 + D.25052;
      D.25108 = context->ranges.variable.upper;
      if (D.25111 > D.25108) goto <D.25112>; else goto <D.25113>;
      <D.25112>:
      D.25108 = context->ranges.variable.upper;
      D.25052 = relation->related_value.value.variable.delta;
      iftmp.26 = D.25108 + D.25052;
      goto <D.25114>;
      <D.25113>:
      iftmp.26 = 2147483647;
      <D.25114>:
      context->ranges.variable.upper = iftmp.26;
      goto <D.25106>;
      <D.25105>:
      D.25052 = relation->related_value.value.variable.delta;
      if (D.25052 < 0) goto <D.25115>; else goto <D.25116>;
      <D.25115>:
      D.25108 = context->ranges.variable.upper;
      if (D.25108 != 2147483647) goto <D.25117>; else goto <D.25118>;
      <D.25117>:
      D.25108 = context->ranges.variable.upper;
      D.25052 = relation->related_value.value.variable.delta;
      D.25111 = D.25108 + D.25052;
      D.25108 = context->ranges.variable.upper;
      if (D.25111 < D.25108) goto <D.25120>; else goto <D.25121>;
      <D.25120>:
      D.25108 = context->ranges.variable.upper;
      D.25052 = relation->related_value.value.variable.delta;
      iftmp.27 = D.25108 + D.25052;
      goto <D.25122>;
      <D.25121>:
      iftmp.27 = -2147483648;
      <D.25122>:
      context->ranges.variable.upper = iftmp.27;
      <D.25118>:
      <D.25116>:
      <D.25106>:
      context->status = 2;
      verbose_level.18 = verbose_level;
      if (verbose_level.18 > 2) goto <D.25123>; else goto <D.25124>;
      <D.25123>:
      printf (", ranges already computed, result: \n");
      D.25125 = &context->ranges;
      print_evaluation_context_ranges (D.25125);
      D.25052 = relation->related_value.value.variable.delta;
      printf (" (delta is %d)\n", D.25052);
      <D.25124>:
      goto <D.25126>;
      <D.25049>:
      verbose_level.18 = verbose_level;
      if (verbose_level.18 > 2) goto <D.25127>; else goto <D.25128>;
      <D.25127>:
      printf (", ranges not computed\n");
      <D.25128>:
      <D.25126>:
      goto <D.25129>;
      <D.25045>:
      D.25125 = &context->ranges;
      D.25130 = &related_context->ranges;
      D.25052 = relation->related_value.value.variable.delta;
      D.25029 = relation->relation;
      intersect_ranges (D.25125, D.25130, D.25052, D.25029);
      <D.25129>:
      goto <D.25036>;
      <D.25035>:
      verbose_level.18 = verbose_level;
      if (verbose_level.18 > 2) goto <D.25131>; else goto <D.25132>;
      <D.25131>:
      printf ("Relation is a back-edge in this traversal, skipping\n");
      <D.25132>:
      <D.25036>:
    }
    <D.25031>:
    goto <D.24532>;
    <D.24537>:
    {
      struct MonoRelationsEvaluationRanges phi_ranges;
      int phi;
      gboolean is_ascending;
      gboolean is_descending;

      try
        {
          is_ascending = 0;
          is_descending = 0;
          phi_ranges.zero.lower = 2147483647;
          phi_ranges.zero.upper = -2147483648;
          phi_ranges.variable.lower = 2147483647;
          phi_ranges.variable.upper = -2147483648;
          phi = 0;
          goto <D.24544>;
          <D.24543>:
          {
            int phi_alternative;

            D.25133 = relation->related_value.value.phi.phi_alternatives;
            phi.28 = (unsigned int) phi;
            D.25135 = phi.28 * 4;
            D.25136 = D.25133 + D.25135;
            phi_alternative = *D.25136;
            evaluate_relation_with_target_variable (area, phi_alternative, target_variable, context);
            D.25014 = context->status;
            D.25043 = D.25014 & 28;
            if (D.25043 != 0) goto <D.25137>; else goto <D.25138>;
            <D.25137>:
            verbose_level.18 = verbose_level;
            if (verbose_level.18 > 2) goto <D.25139>; else goto <D.25140>;
            <D.25139>:
            printf ("Recursivity detected for variable %d (target variable %d), status ", variable, target_variable);
            D.25014 = context->status;
            print_evaluation_context_status (D.25014);
            printf ("\n");
            <D.25140>:
            D.25014 = context->status;
            D.25141 = D.25014 & 4;
            if (D.25141 != 0) goto <D.25142>; else goto <D.25143>;
            <D.25142>:
            is_ascending = 1;
            <D.25143>:
            D.25014 = context->status;
            D.25144 = D.25014 & 8;
            if (D.25144 != 0) goto <D.25145>; else goto <D.25146>;
            <D.25145>:
            is_descending = 1;
            <D.25146>:
            D.25014 = context->status;
            D.25147 = D.25014 & 16;
            if (D.25147 != 0) goto <D.25148>; else goto <D.25149>;
            <D.25148>:
            is_ascending = 1;
            is_descending = 1;
            <D.25149>:
            context->status = 1;
            goto <D.25150>;
            <D.25138>:
            D.25011 = area->contexts;
            phi_alternative.29 = (unsigned int) phi_alternative;
            D.25152 = phi_alternative.29 * 28;
            D.25153 = D.25011 + D.25152;
            D.25154 = D.25153->ranges.zero.lower;
            D.25155 = phi_ranges.zero.lower;
            D.25156 = MIN_EXPR <D.25154, D.25155>;
            phi_ranges.zero.lower = D.25156;
            D.25011 = area->contexts;
            phi_alternative.29 = (unsigned int) phi_alternative;
            D.25152 = phi_alternative.29 * 28;
            D.25153 = D.25011 + D.25152;
            D.25157 = D.25153->ranges.zero.upper;
            D.25158 = phi_ranges.zero.upper;
            D.25159 = MAX_EXPR <D.25157, D.25158>;
            phi_ranges.zero.upper = D.25159;
            D.25011 = area->contexts;
            phi_alternative.29 = (unsigned int) phi_alternative;
            D.25152 = phi_alternative.29 * 28;
            D.25153 = D.25011 + D.25152;
            D.25160 = D.25153->ranges.variable.lower;
            D.25161 = phi_ranges.variable.lower;
            D.25162 = MIN_EXPR <D.25160, D.25161>;
            phi_ranges.variable.lower = D.25162;
            D.25011 = area->contexts;
            phi_alternative.29 = (unsigned int) phi_alternative;
            D.25152 = phi_alternative.29 * 28;
            D.25153 = D.25011 + D.25152;
            D.25163 = D.25153->ranges.variable.upper;
            D.25164 = phi_ranges.variable.upper;
            D.25165 = MAX_EXPR <D.25163, D.25164>;
            phi_ranges.variable.upper = D.25165;
            <D.25150>:
          }
          phi = phi + 1;
          <D.24544>:
          D.25166 = relation->related_value.value.phi.number_of_alternatives;
          if (D.25166 > phi) goto <D.24543>; else goto <D.24545>;
          <D.24545>:
          if (is_ascending != 0) goto <D.25167>; else goto <D.25168>;
          <D.25167>:
          phi_ranges.zero.upper = 2147483647;
          phi_ranges.variable.upper = 2147483647;
          <D.25168>:
          if (is_descending != 0) goto <D.25169>; else goto <D.25170>;
          <D.25169>:
          phi_ranges.zero.lower = -2147483648;
          phi_ranges.variable.lower = -2147483648;
          <D.25170>:
          D.25155 = phi_ranges.zero.lower;
          D.25054 = context->ranges.zero.lower;
          D.25171 = MAX_EXPR <D.25155, D.25054>;
          context->ranges.zero.lower = D.25171;
          D.25158 = phi_ranges.zero.upper;
          D.25072 = context->ranges.zero.upper;
          D.25172 = MIN_EXPR <D.25158, D.25072>;
          context->ranges.zero.upper = D.25172;
          D.25161 = phi_ranges.variable.lower;
          D.25090 = context->ranges.variable.lower;
          D.25173 = MAX_EXPR <D.25161, D.25090>;
          context->ranges.variable.lower = D.25173;
          D.25164 = phi_ranges.variable.upper;
          D.25108 = context->ranges.variable.upper;
          D.25174 = MIN_EXPR <D.25164, D.25108>;
          context->ranges.variable.upper = D.25174;
          goto <D.24532>;
        }
      finally
        {
          phi_ranges = {CLOBBER};
        }
    }
    <D.24546>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "abcremoval.c", 819);
    <D.24532>:
    relation = relation->next;
    <D.24548>:
    if (relation != 0B) goto <D.24547>; else goto <D.24549>;
    <D.24549>:
    D.25014 = context->status;
    D.25043 = D.25014 & 28;
    if (D.25043 != 0) goto <D.25175>; else goto <D.25176>;
    <D.25175>:
    verbose_level.18 = verbose_level;
    if (verbose_level.18 > 2) goto <D.25177>; else goto <D.25178>;
    <D.25177>:
    printf ("Recursivity for variable %d (target variable %d) discards computation, status ", variable, target_variable);
    D.25014 = context->status;
    print_evaluation_context_status (D.25014);
    printf ("\n");
    <D.25178>:
    context->status = 0;
    goto <D.25179>;
    <D.25176>:
    verbose_level.18 = verbose_level;
    if (verbose_level.18 > 2) goto <D.25180>; else goto <D.25181>;
    <D.25180>:
    printf ("Ranges for variable %d (target variable %d) computed: ", variable, target_variable);
    D.25125 = &context->ranges;
    print_evaluation_context_ranges (D.25125);
    printf ("\n");
    <D.25181>:
    context->status = 2;
    <D.25179>:
    goto <D.24550>;
  }
  <D.24551>:
  {
    struct MonoRelationsEvaluationContext * current_context;
    struct MonoRelationsEvaluationContext * last_context;
    gboolean evaluation_can_be_recursive;
    gboolean evaluation_is_definition;
    int path_value;

    current_context = father_context;
    last_context = context->father;
    evaluation_can_be_recursive = 1;
    evaluation_is_definition = 1;
    path_value = 0;
    verbose_level.18 = verbose_level;
    if (verbose_level.18 > 2) goto <D.25182>; else goto <D.25183>;
    <D.25182>:
    printf ("Evaluation of variable %d (target variable %d) already in progress\n", variable, target_variable);
    print_evaluation_context (context);
    D.25184 = context->current_relation;
    print_summarized_value_relation (D.25184);
    printf ("\n");
    <D.25183>:
    goto <D.24558>;
    <D.24557>:
    if (current_context == 0B) goto <D.25185>; else goto <D.25186>;
    <D.25185>:
    printf ("Broken recursive ring in ABC removal\n");
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "abcremoval.c", 867);
    <D.25186>:
    D.25187 = current_context->current_relation;
    D.25188 = D.25187->relation_is_static_definition;
    if (D.25188 != 0) goto <D.25189>; else goto <D.25190>;
    <D.25189>:
    D.25187 = current_context->current_relation;
    D.25191 = D.25187->related_value.type;
    if (D.25191 == 2) goto <D.25192>; else goto <D.25193>;
    <D.25192>:
    D.25187 = current_context->current_relation;
    D.25194 = D.25187->related_value.value.variable.delta;
    path_value = D.25194 + path_value;
    goto <D.25195>;
    <D.25193>:
    D.25187 = current_context->current_relation;
    D.25191 = D.25187->related_value.type;
    if (D.25191 != 3) goto <D.25196>; else goto <D.25197>;
    <D.25196>:
    evaluation_can_be_recursive = 0;
    <D.25197>:
    <D.25195>:
    goto <D.25198>;
    <D.25190>:
    evaluation_is_definition = 0;
    evaluation_can_be_recursive = 0;
    <D.25198>:
    current_context = current_context->father;
    <D.24558>:
    if (current_context != last_context) goto <D.24557>; else goto <D.24559>;
    <D.24559>:
    if (evaluation_is_definition != 0) goto <D.25199>; else goto <D.25200>;
    <D.25199>:
    {
      MonoRelationsEvaluationStatus recursive_status;

      if (evaluation_can_be_recursive != 0) goto <D.25201>; else goto <D.25202>;
      <D.25201>:
      if (path_value > 0) goto <D.25203>; else goto <D.25204>;
      <D.25203>:
      recursive_status = 4;
      goto <D.25205>;
      <D.25204>:
      if (path_value < 0) goto <D.25206>; else goto <D.25207>;
      <D.25206>:
      recursive_status = 8;
      goto <D.25208>;
      <D.25207>:
      recursive_status = 16;
      <D.25208>:
      <D.25205>:
      goto <D.25209>;
      <D.25202>:
      recursive_status = 16;
      <D.25209>:
      verbose_level.18 = verbose_level;
      if (verbose_level.18 > 2) goto <D.25210>; else goto <D.25211>;
      <D.25210>:
      printf ("Recursivity accepted (");
      print_evaluation_context_status (recursive_status);
      printf (")\n");
      <D.25211>:
      current_context = father_context;
      goto <D.24562>;
      <D.24561>:
      D.25212 = current_context->status;
      D.25213 = D.25212 | recursive_status;
      current_context->status = D.25213;
      current_context = current_context->father;
      <D.24562>:
      if (current_context != last_context) goto <D.24561>; else goto <D.24563>;
      <D.24563>:
    }
    goto <D.25214>;
    <D.25200>:
    verbose_level.18 = verbose_level;
    if (verbose_level.18 > 2) goto <D.25215>; else goto <D.25216>;
    <D.25215>:
    printf ("Recursivity rejected (some relation in the cycle is not a defintion)\n");
    <D.25216>:
    <D.25214>:
    goto <D.24550>;
  }
  <D.24564>:
  return;
  <D.24565>:
  verbose_level.18 = verbose_level;
  if (verbose_level.18 > 2) goto <D.25217>; else goto <D.25218>;
  <D.25217>:
  printf ("Variable %d (target variable %d) already in a recursive ring, skipping\n", variable, target_variable);
  print_evaluation_context (context);
  D.25184 = context->current_relation;
  print_summarized_value_relation (D.25184);
  printf ("\n");
  <D.25218>:
  goto <D.24550>;
  <D.24550>:
}


intersect_value (struct MonoRelationsEvaluationRange * range, int value, MonoValueRelation relation)
{
  int D.25223;
  int D.25224;
  int D.25225;
  int D.25226;
  int iftmp.30;
  unsigned int value.31;
  unsigned int D.25229;
  int D.25233;
  int iftmp.32;
  int D.25238;

  switch (relation) <default: <D.24504>, case 0: <D.24495>, case 1: <D.24498>, case 2: <D.24500>, case 3: <D.24501>, case 4: <D.24502>, case 5: <D.24503>, case 6: <D.24499>, case 7: <D.24497>>
  <D.24495>:
  range->lower = 2147483647;
  range->upper = -2147483648;
  goto <D.24496>;
  <D.24497>:
  goto <D.24496>;
  <D.24498>:
  D.25223 = range->upper;
  D.25224 = MIN_EXPR <D.25223, value>;
  range->upper = D.25224;
  D.25225 = range->lower;
  D.25226 = MAX_EXPR <D.25225, value>;
  range->lower = D.25226;
  goto <D.24496>;
  <D.24499>:
  goto <D.24496>;
  <D.24500>:
  value.31 = (unsigned int) value;
  D.25229 = value.31 + 2147483647;
  if (D.25229 <= 4294967293) goto <D.25230>; else goto <D.25231>;
  <D.25230>:
  iftmp.30 = value + -1;
  goto <D.25232>;
  <D.25231>:
  iftmp.30 = value;
  <D.25232>:
  D.25223 = range->upper;
  D.25233 = MIN_EXPR <iftmp.30, D.25223>;
  range->upper = D.25233;
  goto <D.24496>;
  <D.24501>:
  D.25223 = range->upper;
  D.25224 = MIN_EXPR <D.25223, value>;
  range->upper = D.25224;
  goto <D.24496>;
  <D.24502>:
  value.31 = (unsigned int) value;
  D.25229 = value.31 + 2147483647;
  if (D.25229 <= 4294967293) goto <D.25235>; else goto <D.25236>;
  <D.25235>:
  iftmp.32 = value + 1;
  goto <D.25237>;
  <D.25236>:
  iftmp.32 = value;
  <D.25237>:
  D.25225 = range->lower;
  D.25238 = MAX_EXPR <iftmp.32, D.25225>;
  range->lower = D.25238;
  goto <D.24496>;
  <D.24503>:
  D.25225 = range->lower;
  D.25226 = MAX_EXPR <D.25225, value>;
  range->lower = D.25226;
  goto <D.24496>;
  <D.24504>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "abcremoval.c", 586);
  <D.24496>:
}


intersect_ranges (struct MonoRelationsEvaluationRanges * ranges, struct MonoRelationsEvaluationRanges * other_ranges, int delta, MonoValueRelation relation)
{
  int D.25242;
  int D.25243;
  int D.25244;
  int D.25245;
  int D.25246;
  int D.25247;
  int D.25248;
  int D.25249;
  int D.25250;
  int D.25251;
  int D.25252;
  int D.25253;
  int iftmp.33;
  unsigned int D.25255;
  unsigned int D.25256;
  int D.25260;
  int iftmp.34;
  unsigned int D.25262;
  unsigned int D.25263;
  int D.25267;
  int iftmp.35;
  unsigned int D.25269;
  unsigned int D.25270;
  int D.25274;
  int iftmp.36;
  unsigned int D.25276;
  unsigned int D.25277;
  int D.25281;
  int D.25286;
  int iftmp.37;
  int D.25289;
  int iftmp.38;
  int D.25304;
  int iftmp.39;
  int D.25307;
  int iftmp.40;
  int D.25322;
  int iftmp.41;
  int D.25325;
  int iftmp.42;
  int D.25340;
  int iftmp.43;
  int D.25343;
  int iftmp.44;

  if (delta == 0) goto <D.25240>; else goto <D.25241>;
  <D.25240>:
  switch (relation) <default: <D.24520>, case 0: <D.24511>, case 1: <D.24514>, case 2: <D.24516>, case 3: <D.24517>, case 4: <D.24518>, case 5: <D.24519>, case 6: <D.24515>, case 7: <D.24513>>
  <D.24511>:
  ranges->zero.lower = 2147483647;
  ranges->zero.upper = -2147483648;
  ranges->variable.lower = 2147483647;
  ranges->variable.upper = -2147483648;
  goto <D.24512>;
  <D.24513>:
  goto <D.24512>;
  <D.24514>:
  D.25242 = other_ranges->zero.lower;
  D.25243 = ranges->zero.lower;
  D.25244 = MAX_EXPR <D.25242, D.25243>;
  ranges->zero.lower = D.25244;
  D.25245 = other_ranges->zero.upper;
  D.25246 = ranges->zero.upper;
  D.25247 = MIN_EXPR <D.25245, D.25246>;
  ranges->zero.upper = D.25247;
  D.25248 = other_ranges->variable.lower;
  D.25249 = ranges->variable.lower;
  D.25250 = MAX_EXPR <D.25248, D.25249>;
  ranges->variable.lower = D.25250;
  D.25251 = other_ranges->variable.upper;
  D.25252 = ranges->variable.upper;
  D.25253 = MIN_EXPR <D.25251, D.25252>;
  ranges->variable.upper = D.25253;
  goto <D.24512>;
  <D.24515>:
  goto <D.24512>;
  <D.24516>:
  D.25245 = other_ranges->zero.upper;
  D.25255 = (unsigned int) D.25245;
  D.25256 = D.25255 + 2147483647;
  if (D.25256 > 4294967293) goto <D.25257>; else goto <D.25258>;
  <D.25257>:
  iftmp.33 = other_ranges->zero.upper;
  goto <D.25259>;
  <D.25258>:
  D.25245 = other_ranges->zero.upper;
  iftmp.33 = D.25245 + -1;
  <D.25259>:
  D.25246 = ranges->zero.upper;
  D.25260 = MIN_EXPR <iftmp.33, D.25246>;
  ranges->zero.upper = D.25260;
  D.25251 = other_ranges->variable.upper;
  D.25262 = (unsigned int) D.25251;
  D.25263 = D.25262 + 2147483647;
  if (D.25263 > 4294967293) goto <D.25264>; else goto <D.25265>;
  <D.25264>:
  iftmp.34 = other_ranges->variable.upper;
  goto <D.25266>;
  <D.25265>:
  D.25251 = other_ranges->variable.upper;
  iftmp.34 = D.25251 + -1;
  <D.25266>:
  D.25252 = ranges->variable.upper;
  D.25267 = MIN_EXPR <iftmp.34, D.25252>;
  ranges->variable.upper = D.25267;
  goto <D.24512>;
  <D.24517>:
  D.25245 = other_ranges->zero.upper;
  D.25246 = ranges->zero.upper;
  D.25247 = MIN_EXPR <D.25245, D.25246>;
  ranges->zero.upper = D.25247;
  D.25251 = other_ranges->variable.upper;
  D.25252 = ranges->variable.upper;
  D.25253 = MIN_EXPR <D.25251, D.25252>;
  ranges->variable.upper = D.25253;
  goto <D.24512>;
  <D.24518>:
  D.25242 = other_ranges->zero.lower;
  D.25269 = (unsigned int) D.25242;
  D.25270 = D.25269 + 2147483647;
  if (D.25270 > 4294967293) goto <D.25271>; else goto <D.25272>;
  <D.25271>:
  iftmp.35 = other_ranges->zero.lower;
  goto <D.25273>;
  <D.25272>:
  D.25242 = other_ranges->zero.lower;
  iftmp.35 = D.25242 + 1;
  <D.25273>:
  D.25243 = ranges->zero.lower;
  D.25274 = MAX_EXPR <iftmp.35, D.25243>;
  ranges->zero.lower = D.25274;
  D.25248 = other_ranges->variable.lower;
  D.25276 = (unsigned int) D.25248;
  D.25277 = D.25276 + 2147483647;
  if (D.25277 > 4294967293) goto <D.25278>; else goto <D.25279>;
  <D.25278>:
  iftmp.36 = other_ranges->variable.lower;
  goto <D.25280>;
  <D.25279>:
  D.25248 = other_ranges->variable.lower;
  iftmp.36 = D.25248 + 1;
  <D.25280>:
  D.25249 = ranges->variable.lower;
  D.25281 = MAX_EXPR <iftmp.36, D.25249>;
  ranges->variable.lower = D.25281;
  goto <D.24512>;
  <D.24519>:
  D.25242 = other_ranges->zero.lower;
  D.25243 = ranges->zero.lower;
  D.25244 = MAX_EXPR <D.25242, D.25243>;
  ranges->zero.lower = D.25244;
  D.25248 = other_ranges->variable.lower;
  D.25249 = ranges->variable.lower;
  D.25250 = MAX_EXPR <D.25248, D.25249>;
  ranges->variable.lower = D.25250;
  goto <D.24512>;
  <D.24520>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "abcremoval.c", 633);
  <D.24512>:
  goto <D.25282>;
  <D.25241>:
  {
    struct MonoRelationsEvaluationRanges translated_ranges;

    try
      {
        translated_ranges = *other_ranges;
        if (delta > 0) goto <D.25285>; else goto <D.25283>;
        <D.25285>:
        D.25286 = translated_ranges.zero.lower;
        if (D.25286 != -2147483648) goto <D.25287>; else goto <D.25283>;
        <D.25287>:
        D.25286 = translated_ranges.zero.lower;
        D.25289 = D.25286 + delta;
        D.25286 = translated_ranges.zero.lower;
        if (D.25289 > D.25286) goto <D.25290>; else goto <D.25291>;
        <D.25290>:
        D.25286 = translated_ranges.zero.lower;
        iftmp.37 = D.25286 + delta;
        goto <D.25292>;
        <D.25291>:
        iftmp.37 = 2147483647;
        <D.25292>:
        translated_ranges.zero.lower = iftmp.37;
        goto <D.25284>;
        <D.25283>:
        if (delta < 0) goto <D.25293>; else goto <D.25294>;
        <D.25293>:
        D.25286 = translated_ranges.zero.lower;
        if (D.25286 != 2147483647) goto <D.25295>; else goto <D.25296>;
        <D.25295>:
        D.25286 = translated_ranges.zero.lower;
        D.25289 = D.25286 + delta;
        D.25286 = translated_ranges.zero.lower;
        if (D.25289 < D.25286) goto <D.25298>; else goto <D.25299>;
        <D.25298>:
        D.25286 = translated_ranges.zero.lower;
        iftmp.38 = D.25286 + delta;
        goto <D.25300>;
        <D.25299>:
        iftmp.38 = -2147483648;
        <D.25300>:
        translated_ranges.zero.lower = iftmp.38;
        <D.25296>:
        <D.25294>:
        <D.25284>:
        if (delta > 0) goto <D.25303>; else goto <D.25301>;
        <D.25303>:
        D.25304 = translated_ranges.zero.upper;
        if (D.25304 != -2147483648) goto <D.25305>; else goto <D.25301>;
        <D.25305>:
        D.25304 = translated_ranges.zero.upper;
        D.25307 = D.25304 + delta;
        D.25304 = translated_ranges.zero.upper;
        if (D.25307 > D.25304) goto <D.25308>; else goto <D.25309>;
        <D.25308>:
        D.25304 = translated_ranges.zero.upper;
        iftmp.39 = D.25304 + delta;
        goto <D.25310>;
        <D.25309>:
        iftmp.39 = 2147483647;
        <D.25310>:
        translated_ranges.zero.upper = iftmp.39;
        goto <D.25302>;
        <D.25301>:
        if (delta < 0) goto <D.25311>; else goto <D.25312>;
        <D.25311>:
        D.25304 = translated_ranges.zero.upper;
        if (D.25304 != 2147483647) goto <D.25313>; else goto <D.25314>;
        <D.25313>:
        D.25304 = translated_ranges.zero.upper;
        D.25307 = D.25304 + delta;
        D.25304 = translated_ranges.zero.upper;
        if (D.25307 < D.25304) goto <D.25316>; else goto <D.25317>;
        <D.25316>:
        D.25304 = translated_ranges.zero.upper;
        iftmp.40 = D.25304 + delta;
        goto <D.25318>;
        <D.25317>:
        iftmp.40 = -2147483648;
        <D.25318>:
        translated_ranges.zero.upper = iftmp.40;
        <D.25314>:
        <D.25312>:
        <D.25302>:
        if (delta > 0) goto <D.25321>; else goto <D.25319>;
        <D.25321>:
        D.25322 = translated_ranges.variable.lower;
        if (D.25322 != -2147483648) goto <D.25323>; else goto <D.25319>;
        <D.25323>:
        D.25322 = translated_ranges.variable.lower;
        D.25325 = D.25322 + delta;
        D.25322 = translated_ranges.variable.lower;
        if (D.25325 > D.25322) goto <D.25326>; else goto <D.25327>;
        <D.25326>:
        D.25322 = translated_ranges.variable.lower;
        iftmp.41 = D.25322 + delta;
        goto <D.25328>;
        <D.25327>:
        iftmp.41 = 2147483647;
        <D.25328>:
        translated_ranges.variable.lower = iftmp.41;
        goto <D.25320>;
        <D.25319>:
        if (delta < 0) goto <D.25329>; else goto <D.25330>;
        <D.25329>:
        D.25322 = translated_ranges.variable.lower;
        if (D.25322 != 2147483647) goto <D.25331>; else goto <D.25332>;
        <D.25331>:
        D.25322 = translated_ranges.variable.lower;
        D.25325 = D.25322 + delta;
        D.25322 = translated_ranges.variable.lower;
        if (D.25325 < D.25322) goto <D.25334>; else goto <D.25335>;
        <D.25334>:
        D.25322 = translated_ranges.variable.lower;
        iftmp.42 = D.25322 + delta;
        goto <D.25336>;
        <D.25335>:
        iftmp.42 = -2147483648;
        <D.25336>:
        translated_ranges.variable.lower = iftmp.42;
        <D.25332>:
        <D.25330>:
        <D.25320>:
        if (delta > 0) goto <D.25339>; else goto <D.25337>;
        <D.25339>:
        D.25340 = translated_ranges.variable.upper;
        if (D.25340 != -2147483648) goto <D.25341>; else goto <D.25337>;
        <D.25341>:
        D.25340 = translated_ranges.variable.upper;
        D.25343 = D.25340 + delta;
        D.25340 = translated_ranges.variable.upper;
        if (D.25343 > D.25340) goto <D.25344>; else goto <D.25345>;
        <D.25344>:
        D.25340 = translated_ranges.variable.upper;
        iftmp.43 = D.25340 + delta;
        goto <D.25346>;
        <D.25345>:
        iftmp.43 = 2147483647;
        <D.25346>:
        translated_ranges.variable.upper = iftmp.43;
        goto <D.25338>;
        <D.25337>:
        if (delta < 0) goto <D.25347>; else goto <D.25348>;
        <D.25347>:
        D.25340 = translated_ranges.variable.upper;
        if (D.25340 != 2147483647) goto <D.25349>; else goto <D.25350>;
        <D.25349>:
        D.25340 = translated_ranges.variable.upper;
        D.25343 = D.25340 + delta;
        D.25340 = translated_ranges.variable.upper;
        if (D.25343 < D.25340) goto <D.25352>; else goto <D.25353>;
        <D.25352>:
        D.25340 = translated_ranges.variable.upper;
        iftmp.44 = D.25340 + delta;
        goto <D.25354>;
        <D.25353>:
        iftmp.44 = -2147483648;
        <D.25354>:
        translated_ranges.variable.upper = iftmp.44;
        <D.25350>:
        <D.25348>:
        <D.25338>:
        intersect_ranges (ranges, &translated_ranges, 0, relation);
      }
    finally
      {
        translated_ranges = {CLOBBER};
      }
  }
  <D.25282>:
}


print_evaluation_context_ranges (struct MonoRelationsEvaluationRanges * ranges)
{
  int D.25357;
  int D.25358;
  int D.25359;
  int D.25360;

  D.25357 = ranges->zero.lower;
  D.25358 = ranges->zero.upper;
  D.25359 = ranges->variable.lower;
  D.25360 = ranges->variable.upper;
  printf ("(ranges: zero [%d,%d], variable [%d,%d])", D.25357, D.25358, D.25359, D.25360);
}


print_evaluation_context_status (MonoRelationsEvaluationStatus status)
{
  unsigned int D.25364;
  unsigned int D.25369;
  unsigned int D.25374;
  unsigned int D.25379;
  unsigned int D.25384;

  if (status == 0) goto <D.25361>; else goto <D.25362>;
  <D.25361>:
  printf ("EVALUATION_NOT_STARTED");
  goto <D.25363>;
  <D.25362>:
  {
    gboolean print_or;

    print_or = 0;
    printf ("(");
    D.25364 = status & 1;
    if (D.25364 != 0) goto <D.25365>; else goto <D.25366>;
    <D.25365>:
    if (print_or != 0) goto <D.25367>; else goto <D.25368>;
    <D.25367>:
    printf ("|");
    <D.25368>:
    printf ("EVALUATION_IN_PROGRESS");
    print_or = 1;
    <D.25366>:
    D.25369 = status & 2;
    if (D.25369 != 0) goto <D.25370>; else goto <D.25371>;
    <D.25370>:
    if (print_or != 0) goto <D.25372>; else goto <D.25373>;
    <D.25372>:
    printf ("|");
    <D.25373>:
    printf ("EVALUATION_COMPLETED");
    print_or = 1;
    <D.25371>:
    D.25374 = status & 4;
    if (D.25374 != 0) goto <D.25375>; else goto <D.25376>;
    <D.25375>:
    if (print_or != 0) goto <D.25377>; else goto <D.25378>;
    <D.25377>:
    printf ("|");
    <D.25378>:
    printf ("RECURSIVELY_ASCENDING");
    print_or = 1;
    <D.25376>:
    D.25379 = status & 8;
    if (D.25379 != 0) goto <D.25380>; else goto <D.25381>;
    <D.25380>:
    if (print_or != 0) goto <D.25382>; else goto <D.25383>;
    <D.25382>:
    printf ("|");
    <D.25383>:
    printf ("RECURSIVELY_DESCENDING");
    print_or = 1;
    <D.25381>:
    D.25384 = status & 16;
    if (D.25384 != 0) goto <D.25385>; else goto <D.25386>;
    <D.25385>:
    if (print_or != 0) goto <D.25387>; else goto <D.25388>;
    <D.25387>:
    printf ("|");
    <D.25388>:
    printf ("RECURSIVELY_INDEFINITE");
    print_or = 1;
    <D.25386>:
    printf (")");
  }
  <D.25363>:
}


print_evaluation_context (struct MonoRelationsEvaluationContext * context)
{
  <unnamed type> D.25389;
  unsigned int D.25390;
  struct MonoRelationsEvaluationRanges * D.25393;

  printf ("Context status: ");
  D.25389 = context->status;
  print_evaluation_context_status (D.25389);
  D.25389 = context->status;
  D.25390 = D.25389 & 3;
  if (D.25390 != 0) goto <D.25391>; else goto <D.25392>;
  <D.25391>:
  D.25393 = &context->ranges;
  print_evaluation_context_ranges (D.25393);
  <D.25392>:
  printf ("\n");
}


apply_change_to_evaluation_area (struct MonoVariableRelationsEvaluationArea * area, struct MonoAdditionalVariableRelation * change)
{
  <unnamed type> D.25394;
  struct MonoSummarizedValueRelation * D.25397;
  int D.25398;
  unsigned int D.25399;
  unsigned int D.25400;
  struct MonoSummarizedValueRelation * D.25401;
  int D.25403;
  struct MonoSummarizedValueRelation * D.25404;
  struct MonoSummarizedValueRelation * base_relation;

  D.25394 = change->relation.relation;
  if (D.25394 != 7) goto <D.25395>; else goto <D.25396>;
  <D.25395>:
  D.25397 = area->relations;
  D.25398 = change->variable;
  D.25399 = (unsigned int) D.25398;
  D.25400 = D.25399 * 24;
  base_relation = D.25397 + D.25400;
  goto <D.24477>;
  <D.24476>:
  base_relation = base_relation->next;
  <D.24477>:
  D.25401 = base_relation->next;
  if (D.25401 != 0B) goto <D.25402>; else goto <D.24478>;
  <D.25402>:
  D.25401 = base_relation->next;
  D.25403 = D.25401->relation_is_static_definition;
  if (D.25403 != 0) goto <D.24476>; else goto <D.24478>;
  <D.24478>:
  change->insertion_point = base_relation;
  D.25401 = base_relation->next;
  change->relation.next = D.25401;
  D.25404 = &change->relation;
  base_relation->next = D.25404;
  <D.25396>:
}


g_slist_append_mempool (struct MonoMemPool * mp, struct GSList * list, void * data)
{
  struct GSList * D.25407;
  struct GSList * D.25408;
  struct GSList * new_list;
  struct GSList * last;

  new_list = mono_mempool_alloc (mp, 8);
  new_list->data = data;
  new_list->next = 0B;
  if (list != 0B) goto <D.25405>; else goto <D.25406>;
  <D.25405>:
  last = list;
  goto <D.8962>;
  <D.8961>:
  last = last->next;
  <D.8962>:
  D.25407 = last->next;
  if (D.25407 != 0B) goto <D.8961>; else goto <D.8963>;
  <D.8963>:
  last->next = new_list;
  D.25408 = list;
  return D.25408;
  <D.25406>:
  D.25408 = new_list;
  return D.25408;
}


eval_non_null (struct MonoVariableRelationsEvaluationArea * area, int reg)
{
  struct MonoRelationsEvaluationContext * D.25410;
  unsigned int reg.45;
  unsigned int D.25412;
  struct MonoCompile * D.25413;
  unsigned int D.25414;
  int D.25415;
  gboolean D.25416;
  int D.25417;
  _Bool D.25418;
  struct MonoRelationsEvaluationContext * context;

  D.25410 = area->contexts;
  reg.45 = (unsigned int) reg;
  D.25412 = reg.45 * 28;
  context = D.25410 + D.25412;
  D.25410 = area->contexts;
  D.25413 = area->cfg;
  D.25414 = D.25413->next_vreg;
  D.25415 = (int) D.25414;
  clean_contexts (D.25410, D.25415);
  evaluate_relation_with_target_variable (area, reg, reg, 0B);
  D.25417 = context->ranges.zero.lower;
  D.25418 = D.25417 > 0;
  D.25416 = (gboolean) D.25418;
  return D.25416;
}


add_non_null (struct MonoVariableRelationsEvaluationArea * area, struct MonoCompile * cfg, int reg, struct GSList * * check_relations)
{
  struct MonoMemPool * D.25420;
  struct GSList * D.25421;
  struct GSList * D.25422;
  struct MonoAdditionalVariableRelation * rel;

  D.25420 = cfg->mempool;
  rel = mono_mempool_alloc0 (D.25420, 32);
  rel->variable = reg;
  rel->relation.relation = 4;
  rel->relation.related_value.type = 1;
  rel->relation.related_value.value.constant.value = 0;
  apply_change_to_evaluation_area (area, rel);
  D.25420 = cfg->mempool;
  D.25421 = *check_relations;
  D.25422 = g_slist_append_mempool (D.25420, D.25421, rel);
  *check_relations = D.25422;
}


remove_change_from_evaluation_area (struct MonoAdditionalVariableRelation * change)
{
  struct MonoSummarizedValueRelation * D.25423;
  struct MonoSummarizedValueRelation * D.25426;

  D.25423 = change->insertion_point;
  if (D.25423 != 0B) goto <D.25424>; else goto <D.25425>;
  <D.25424>:
  D.25423 = change->insertion_point;
  D.25426 = change->relation.next;
  D.25423->next = D.25426;
  change->relation.next = 0B;
  <D.25425>:
}


