OSDN Git Service

* lib/obj-c++.exp (obj-c++_target_compile): Declare global variable,
[pf3gnuchains/gcc-fork.git] / gcc / df.h
index d684c1e..4382081 100644 (file)
--- a/gcc/df.h
+++ b/gcc/df.h
@@ -1,6 +1,7 @@
 /* Form lists of pseudo register references for autoinc optimization
    for GNU compiler.  This is part of flow optimization.
-   Copyright (C) 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005
+   Free Software Foundation, Inc.
    Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz)
 
 This file is part of GCC.
@@ -37,7 +38,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #define DF_ALL         255
 #define DF_HARD_REGS   1024    /* Mark hard registers.  */
 #define DF_EQUIV_NOTES 2048    /* Mark uses present in EQUIV/EQUAL notes.  */
-#define DF_FOR_REGALLOC        4096    /* If called for the register allocator.  */
+#define DF_SUBREGS     4096    /* Return subregs rather than the inner reg.  */
 
 enum df_ref_type {DF_REF_REG_DEF, DF_REF_REG_USE, DF_REF_REG_MEM_LOAD,
                  DF_REF_REG_MEM_STORE};
@@ -58,23 +59,10 @@ enum df_ref_flags
        independent.  */
     DF_REF_READ_WRITE = 1,
 
-    /* This flag is set on register references inside a subreg on
-       machines which have CANNOT_CHANGE_MODE_CLASS.
-       Note, that this flag can also be set on df_refs representing
-       the REG itself (i.e., one might not see the subreg anymore).
-       Also note, that this flag is set also for hardreg refs, i.e.,
-       you must check yourself if it's a pseudo.  */
-    DF_REF_MODE_CHANGE = 2,
-
     /* This flag is set, if we stripped the subreg from the reference.
        In this case we must make conservative guesses, at what the
        outer mode was.  */
-    DF_REF_STRIPPED = 4,
-
-    /* This flag is set during register allocation if it's okay for
-    the reference's INSN to have one of its operands replaced with a
-    memory reference.  */
-    DF_REF_MEM_OK = 8
+    DF_REF_STRIPPED = 2
   };
 
 
@@ -220,11 +208,9 @@ struct df_map
 ((DF)->regs[REGNUM].uses ? (DF)->regs[REGNUM].uses->ref : 0)
 
 #define DF_REGNO_FIRST_BB(DF, REGNUM) \
-(DF_REGNO_FIRST_DEF (DF, REGNUM) \
-? DF_REF_BB (DF_REGNO_FIRST_DEF (DF, REGNUM)) : 0)
+((DF)->regs[REGNUM].defs ? DF_REF_BB ((DF)->regs[REGNUM].defs->ref) : 0)
 #define DF_REGNO_LAST_BB(DF, REGNUM) \
-(DF_REGNO_LAST_USE (DF, REGNUM) \
-? DF_REF_BB (DF_REGNO_LAST_USE (DF, REGNUM)) : 0)
+((DF)->regs[REGNUM].uses ? DF_REF_BB ((DF)->regs[REGNUM].uses->ref) : 0)
 
 
 /* Macros to access the elements within the insn_info structure table.  */
@@ -248,6 +234,8 @@ extern void df_dump (struct df *, int, FILE *);
 
 /* Functions to modify insns.  */
 
+extern bool df_insn_modified_p (struct df *, rtx);
+
 extern void df_insn_modify (struct df *, basic_block, rtx);
 
 extern rtx df_insn_delete (struct df *, basic_block, rtx);
@@ -293,6 +281,8 @@ extern int df_bb_reg_live_end_p (struct df *, basic_block, rtx);
 
 extern int df_bb_regs_lives_compare (struct df *, basic_block, rtx, rtx);
 
+extern bool df_local_def_available_p (struct df *, struct ref *, struct ref *);
+
 extern rtx df_bb_single_def_use_insn_find (struct df *, basic_block, rtx,
                                           rtx);
 extern struct ref *df_bb_regno_last_use_find (struct df *, basic_block, unsigned int);