]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
basic-block.h (reg_set_iterator): New.
authorKazu Hirata <kazu@cs.umass.edu>
Mon, 18 Oct 2004 15:11:31 +0000 (15:11 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Mon, 18 Oct 2004 15:11:31 +0000 (15:11 +0000)
* basic-block.h (reg_set_iterator): New.
(EXECUTE_IF_SET_IN_REG_SET): Make it iterator style.
(EXECUTE_IF_AND_COMPL_IN_REG_SET): Likewise.
(EXECUTE_IF_AND_IN_REG_SET): Likewise.
* caller-save.c (save_call_clobbered_regs): Adjust to the new
style.
* cfgcleanup.c (thread_jump): Likewise.
* cfgrtl.c (safe_insert_insn_on_edge): Likewise.
* conflict.c (conflict_graph_compute): Likewise.
* flow.c (verify_local_live_at_start, update_life_info,
initialize_uninitialized_subregs, propagate_one_insn,
init_propagate_block_info, free_propagate_block_info,
propagate_block, dump_regset): Likewise.
* global.c (global_conflicts): Likewise.
* graph.c (start_bb): Likewise.
* local-alloc.c (update_equiv_regs): Likewise.
* loop.c (load_mems): Likewise.
* reload1.c (compute_use_by_pseudos, order_regs_for_reload,
find_reg, finish_spills): Likewise.
* resource.c (mark_target_live_regs): Likewise.
* sched-deps.c (sched_analyze_insn): Likewise.
* sched-rgn.c (sched-rgn.c): Likewise.
* config/frv/frv.c (frv_ifcvt_modify_tests): Likewise.

From-SVN: r89226

16 files changed:
gcc/ChangeLog
gcc/basic-block.h
gcc/caller-save.c
gcc/cfgcleanup.c
gcc/cfgrtl.c
gcc/config/frv/frv.c
gcc/conflict.c
gcc/flow.c
gcc/global.c
gcc/graph.c
gcc/local-alloc.c
gcc/loop.c
gcc/reload1.c
gcc/resource.c
gcc/sched-deps.c
gcc/sched-rgn.c

index 8d7553efbd25e37cb67a52efa15266a1ca3adc92..78896f6d38f4f932b6ea816e7c46957e1a327610 100644 (file)
@@ -1,3 +1,29 @@
+2004-10-18  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * basic-block.h (reg_set_iterator): New.
+       (EXECUTE_IF_SET_IN_REG_SET): Make it iterator style.
+       (EXECUTE_IF_AND_COMPL_IN_REG_SET): Likewise.
+       (EXECUTE_IF_AND_IN_REG_SET): Likewise.
+       * caller-save.c (save_call_clobbered_regs): Adjust to the new
+       style.
+       * cfgcleanup.c (thread_jump): Likewise.
+       * cfgrtl.c (safe_insert_insn_on_edge): Likewise.
+       * conflict.c (conflict_graph_compute): Likewise.
+       * flow.c (verify_local_live_at_start, update_life_info,
+       initialize_uninitialized_subregs, propagate_one_insn,
+       init_propagate_block_info, free_propagate_block_info,
+       propagate_block, dump_regset): Likewise.
+       * global.c (global_conflicts): Likewise.
+       * graph.c (start_bb): Likewise.
+       * local-alloc.c (update_equiv_regs): Likewise.
+       * loop.c (load_mems): Likewise.
+       * reload1.c (compute_use_by_pseudos, order_regs_for_reload,
+       find_reg, finish_spills): Likewise.
+       * resource.c (mark_target_live_regs): Likewise.
+       * sched-deps.c (sched_analyze_insn): Likewise.
+       * sched-rgn.c (sched-rgn.c): Likewise.
+       * config/frv/frv.c (frv_ifcvt_modify_tests): Likewise.
+
 2004-10-18  Jakub Jelinek  <jakub@redhat.com>
 
        * config/i386/i386.md (addqi_1_slp): Test for incdec_operand
index 534fd10364e75f0b9909125baad8bec69206a19a..d9204964eeb2eafaa5384d85b1f38965c7e1e005 100644 (file)
@@ -83,46 +83,24 @@ do {                                                                        \
   reg_set_to_hard_reg_set (&TO, FROM);                                 \
 } while (0)
 
+typedef bitmap_iterator reg_set_iterator;
+
 /* Loop over all registers in REGSET, starting with MIN, setting REGNUM to the
    register number and executing CODE for all registers that are set.  */
-#define EXECUTE_IF_SET_IN_REG_SET(REGSET, MIN, REGNUM, CODE)           \
-  do                                                                   \
-    {                                                                  \
-      bitmap_iterator bi;                                              \
-                                                                       \
-      EXECUTE_IF_SET_IN_BITMAP (REGSET, MIN, REGNUM, bi)               \
-       {                                                               \
-         CODE;                                                         \
-        }                                                              \
-    } while (0)
+#define EXECUTE_IF_SET_IN_REG_SET(REGSET, MIN, REGNUM, RSI)    \
+  EXECUTE_IF_SET_IN_BITMAP (REGSET, MIN, REGNUM, RSI)
 
 /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
    REGNUM to the register number and executing CODE for all registers that are
    set in the first regset and not set in the second.  */
-#define EXECUTE_IF_AND_COMPL_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \
-  do                                                                   \
-    {                                                                  \
-      bitmap_iterator bi;                                              \
-                                                                       \
-      EXECUTE_IF_AND_COMPL_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, bi) \
-       {                                                               \
-         CODE;                                                         \
-        }                                                              \
-    } while (0)
+#define EXECUTE_IF_AND_COMPL_IN_REG_SET(REGSET, MIN, REGNUM, RSI)      \
+  EXECUTE_IF_AND_COMPL_IN_BITMAP (REGSET, MIN, REGNUM, RSI)
 
 /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
    REGNUM to the register number and executing CODE for all registers that are
    set in both regsets.  */
-#define EXECUTE_IF_AND_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \
-  do                                                                   \
-    {                                                                  \
-      bitmap_iterator bi;                                              \
-                                                                       \
-      EXECUTE_IF_AND_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, bi)     \
-       {                                                               \
-         CODE;                                                         \
-        }                                                              \
-    } while (0)
+#define EXECUTE_IF_AND_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, RSI) \
+  EXECUTE_IF_AND_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, RSI)        \
 
 /* Allocate a register set with oballoc.  */
 #define OBSTACK_ALLOC_REG_SET(OBSTACK) BITMAP_OBSTACK_ALLOC (OBSTACK)
index 53446f38ec3101f47b02c20d2a9141dfb91fa36d..55a825efe4e4fd17ac30456448cb4332e911f547 100644 (file)
@@ -410,6 +410,7 @@ save_call_clobbered_regs (void)
            {
              int regno;
              HARD_REG_SET hard_regs_to_save;
+             reg_set_iterator rsi;
 
              /* Use the register life information in CHAIN to compute which
                 regs are live during the call.  */
@@ -425,22 +426,22 @@ save_call_clobbered_regs (void)
              /* Look through all live pseudos, mark their hard registers
                 and choose proper mode for saving.  */
              EXECUTE_IF_SET_IN_REG_SET
-               (&chain->live_throughout, FIRST_PSEUDO_REGISTER, regno,
-                {
-                  int r = reg_renumber[regno];
-                  int nregs;
-                  enum machine_mode mode;
-
-                  gcc_assert (r >= 0);
-                  nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (regno)];
-                  mode = HARD_REGNO_CALLER_SAVE_MODE
-                    (r, nregs, PSEUDO_REGNO_MODE (regno));
-                  if (GET_MODE_BITSIZE (mode)
-                      > GET_MODE_BITSIZE (save_mode[r]))
-                    save_mode[r] = mode;
-                  while (nregs-- > 0)
-                    SET_HARD_REG_BIT (hard_regs_to_save, r + nregs);
-                });
+               (&chain->live_throughout, FIRST_PSEUDO_REGISTER, regno, rsi)
+               {
+                 int r = reg_renumber[regno];
+                 int nregs;
+                 enum machine_mode mode;
+
+                 gcc_assert (r >= 0);
+                 nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (regno)];
+                 mode = HARD_REGNO_CALLER_SAVE_MODE
+                   (r, nregs, PSEUDO_REGNO_MODE (regno));
+                 if (GET_MODE_BITSIZE (mode)
+                     > GET_MODE_BITSIZE (save_mode[r]))
+                   save_mode[r] = mode;
+                 while (nregs-- > 0)
+                   SET_HARD_REG_BIT (hard_regs_to_save, r + nregs);
+               }
 
              /* Record all registers set in this call insn.  These don't need
                 to be saved.  N.B. the call insn might set a subreg of a
index 089c330344521f39744814b94f8e433caa7d7200..8ac3405242f4a3906d8188756c948cbfcf0021b0 100644 (file)
@@ -282,6 +282,7 @@ thread_jump (int mode, edge e, basic_block b)
   int i;
   regset nonequal;
   bool failed = false;
+  reg_set_iterator rsi;
 
   if (BB_FLAGS (b) & BB_NONTHREADABLE_BLOCK)
     return NULL;
@@ -396,7 +397,8 @@ thread_jump (int mode, edge e, basic_block b)
   if (mode & CLEANUP_UPDATE_LIFE)
     AND_REG_SET (nonequal, b->global_live_at_end);
 
-  EXECUTE_IF_SET_IN_REG_SET (nonequal, 0, i, goto failed_exit;);
+  EXECUTE_IF_SET_IN_REG_SET (nonequal, 0, i, rsi)
+    goto failed_exit;
 
   BITMAP_XFREE (nonequal);
   cselib_finish ();
index ee0b468385e2e8fc3f3129ae339ceafde04d9843..5361cd9a75fe42a9f43050da6c20315dc8fd552c 100644 (file)
@@ -1465,6 +1465,7 @@ safe_insert_insn_on_edge (rtx insn, edge e)
   rtx save_regs = NULL_RTX;
   int regno, noccmode;
   enum machine_mode mode;
+  reg_set_iterator rsi;
 
 #ifdef AVOID_CCMODE_COPIES
   noccmode = true;
@@ -1478,7 +1479,7 @@ safe_insert_insn_on_edge (rtx insn, edge e)
   bitmap_operation (killed, killed, e->dest->global_live_at_start,
                    BITMAP_AND);
 
-  EXECUTE_IF_SET_IN_REG_SET (killed, 0, regno,
+  EXECUTE_IF_SET_IN_REG_SET (killed, 0, regno, rsi)
     {
       mode = regno < FIRST_PSEUDO_REGISTER
              ? reg_raw_mode[regno]
@@ -1494,7 +1495,7 @@ safe_insert_insn_on_edge (rtx insn, edge e)
                                                    gen_reg_rtx (mode),
                                                    gen_raw_REG (mode, regno)),
                                   save_regs);
-    });
+    }
 
   if (save_regs)
     {
index b8d69615d8857a300edf78d7a32b8a603fdd00be..0347c16f1e8a12aa0d41c203b6c359a74b342407 100644 (file)
@@ -6679,6 +6679,7 @@ frv_ifcvt_modify_tests (ce_if_block_t *ce_info, rtx *p_true, rtx *p_false)
   enum reg_class cr_class;
   int cc_first;
   int cc_last;
+  reg_set_iterator rsi;
 
   /* Make sure we are only dealing with hard registers.  Also honor the
      -mno-cond-exec switch, and -mno-nested-cond-exec switches if
@@ -6735,11 +6736,11 @@ frv_ifcvt_modify_tests (ce_if_block_t *ce_info, rtx *p_true, rtx *p_false)
 
       /* Remove anything live at the beginning of the join block from being
          available for allocation.  */
-      EXECUTE_IF_SET_IN_REG_SET (join_bb->global_live_at_start, 0, regno,
-                                {
-                                  if (regno < FIRST_PSEUDO_REGISTER)
-                                    CLEAR_HARD_REG_BIT (tmp_reg->regs, regno);
-                                });
+      EXECUTE_IF_SET_IN_REG_SET (join_bb->global_live_at_start, 0, regno, rsi)
+       {
+         if (regno < FIRST_PSEUDO_REGISTER)
+           CLEAR_HARD_REG_BIT (tmp_reg->regs, regno);
+       }
     }
 
   /* Add in all of the blocks in multiple &&/|| blocks to be scanned.  */
@@ -6779,11 +6780,11 @@ frv_ifcvt_modify_tests (ce_if_block_t *ce_info, rtx *p_true, rtx *p_false)
 
       /* Anything live at the beginning of the block is obviously unavailable
          for allocation.  */
-      EXECUTE_IF_SET_IN_REG_SET (bb[j]->global_live_at_start, 0, regno,
-                                {
-                                  if (regno < FIRST_PSEUDO_REGISTER)
-                                    CLEAR_HARD_REG_BIT (tmp_reg->regs, regno);
-                                });
+      EXECUTE_IF_SET_IN_REG_SET (bb[j]->global_live_at_start, 0, regno, rsi)
+       {
+         if (regno < FIRST_PSEUDO_REGISTER)
+           CLEAR_HARD_REG_BIT (tmp_reg->regs, regno);
+       }
 
       /* Loop through the insns in the block.  */
       for (;;)
index 00be29401ba63f8bc37c31532544963235dbbab0..ca9dd95eb2b55b90158b6c789473d98f59edd988 100644 (file)
@@ -446,6 +446,8 @@ conflict_graph_compute (regset regs, partition p)
          /* Are we interested in this insn? */
          if (INSN_P (insn))
            {
+             reg_set_iterator rsi;
+
              /* Determine which regs are set in this insn.  Since
                 we're in SSA form, if a reg is set here it isn't set
                 anywhere else, so this insn is where the reg is born.  */
@@ -459,20 +461,22 @@ conflict_graph_compute (regset regs, partition p)
              /* For every reg born here, add a conflict with every other
                 reg live coming into this insn.  */
              EXECUTE_IF_SET_IN_REG_SET
-               (born, FIRST_PSEUDO_REGISTER, born_reg,
-                {
-                  EXECUTE_IF_SET_IN_REG_SET
-                    (live, FIRST_PSEUDO_REGISTER, live_reg,
-                     {
-                       /* Build the conflict graph in terms of canonical
-                          regnos.  */
-                       int b = partition_find (p, born_reg);
-                       int l = partition_find (p, live_reg);
-
-                       if (b != l)
-                         conflict_graph_add (graph, b, l);
-                     });
-                });
+               (born, FIRST_PSEUDO_REGISTER, born_reg, rsi)
+               {
+                 reg_set_iterator rsj;
+
+                 EXECUTE_IF_SET_IN_REG_SET
+                   (live, FIRST_PSEUDO_REGISTER, live_reg, rsj)
+                   {
+                     /* Build the conflict graph in terms of canonical
+                        regnos.  */
+                     int b = partition_find (p, born_reg);
+                     int l = partition_find (p, live_reg);
+
+                     if (b != l)
+                       conflict_graph_add (graph, b, l);
+                   }
+               }
 
              /* Morgan's algorithm checks the operands of the insn
                 and adds them to the set of live regs.  Instead, we
index 4914d72a4a090b8e2bde36da072ef3191d7960b0..4ea30a79d3d27a034aed3aafb86f3c5fa5ba9a85 100644 (file)
@@ -521,11 +521,12 @@ verify_local_live_at_start (regset new_live_at_start, basic_block bb)
   else
     {
       int i;
+      reg_set_iterator rsi;
 
       /* Find the set of changed registers.  */
       XOR_REG_SET (new_live_at_start, bb->global_live_at_start);
 
-      EXECUTE_IF_SET_IN_REG_SET (new_live_at_start, 0, i,
+      EXECUTE_IF_SET_IN_REG_SET (new_live_at_start, 0, i, rsi)
        {
          /* No registers should die.  */
          if (REGNO_REG_SET_P (bb->global_live_at_start, i))
@@ -540,7 +541,7 @@ verify_local_live_at_start (regset new_live_at_start, basic_block bb)
            }
          /* Verify that the now-live register is wider than word_mode.  */
          verify_wide_reg (i, bb);
-       });
+       }
     }
 }
 
@@ -680,13 +681,15 @@ update_life_info (sbitmap blocks, enum update_life_extent extent, int prop_flags
 
   if (prop_flags & PROP_REG_INFO)
     {
+      reg_set_iterator rsi;
+
       /* The only pseudos that are live at the beginning of the function
         are those that were not set anywhere in the function.  local-alloc
         doesn't know how to handle these correctly, so mark them as not
         local to any one basic block.  */
       EXECUTE_IF_SET_IN_REG_SET (ENTRY_BLOCK_PTR->global_live_at_end,
-                                FIRST_PSEUDO_REGISTER, i,
-                                { REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL; });
+                                FIRST_PSEUDO_REGISTER, i, rsi)
+       REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL;
 
       /* We have a problem with any pseudoreg that lives across the setjmp.
         ANSI says that if a user variable does not change in value between
@@ -697,14 +700,14 @@ update_life_info (sbitmap blocks, enum update_life_extent extent, int prop_flags
         that hard reg where this pseudo is dead, thus clobbering the pseudo.
         Conclusion: such a pseudo must not go in a hard reg.  */
       EXECUTE_IF_SET_IN_REG_SET (regs_live_at_setjmp,
-                                FIRST_PSEUDO_REGISTER, i,
-                                {
-                                  if (regno_reg_rtx[i] != 0)
-                                    {
-                                      REG_LIVE_LENGTH (i) = -1;
-                                      REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
-                                    }
-                                });
+                                FIRST_PSEUDO_REGISTER, i, rsi)
+       {
+         if (regno_reg_rtx[i] != 0)
+           {
+             REG_LIVE_LENGTH (i) = -1;
+             REG_BASIC_BLOCK (i) = REG_BLOCK_UNKNOWN;
+           }
+       }
     }
   if (reg_deaths)
     {
@@ -1369,8 +1372,9 @@ initialize_uninitialized_subregs (void)
     {
       basic_block bb = e->dest;
       regset map = bb->global_live_at_start;
-      EXECUTE_IF_SET_IN_REG_SET (map,
-                                FIRST_PSEUDO_REGISTER, reg,
+      reg_set_iterator rsi;
+
+      EXECUTE_IF_SET_IN_REG_SET (map, FIRST_PSEUDO_REGISTER, reg, rsi)
        {
          int uid = REGNO_FIRST_UID (reg);
          rtx i;
@@ -1398,7 +1402,7 @@ initialize_uninitialized_subregs (void)
                  did_something = 1;
                }
            }
-       });
+       }
     }
 
   if (did_something)
@@ -1671,8 +1675,11 @@ propagate_one_insn (struct propagate_block_info *pbi, rtx insn)
         record this for them.  */
 
       if (CALL_P (insn) && (flags & PROP_REG_INFO))
-       EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i,
-                                  { REG_N_CALLS_CROSSED (i)++; });
+       {
+         reg_set_iterator rsi;
+         EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i, rsi)
+           REG_N_CALLS_CROSSED (i)++;
+       }
 
       /* Record sets.  Do this even for dead instructions, since they
         would have killed the values if they hadn't been deleted.  */
@@ -1878,6 +1885,8 @@ init_propagate_block_info (basic_block bb, regset live, regset local_set,
                = gen_rtx_fmt_ee (inv_cond,
                                  GET_MODE (cond_true), XEXP (cond_true, 0),
                                  XEXP (cond_true, 1));
+             reg_set_iterator rsi;
+
              if (GET_CODE (XEXP (set_src, 1)) == PC)
                {
                  rtx t = cond_false;
@@ -1888,25 +1897,24 @@ init_propagate_block_info (basic_block bb, regset live, regset local_set,
              SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (reg));
 
              /* For each such register, mark it conditionally dead.  */
-             EXECUTE_IF_SET_IN_REG_SET
-               (diff, 0, i,
-                {
-                  struct reg_cond_life_info *rcli;
-                  rtx cond;
-
-                  rcli = xmalloc (sizeof (*rcli));
-
-                  if (REGNO_REG_SET_P (bb_true->global_live_at_start, i))
-                    cond = cond_false;
-                  else
-                    cond = cond_true;
-                  rcli->condition = cond;
-                  rcli->stores = const0_rtx;
-                  rcli->orig_condition = cond;
-
-                  splay_tree_insert (pbi->reg_cond_dead, i,
-                                     (splay_tree_value) rcli);
-                });
+             EXECUTE_IF_SET_IN_REG_SET (diff, 0, i, rsi)
+               {
+                 struct reg_cond_life_info *rcli;
+                 rtx cond;
+
+                 rcli = xmalloc (sizeof (*rcli));
+
+                 if (REGNO_REG_SET_P (bb_true->global_live_at_start, i))
+                   cond = cond_false;
+                 else
+                   cond = cond_true;
+                 rcli->condition = cond;
+                 rcli->stores = const0_rtx;
+                 rcli->orig_condition = cond;
+
+                 splay_tree_insert (pbi->reg_cond_dead, i,
+                                    (splay_tree_value) rcli);
+               }
            }
        }
 
@@ -1966,11 +1974,13 @@ free_propagate_block_info (struct propagate_block_info *pbi)
     {
       int num = pbi->insn_num;
       int i;
+      reg_set_iterator rsi;
 
-      EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i,
-        { REG_LIVE_LENGTH (i) += num - reg_deaths[i];
-          reg_deaths[i] = 0;
-         });
+      EXECUTE_IF_SET_IN_REG_SET (pbi->reg_live, 0, i, rsi)
+       {
+         REG_LIVE_LENGTH (i) += num - reg_deaths[i];
+         reg_deaths[i] = 0;
+       }
     }
   if (pbi->reg_next_use)
     free (pbi->reg_next_use);
@@ -2009,11 +2019,12 @@ propagate_block (basic_block bb, regset live, regset local_set,
   if (flags & PROP_REG_INFO)
     {
       int i;
+      reg_set_iterator rsi;
 
       /* Process the regs live at the end of the block.
         Mark them as not local to any one basic block.  */
-      EXECUTE_IF_SET_IN_REG_SET (live, 0, i,
-                                { REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL; });
+      EXECUTE_IF_SET_IN_REG_SET (live, 0, i, rsi)
+       REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL;
     }
 
   /* Scan the block an insn at a time from end to beginning.  */
@@ -4135,19 +4146,21 @@ void
 dump_regset (regset r, FILE *outf)
 {
   int i;
+  reg_set_iterator rsi;
+
   if (r == NULL)
     {
       fputs (" (nil)", outf);
       return;
     }
 
-  EXECUTE_IF_SET_IN_REG_SET (r, 0, i,
+  EXECUTE_IF_SET_IN_REG_SET (r, 0, i, rsi)
     {
       fprintf (outf, " %d", i);
       if (i < FIRST_PSEUDO_REGISTER)
        fprintf (outf, " [%s]",
                 reg_names[i]);
-    });
+    }
 }
 
 /* Print a human-readable representation of R on the standard error
index 424bdad73f5ad8e7b8b80059dde03900328f2dd1..6892fdc3c6c69ad7b52b61ff474b8cb063612652 100644 (file)
@@ -700,20 +700,20 @@ global_conflicts (void)
       {
        regset old = b->global_live_at_start;
        int ax = 0;
+       reg_set_iterator rsi;
 
        REG_SET_TO_HARD_REG_SET (hard_regs_live, old);
-       EXECUTE_IF_SET_IN_REG_SET (old, FIRST_PSEUDO_REGISTER, i,
-                                  {
-                                    int a = reg_allocno[i];
-                                    if (a >= 0)
-                                      {
-                                        SET_ALLOCNO_LIVE (a);
-                                        block_start_allocnos[ax++] = a;
-                                      }
-                                    else if ((a = reg_renumber[i]) >= 0)
-                                      mark_reg_live_nc
-                                        (a, PSEUDO_REGNO_MODE (i));
-                                  });
+       EXECUTE_IF_SET_IN_REG_SET (old, FIRST_PSEUDO_REGISTER, i, rsi)
+         {
+           int a = reg_allocno[i];
+           if (a >= 0)
+             {
+               SET_ALLOCNO_LIVE (a);
+               block_start_allocnos[ax++] = a;
+             }
+           else if ((a = reg_renumber[i]) >= 0)
+             mark_reg_live_nc (a, PSEUDO_REGNO_MODE (i));
+         }
 
        /* Record that each allocno now live conflicts with each hard reg
           now live.
index cd232db985a9c333d92095a1d9674e6e76a45ea0..e60e2f6799b9ded12e8104e2cfbc4b2bb1b1ca08 100644 (file)
@@ -66,6 +66,10 @@ graph: { title: \"%s\"\nfolding: 1\nhidden: 2\nnode: { title: \"%s.0\" }\n",
 static void
 start_bb (FILE *fp, int bb)
 {
+#if 0
+  reg_set_iterator rsi;
+#endif
+
   switch (graph_dump_format)
     {
     case vcg:
@@ -83,13 +87,12 @@ label: \"basic block %d",
 
   /* Print the live-at-start register list.  */
   fputc ('\n', fp);
-  EXECUTE_IF_SET_IN_REG_SET (basic_block_live_at_start[bb], 0, i,
-                            {
-                              fprintf (fp, " %d", i);
-                              if (i < FIRST_PSEUDO_REGISTER)
-                                fprintf (fp, " [%s]",
-                                         reg_names[i]);
-                            });
+  EXECUTE_IF_SET_IN_REG_SET (basic_block_live_at_start[bb], 0, i, rsi)
+    {
+      fprintf (fp, " %d", i);
+      if (i < FIRST_PSEUDO_REGISTER)
+       fprintf (fp, " [%s]", reg_names[i]);
+    }
 #endif
 
   switch (graph_dump_format)
index 64db8c4258f692a483678220879bda070b8ddffe..ebda9dd88400925d10d7449e7b6a9c6b4000e771 100644 (file)
@@ -1128,14 +1128,17 @@ update_equiv_regs (void)
            }
        }
       else
-       EXECUTE_IF_SET_IN_REG_SET (&cleared_regs, 0, j,
-         {
-           FOR_EACH_BB (bb)
-             {
-               CLEAR_REGNO_REG_SET (bb->global_live_at_start, j);
-               CLEAR_REGNO_REG_SET (bb->global_live_at_end, j);
-             }
-         });
+       {
+         reg_set_iterator rsi;
+         EXECUTE_IF_SET_IN_REG_SET (&cleared_regs, 0, j, rsi)
+           {
+             FOR_EACH_BB (bb)
+               {
+                 CLEAR_REGNO_REG_SET (bb->global_live_at_start, j);
+                 CLEAR_REGNO_REG_SET (bb->global_live_at_end, j);
+               }
+           }
+       }
     }
 
   /* Clean up.  */
index 0f62789cab28de171634dab320e620f072cc34b1..a573616d0e1d9dc7ba80929a584501227fc92f8c 100644 (file)
@@ -11242,6 +11242,7 @@ load_mems (const struct loop *loop)
          rtx best = mem;
          int j;
          struct elt_loc_list *const_equiv = 0;
+         reg_set_iterator rsi;
 
          if (e)
            {
@@ -11320,17 +11321,17 @@ load_mems (const struct loop *loop)
             data flow, and enables {basic,general}_induction_var to find
             more bivs/givs.  */
          EXECUTE_IF_SET_IN_REG_SET
-           (&load_copies, FIRST_PSEUDO_REGISTER, j,
-            {
-              try_copy_prop (loop, reg, j);
-            });
+           (&load_copies, FIRST_PSEUDO_REGISTER, j, rsi)
+           {
+             try_copy_prop (loop, reg, j);
+           }
          CLEAR_REG_SET (&load_copies);
 
          EXECUTE_IF_SET_IN_REG_SET
-           (&store_copies, FIRST_PSEUDO_REGISTER, j,
-            {
-              try_swap_copy_prop (loop, reg, j);
-            });
+           (&store_copies, FIRST_PSEUDO_REGISTER, j, rsi)
+           {
+             try_swap_copy_prop (loop, reg, j);
+           }
          CLEAR_REG_SET (&store_copies);
        }
     }
index 7fc23bc9a71243295b7aa1f6b1c26d4684cfd184..e35f1210c0ca3cd9692752c1bb4c020a937b62c4 100644 (file)
@@ -523,28 +523,28 @@ void
 compute_use_by_pseudos (HARD_REG_SET *to, regset from)
 {
   unsigned int regno;
+  reg_set_iterator rsi;
 
-  EXECUTE_IF_SET_IN_REG_SET
-    (from, FIRST_PSEUDO_REGISTER, regno,
-     {
-       int r = reg_renumber[regno];
-       int nregs;
-
-       if (r < 0)
-        {
-          /* reload_combine uses the information from
-             BASIC_BLOCK->global_live_at_start, which might still
-             contain registers that have not actually been allocated
-             since they have an equivalence.  */
-          gcc_assert (reload_completed);
-        }
-       else
-        {
-          nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (regno)];
-          while (nregs-- > 0)
-            SET_HARD_REG_BIT (*to, r + nregs);
-        }
-     });
+  EXECUTE_IF_SET_IN_REG_SET (from, FIRST_PSEUDO_REGISTER, regno, rsi)
+    {
+      int r = reg_renumber[regno];
+      int nregs;
+
+      if (r < 0)
+       {
+         /* reload_combine uses the information from
+            BASIC_BLOCK->global_live_at_start, which might still
+            contain registers that have not actually been allocated
+            since they have an equivalence.  */
+         gcc_assert (reload_completed);
+       }
+      else
+       {
+         nregs = hard_regno_nregs[r][PSEUDO_REGNO_MODE (regno)];
+         while (nregs-- > 0)
+           SET_HARD_REG_BIT (*to, r + nregs);
+       }
+    }
 }
 
 /* Replace all pseudos found in LOC with their corresponding
@@ -1593,6 +1593,7 @@ order_regs_for_reload (struct insn_chain *chain)
   int i;
   HARD_REG_SET used_by_pseudos;
   HARD_REG_SET used_by_pseudos2;
+  reg_set_iterator rsi;
 
   COPY_HARD_REG_SET (bad_spill_regs, fixed_reg_set);
 
@@ -1613,15 +1614,15 @@ order_regs_for_reload (struct insn_chain *chain)
   CLEAR_REG_SET (&pseudos_counted);
 
   EXECUTE_IF_SET_IN_REG_SET
-    (&chain->live_throughout, FIRST_PSEUDO_REGISTER, i,
-     {
-       count_pseudo (i);
-     });
+    (&chain->live_throughout, FIRST_PSEUDO_REGISTER, i, rsi)
+    {
+      count_pseudo (i);
+    }
   EXECUTE_IF_SET_IN_REG_SET
-    (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, i,
-     {
-       count_pseudo (i);
-     });
+    (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, i, rsi)
+    {
+      count_pseudo (i);
+    }
   CLEAR_REG_SET (&pseudos_counted);
 }
 \f
@@ -1667,6 +1668,7 @@ find_reg (struct insn_chain *chain, int order)
   int k;
   HARD_REG_SET not_usable;
   HARD_REG_SET used_by_other_reload;
+  reg_set_iterator rsi;
 
   COPY_HARD_REG_SET (not_usable, bad_spill_regs);
   IOR_HARD_REG_SET (not_usable, bad_spill_regs_global);
@@ -1735,16 +1737,16 @@ find_reg (struct insn_chain *chain, int order)
   rl->regno = best_reg;
 
   EXECUTE_IF_SET_IN_REG_SET
-    (&chain->live_throughout, FIRST_PSEUDO_REGISTER, j,
-     {
-       count_spilled_pseudo (best_reg, rl->nregs, j);
-     });
+    (&chain->live_throughout, FIRST_PSEUDO_REGISTER, j, rsi)
+    {
+      count_spilled_pseudo (best_reg, rl->nregs, j);
+    }
 
   EXECUTE_IF_SET_IN_REG_SET
-    (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, j,
-     {
-       count_spilled_pseudo (best_reg, rl->nregs, j);
-     });
+    (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, j, rsi)
+    {
+      count_spilled_pseudo (best_reg, rl->nregs, j);
+    }
 
   for (i = 0; i < rl->nregs; i++)
     {
@@ -3552,6 +3554,7 @@ finish_spills (int global)
   struct insn_chain *chain;
   int something_changed = 0;
   int i;
+  reg_set_iterator rsi;
 
   /* Build the spill_regs array for the function.  */
   /* If there are some registers still to eliminate and one of the spill regs
@@ -3578,20 +3581,19 @@ finish_spills (int global)
     else
       spill_reg_order[i] = -1;
 
-  EXECUTE_IF_SET_IN_REG_SET
-    (&spilled_pseudos, FIRST_PSEUDO_REGISTER, i,
-     {
-       /* Record the current hard register the pseudo is allocated to in
-         pseudo_previous_regs so we avoid reallocating it to the same
-         hard reg in a later pass.  */
-       gcc_assert (reg_renumber[i] >= 0);
-
-       SET_HARD_REG_BIT (pseudo_previous_regs[i], reg_renumber[i]);
-       /* Mark it as no longer having a hard register home.  */
-       reg_renumber[i] = -1;
-       /* We will need to scan everything again.  */
-       something_changed = 1;
-     });
+  EXECUTE_IF_SET_IN_REG_SET (&spilled_pseudos, FIRST_PSEUDO_REGISTER, i, rsi)
+    {
+      /* Record the current hard register the pseudo is allocated to in
+        pseudo_previous_regs so we avoid reallocating it to the same
+        hard reg in a later pass.  */
+      gcc_assert (reg_renumber[i] >= 0);
+
+      SET_HARD_REG_BIT (pseudo_previous_regs[i], reg_renumber[i]);
+      /* Mark it as no longer having a hard register home.  */
+      reg_renumber[i] = -1;
+      /* We will need to scan everything again.  */
+      something_changed = 1;
+    }
 
   /* Retry global register allocation if possible.  */
   if (global)
@@ -3603,17 +3605,17 @@ finish_spills (int global)
       for (chain = insns_need_reload; chain; chain = chain->next_need_reload)
        {
          EXECUTE_IF_SET_IN_REG_SET
-           (&chain->live_throughout, FIRST_PSEUDO_REGISTER, i,
-            {
-              ior_hard_reg_set (pseudo_forbidden_regs + i,
-                                &chain->used_spill_regs);
-            });
+           (&chain->live_throughout, FIRST_PSEUDO_REGISTER, i, rsi)
+           {
+             ior_hard_reg_set (pseudo_forbidden_regs + i,
+                               &chain->used_spill_regs);
+           }
          EXECUTE_IF_SET_IN_REG_SET
-           (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, i,
-            {
-              ior_hard_reg_set (pseudo_forbidden_regs + i,
-                                &chain->used_spill_regs);
-            });
+           (&chain->dead_or_set, FIRST_PSEUDO_REGISTER, i, rsi)
+           {
+             ior_hard_reg_set (pseudo_forbidden_regs + i,
+                               &chain->used_spill_regs);
+           }
        }
 
       /* Retry allocating the spilled pseudos.  For each reg, merge the
index 7d6bbb759c5be8e62c2cbae4686d77b384b441ea..08e940cd01c5d6a0ff74c3b3f9dc0efd57d1717f 100644 (file)
@@ -971,6 +971,7 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
       unsigned int j;
       unsigned int regno;
       rtx start_insn, stop_insn;
+      reg_set_iterator rsi;
 
       /* Compute hard regs live at start of block -- this is the real hard regs
         marked live, plus live pseudo regs that have been renumbered to
@@ -978,19 +979,17 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
 
       REG_SET_TO_HARD_REG_SET (current_live_regs, regs_live);
 
-      EXECUTE_IF_SET_IN_REG_SET
-       (regs_live, FIRST_PSEUDO_REGISTER, i,
-        {
-          if (reg_renumber[i] >= 0)
-            {
-              regno = reg_renumber[i];
-              for (j = regno;
-                   j < regno + hard_regno_nregs[regno]
-                                               [PSEUDO_REGNO_MODE (i)];
-                   j++)
-                SET_HARD_REG_BIT (current_live_regs, j);
-            }
-        });
+      EXECUTE_IF_SET_IN_REG_SET (regs_live, FIRST_PSEUDO_REGISTER, i, rsi)
+       {
+         if (reg_renumber[i] >= 0)
+           {
+             regno = reg_renumber[i];
+             for (j = regno;
+                  j < regno + hard_regno_nregs[regno][PSEUDO_REGNO_MODE (i)];
+                  j++)
+               SET_HARD_REG_BIT (current_live_regs, j);
+           }
+       }
 
       /* Get starting and ending insn, handling the case where each might
         be a SEQUENCE.  */
index 6e68bde56bd7533220e948de0fdab0764b929c99..1df1b47facb750a598862458caa1be0a62eaec30 100644 (file)
@@ -822,6 +822,7 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
   RTX_CODE code = GET_CODE (x);
   rtx link;
   int i;
+  reg_set_iterator rsi;
 
   if (code == COND_EXEC)
     {
@@ -895,14 +896,14 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
          (*current_sched_info->compute_jump_reg_dependencies)
            (insn, &deps->reg_conditional_sets, &tmp_uses, &tmp_sets);
          /* Make latency of jump equal to 0 by using anti-dependence.  */
-         EXECUTE_IF_SET_IN_REG_SET (&tmp_uses, 0, i,
+         EXECUTE_IF_SET_IN_REG_SET (&tmp_uses, 0, i, rsi)
            {
              struct deps_reg *reg_last = &deps->reg_last[i];
              add_dependence_list (insn, reg_last->sets, REG_DEP_ANTI);
              add_dependence_list (insn, reg_last->clobbers, REG_DEP_ANTI);
              reg_last->uses_length++;
              reg_last->uses = alloc_INSN_LIST (insn, reg_last->uses);
-           });
+           }
          IOR_REG_SET (reg_pending_sets, &tmp_sets);
 
          CLEAR_REG_SET (&tmp_uses);
@@ -975,7 +976,7 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
          real, so we use anti-dependence here.  */
       if (GET_CODE (PATTERN (insn)) == COND_EXEC)
        {
-         EXECUTE_IF_SET_IN_REG_SET (&deps->reg_last_in_use, 0, i,
+         EXECUTE_IF_SET_IN_REG_SET (&deps->reg_last_in_use, 0, i, rsi)
            {
              struct deps_reg *reg_last = &deps->reg_last[i];
              add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI);
@@ -985,11 +986,11 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
              add_dependence_list
                (insn, reg_last->clobbers,
                 reg_pending_barrier == TRUE_BARRIER ? 0 : REG_DEP_ANTI);
-           });
+           }
        }
       else
        {
-         EXECUTE_IF_SET_IN_REG_SET (&deps->reg_last_in_use, 0, i,
+         EXECUTE_IF_SET_IN_REG_SET (&deps->reg_last_in_use, 0, i, rsi)
            {
              struct deps_reg *reg_last = &deps->reg_last[i];
              add_dependence_list_and_free (insn, &reg_last->uses,
@@ -1002,7 +1003,7 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
                 reg_pending_barrier == TRUE_BARRIER ? 0 : REG_DEP_ANTI);
              reg_last->uses_length = 0;
              reg_last->clobbers_length = 0;
-           });
+           }
        }
 
       for (i = 0; i < deps->max_reg; i++)
@@ -1022,23 +1023,23 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
         of the lists.  */
       if (GET_CODE (PATTERN (insn)) == COND_EXEC)
        {
-         EXECUTE_IF_SET_IN_REG_SET (reg_pending_uses, 0, i,
+         EXECUTE_IF_SET_IN_REG_SET (reg_pending_uses, 0, i, rsi)
            {
              struct deps_reg *reg_last = &deps->reg_last[i];
              add_dependence_list (insn, reg_last->sets, 0);
              add_dependence_list (insn, reg_last->clobbers, 0);
              reg_last->uses = alloc_INSN_LIST (insn, reg_last->uses);
              reg_last->uses_length++;
-           });
-         EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i,
+           }
+         EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i, rsi)
            {
              struct deps_reg *reg_last = &deps->reg_last[i];
              add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT);
              add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI);
              reg_last->clobbers = alloc_INSN_LIST (insn, reg_last->clobbers);
              reg_last->clobbers_length++;
-           });
-         EXECUTE_IF_SET_IN_REG_SET (reg_pending_sets, 0, i,
+           }
+         EXECUTE_IF_SET_IN_REG_SET (reg_pending_sets, 0, i, rsi)
            {
              struct deps_reg *reg_last = &deps->reg_last[i];
              add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT);
@@ -1046,19 +1047,19 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
              add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI);
              reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets);
              SET_REGNO_REG_SET (&deps->reg_conditional_sets, i);
-           });
+           }
        }
       else
        {
-         EXECUTE_IF_SET_IN_REG_SET (reg_pending_uses, 0, i,
+         EXECUTE_IF_SET_IN_REG_SET (reg_pending_uses, 0, i, rsi)
            {
              struct deps_reg *reg_last = &deps->reg_last[i];
              add_dependence_list (insn, reg_last->sets, 0);
              add_dependence_list (insn, reg_last->clobbers, 0);
              reg_last->uses_length++;
              reg_last->uses = alloc_INSN_LIST (insn, reg_last->uses);
-           });
-         EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i,
+           }
+         EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i, rsi)
            {
              struct deps_reg *reg_last = &deps->reg_last[i];
              if (reg_last->uses_length > MAX_PENDING_LIST_LENGTH
@@ -1081,8 +1082,8 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
                }
              reg_last->clobbers_length++;
              reg_last->clobbers = alloc_INSN_LIST (insn, reg_last->clobbers);
-           });
-         EXECUTE_IF_SET_IN_REG_SET (reg_pending_sets, 0, i,
+           }
+         EXECUTE_IF_SET_IN_REG_SET (reg_pending_sets, 0, i, rsi)
            {
              struct deps_reg *reg_last = &deps->reg_last[i];
              add_dependence_list_and_free (insn, &reg_last->sets,
@@ -1095,7 +1096,7 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
              reg_last->uses_length = 0;
              reg_last->clobbers_length = 0;
              CLEAR_REGNO_REG_SET (&deps->reg_conditional_sets, i);
-           });
+           }
        }
 
       IOR_REG_SET (&deps->reg_last_in_use, reg_pending_uses);
@@ -1461,6 +1462,7 @@ void
 free_deps (struct deps *deps)
 {
   int i;
+  reg_set_iterator rsi;
 
   free_INSN_LIST_list (&deps->pending_read_insns);
   free_EXPR_LIST_list (&deps->pending_read_mems);
@@ -1471,7 +1473,7 @@ free_deps (struct deps *deps)
   /* Without the EXECUTE_IF_SET, this loop is executed max_reg * nr_regions
      times.  For a testcase with 42000 regs and 8000 small basic blocks,
      this loop accounted for nearly 60% (84 sec) of the total -O2 runtime.  */
-  EXECUTE_IF_SET_IN_REG_SET (&deps->reg_last_in_use, 0, i,
+  EXECUTE_IF_SET_IN_REG_SET (&deps->reg_last_in_use, 0, i, rsi)
     {
       struct deps_reg *reg_last = &deps->reg_last[i];
       if (reg_last->uses)
@@ -1480,7 +1482,7 @@ free_deps (struct deps *deps)
        free_INSN_LIST_list (&reg_last->sets);
       if (reg_last->clobbers)
        free_INSN_LIST_list (&reg_last->clobbers);
-    });
+    }
   CLEAR_REG_SET (&deps->reg_last_in_use);
   CLEAR_REG_SET (&deps->reg_conditional_sets);
 
index 50b48c24a0f2930428b4e67651cb456ac469f598..be1351980df1b6b16c2ca0997c3717905259c91e 100644 (file)
@@ -1987,6 +1987,7 @@ propagate_deps (int bb, struct deps *pred_deps)
     {
       struct deps *succ_deps;
       int reg;
+      reg_set_iterator rsi;
 
       /* Only bbs "below" bb, in the same region, are interesting.  */
       if (e->dest == EXIT_BLOCK_PTR
@@ -1997,7 +1998,7 @@ propagate_deps (int bb, struct deps *pred_deps)
       succ_deps = bb_deps + BLOCK_TO_BB (e->dest->index);
 
       /* The reg_last lists are inherited by successor.  */
-      EXECUTE_IF_SET_IN_REG_SET (&pred_deps->reg_last_in_use, 0, reg,
+      EXECUTE_IF_SET_IN_REG_SET (&pred_deps->reg_last_in_use, 0, reg, rsi)
        {
          struct deps_reg *pred_rl = &pred_deps->reg_last[reg];
          struct deps_reg *succ_rl = &succ_deps->reg_last[reg];
@@ -2008,7 +2009,7 @@ propagate_deps (int bb, struct deps *pred_deps)
                                                succ_rl->clobbers);
          succ_rl->uses_length += pred_rl->uses_length;
          succ_rl->clobbers_length += pred_rl->clobbers_length;
-       });
+       }
       IOR_REG_SET (&succ_deps->reg_last_in_use, &pred_deps->reg_last_in_use);
 
       /* Mem read/write lists are inherited by successor.  */