loop-iv.c: Include df.h and hashtab.h.
* loop-iv.c: Include df.h and hashtab.h. (enum iv_grd_result): New enum. (DF_REF_IV, DF_REF_IV_SET): New macros. (struct biv_entry): New. (df, bivs): New global variables. (struct insn_info, insn_info, last_def, bivs, max_insn_no, max_reg_no, assign_luids, mark_sets, kill_sets, mark_single_set, simple_set_p): Removed. (clear_iv_info, latch_dominating_def, record_iv, iv_analyze_expr, iv_analyze_result, iv_analyze_def, biv_hash, biv_eq, analyzed_for_bivness_p, record_biv): New functions. (iv_analysis_loop_init, iv_get_reaching_def, simple_reg_p, get_biv_step_1, get_biv_step, iv_analyze_biv, iv_analyze_op, iv_analyze, biv_p, iv_analysis_done): Work with df representation of UD chains. (iv_constant, iv_subreg, iv_extend, iv_mult, iv_shift): Do not set analysed. (iv_number_of_iterations): Use new interface to iv analysis. * loop-unroll.c: Do not include varray.h. (analyze_iv_to_split_insn): Use new interface to iv analysis. * loop-unswitch.c (may_unswitch_on): Ditto. * df.c (df_bitmaps_free): Only work for bbs for that structures are allocated. (df_bb_modify): Realloc tables to the new index. (df_find_use): New function. * df.h (df_find_use): Declare. * optabs.c (expand_unop): Make the mode of the REG_EQUAL node be outmode. * cfgloop.h (struct rtx_iv): Remove analysed field. (iv_get_reaching_def): Removed. (iv_analyze_result, iv_analyze_expr, iv_current_loop_df): Declare. * Makefile.in (loop-unroll.o): Remove VARRAY_H dependency. (loop-iv.o): Add df.h and hashtab.h dependency. * df-problems.c (df_ru_alloc, df_rd_alloc): Fix memory reallocation. From-SVN: r110005
This commit is contained in:
parent
b04c90638b
commit
03fd221518
@ -1,3 +1,41 @@
|
||||
2006-01-20 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
* loop-iv.c: Include df.h and hashtab.h.
|
||||
(enum iv_grd_result): New enum.
|
||||
(DF_REF_IV, DF_REF_IV_SET): New macros.
|
||||
(struct biv_entry): New.
|
||||
(df, bivs): New global variables.
|
||||
(struct insn_info, insn_info, last_def, bivs, max_insn_no, max_reg_no,
|
||||
assign_luids, mark_sets, kill_sets, mark_single_set, simple_set_p):
|
||||
Removed.
|
||||
(clear_iv_info, latch_dominating_def, record_iv, iv_analyze_expr,
|
||||
iv_analyze_result, iv_analyze_def, biv_hash, biv_eq,
|
||||
analyzed_for_bivness_p, record_biv): New functions.
|
||||
(iv_analysis_loop_init, iv_get_reaching_def, simple_reg_p,
|
||||
get_biv_step_1, get_biv_step, iv_analyze_biv, iv_analyze_op,
|
||||
iv_analyze, biv_p, iv_analysis_done): Work with df representation of
|
||||
UD chains.
|
||||
(iv_constant, iv_subreg, iv_extend, iv_mult, iv_shift): Do not set
|
||||
analysed.
|
||||
(iv_number_of_iterations): Use new interface to iv analysis.
|
||||
* loop-unroll.c: Do not include varray.h.
|
||||
(analyze_iv_to_split_insn): Use new interface to iv
|
||||
analysis.
|
||||
* loop-unswitch.c (may_unswitch_on): Ditto.
|
||||
* df.c (df_bitmaps_free): Only work for bbs for that structures are
|
||||
allocated.
|
||||
(df_bb_modify): Realloc tables to the new index.
|
||||
(df_find_use): New function.
|
||||
* df.h (df_find_use): Declare.
|
||||
* optabs.c (expand_unop): Make the mode of the REG_EQUAL node be
|
||||
outmode.
|
||||
* cfgloop.h (struct rtx_iv): Remove analysed field.
|
||||
(iv_get_reaching_def): Removed.
|
||||
(iv_analyze_result, iv_analyze_expr, iv_current_loop_df): Declare.
|
||||
* Makefile.in (loop-unroll.o): Remove VARRAY_H dependency.
|
||||
(loop-iv.o): Add df.h and hashtab.h dependency.
|
||||
* df-problems.c (df_ru_alloc, df_rd_alloc): Fix memory reallocation.
|
||||
|
||||
2006-01-20 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* libgcc2.c (__floatdisf, __floatdidf): Don't use IBM Extended
|
||||
|
@ -2431,7 +2431,7 @@ struct-equiv.o : struct-equiv.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
|
||||
$(REGS_H) $(EMIT_RTL_H)
|
||||
loop-iv.o : loop-iv.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(BASIC_BLOCK_H) \
|
||||
hard-reg-set.h $(CFGLOOP_H) $(EXPR_H) coretypes.h $(TM_H) $(OBSTACK_H) \
|
||||
output.h intl.h
|
||||
output.h intl.h $(DF_H) $(HASHTAB_H)
|
||||
loop-invariant.o : loop-invariant.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
|
||||
$(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(EXPR_H) coretypes.h \
|
||||
$(TM_H) $(TM_P_H) $(FUNCTION_H) $(FLAGS_H) $(DF_H) $(OBSTACK_H) output.h \
|
||||
@ -2447,7 +2447,7 @@ loop-unswitch.o : loop-unswitch.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TM_H) \
|
||||
output.h $(EXPR_H) coretypes.h $(TM_H) $(OBSTACK_H)
|
||||
loop-unroll.o: loop-unroll.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TM_H) \
|
||||
$(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) $(PARAMS_H) \
|
||||
output.h $(EXPR_H) coretypes.h $(TM_H) $(HASHTAB_H) $(RECOG_H) $(VARRAY_H) \
|
||||
output.h $(EXPR_H) coretypes.h $(TM_H) $(HASHTAB_H) $(RECOG_H) \
|
||||
$(OBSTACK_H)
|
||||
dominance.o : dominance.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
|
||||
hard-reg-set.h $(BASIC_BLOCK_H) et-forest.h $(OBSTACK_H) toplev.h
|
||||
|
@ -352,9 +352,6 @@ struct rtx_iv
|
||||
/* The mode the variable iterates in. */
|
||||
enum machine_mode mode;
|
||||
|
||||
/* Whether we have already filled the remaining fields. */
|
||||
unsigned analysed : 1;
|
||||
|
||||
/* Whether the first iteration needs to be handled specially. */
|
||||
unsigned first_special : 1;
|
||||
};
|
||||
@ -404,12 +401,14 @@ struct niter_desc
|
||||
};
|
||||
|
||||
extern void iv_analysis_loop_init (struct loop *);
|
||||
extern rtx iv_get_reaching_def (rtx, rtx);
|
||||
extern bool iv_analyze (rtx, rtx, struct rtx_iv *);
|
||||
extern bool iv_analyze_result (rtx, rtx, struct rtx_iv *);
|
||||
extern bool iv_analyze_expr (rtx, rtx, enum machine_mode, struct rtx_iv *);
|
||||
extern rtx get_iv_value (struct rtx_iv *, rtx);
|
||||
extern bool biv_p (rtx, rtx);
|
||||
extern void find_simple_exit (struct loop *, struct niter_desc *);
|
||||
extern void iv_analysis_done (void);
|
||||
extern struct df *iv_current_loop_df (void);
|
||||
|
||||
extern struct niter_desc *get_simple_loop_desc (struct loop *loop);
|
||||
extern void free_simple_loop_desc (struct loop *loop);
|
||||
|
@ -369,12 +369,12 @@ df_ru_alloc (struct dataflow *dflow, bitmap blocks_to_rescan)
|
||||
}
|
||||
}
|
||||
|
||||
if (problem_data->use_sites_size > reg_size)
|
||||
if (problem_data->use_sites_size < reg_size)
|
||||
{
|
||||
problem_data->use_sites
|
||||
= xrealloc (problem_data->use_sites, reg_size *sizeof (bitmap));
|
||||
memset (problem_data->use_sites, 0,
|
||||
(reg_size - problem_data->use_sites_size) *sizeof (bitmap));
|
||||
= xrealloc (problem_data->use_sites, reg_size * sizeof (bitmap));
|
||||
memset (problem_data->use_sites + problem_data->use_sites_size, 0,
|
||||
(reg_size - problem_data->use_sites_size) * sizeof (bitmap));
|
||||
problem_data->use_sites_size = reg_size;
|
||||
}
|
||||
|
||||
@ -876,11 +876,11 @@ df_rd_alloc (struct dataflow *dflow, bitmap blocks_to_rescan)
|
||||
}
|
||||
}
|
||||
|
||||
if (problem_data->def_sites_size > reg_size)
|
||||
if (problem_data->def_sites_size < reg_size)
|
||||
{
|
||||
problem_data->def_sites
|
||||
= xrealloc (problem_data->def_sites, reg_size *sizeof (bitmap));
|
||||
memset (problem_data->def_sites, 0,
|
||||
memset (problem_data->def_sites + problem_data->def_sites_size, 0,
|
||||
(reg_size - problem_data->def_sites_size) *sizeof (bitmap));
|
||||
problem_data->def_sites_size = reg_size;
|
||||
}
|
||||
|
995
gcc/loop-iv.c
995
gcc/loop-iv.c
File diff suppressed because it is too large
Load Diff
@ -33,7 +33,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
#include "expr.h"
|
||||
#include "hashtab.h"
|
||||
#include "recog.h"
|
||||
#include "varray.h"
|
||||
|
||||
/* This pass performs loop unrolling and peeling. We only perform these
|
||||
optimizations on innermost loops (with single exception) because
|
||||
@ -1670,7 +1669,7 @@ analyze_iv_to_split_insn (rtx insn)
|
||||
if (!biv_p (insn, dest))
|
||||
return NULL;
|
||||
|
||||
ok = iv_analyze (insn, dest, &iv);
|
||||
ok = iv_analyze_result (insn, dest, &iv);
|
||||
gcc_assert (ok);
|
||||
|
||||
if (iv.step == const0_rtx
|
||||
|
@ -172,7 +172,7 @@ unswitch_loops (struct loops *loops)
|
||||
static rtx
|
||||
may_unswitch_on (basic_block bb, struct loop *loop, rtx *cinsn)
|
||||
{
|
||||
rtx test, at, insn, op[2], stest;
|
||||
rtx test, at, op[2], stest;
|
||||
struct rtx_iv iv;
|
||||
unsigned i;
|
||||
enum machine_mode mode;
|
||||
@ -205,8 +205,7 @@ may_unswitch_on (basic_block bb, struct loop *loop, rtx *cinsn)
|
||||
if (CONSTANT_P (op[i]))
|
||||
continue;
|
||||
|
||||
insn = iv_get_reaching_def (at, op[i]);
|
||||
if (!iv_analyze (insn, op[i], &iv))
|
||||
if (!iv_analyze (at, op[i], &iv))
|
||||
return NULL_RTX;
|
||||
if (iv.step != const0_rtx
|
||||
|| iv.first_special)
|
||||
|
@ -2721,7 +2721,7 @@ expand_unop (enum machine_mode mode, optab unoptab, rtx op0, rtx target,
|
||||
|
||||
target = gen_reg_rtx (outmode);
|
||||
emit_libcall_block (insns, target, value,
|
||||
gen_rtx_fmt_e (unoptab->code, mode, op0));
|
||||
gen_rtx_fmt_e (unoptab->code, outmode, op0));
|
||||
|
||||
return target;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user