OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gcc33?expand=0&rev=3
109 lines
4.2 KiB
Diff
109 lines
4.2 KiB
Diff
* Makefile.in (cse.o): Add params.h dependency.
|
|
* cse.c: Include params.h.
|
|
(PATHLENGTH): Removed.
|
|
(struct cse_basic_block_data): Make path array dynamic.
|
|
(cse_end_of_basic_block): Use PARAM_MAX_CSE_PATH_LENGTH instead of PATHLENGTH.
|
|
(cse_main, cse_basic_block): Allocate path array.
|
|
* params.def (PARAM_MAX_CSE_PATH_LENGTH): New.
|
|
|
|
Index: gcc/Makefile.in
|
|
===================================================================
|
|
--- gcc/Makefile.in.orig 2009-11-20 13:04:56.000000000 +0100
|
|
+++ gcc/Makefile.in 2009-11-20 13:05:39.000000000 +0100
|
|
@@ -1520,7 +1520,7 @@ cselib.o : cselib.c $(CONFIG_H) $(SYSTEM
|
|
output.h function.h cselib.h $(GGC_H) $(TM_P_H) gt-cselib.h
|
|
cse.o : cse.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \
|
|
real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h output.h function.h \
|
|
- $(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) $(TIMEVAR_H)
|
|
+ $(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) $(TIMEVAR_H) $(PARAMS_H)
|
|
gcse.o : gcse.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h \
|
|
flags.h real.h insn-config.h ggc.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \
|
|
function.h output.h toplev.h $(TM_P_H) $(PARAMS_H) except.h gt-gcse.h
|
|
Index: gcc/cse.c
|
|
===================================================================
|
|
--- gcc/cse.c.orig 2009-11-20 13:04:56.000000000 +0100
|
|
+++ gcc/cse.c 2009-11-20 13:05:39.000000000 +0100
|
|
@@ -38,6 +38,7 @@ Software Foundation, 59 Temple Place - S
|
|
#include "output.h"
|
|
#include "ggc.h"
|
|
#include "timevar.h"
|
|
+#include "params.h"
|
|
|
|
/* The basic idea of common subexpression elimination is to go
|
|
through the code, keeping a record of expressions that would
|
|
@@ -561,10 +562,6 @@ static struct table_elt *last_jump_equiv
|
|
|
|
static int constant_pool_entries_cost;
|
|
|
|
-/* Define maximum length of a branch path. */
|
|
-
|
|
-#define PATHLENGTH 10
|
|
-
|
|
/* This data describes a block that will be processed by cse_basic_block. */
|
|
|
|
struct cse_basic_block_data
|
|
@@ -588,7 +585,7 @@ struct cse_basic_block_data
|
|
except that it is used when the destination label is not preceded
|
|
by a BARRIER. */
|
|
enum taken {TAKEN, NOT_TAKEN, AROUND} status;
|
|
- } path[PATHLENGTH];
|
|
+ } *path;
|
|
};
|
|
|
|
/* Nonzero if X has the form (PLUS frame-pointer integer). We check for
|
|
@@ -7019,7 +7016,7 @@ cse_end_of_basic_block (insn, data, foll
|
|
In this case invalidate_skipped_block will be called to invalidate any
|
|
registers set in the block when following the jump. */
|
|
|
|
- else if ((follow_jumps || skip_blocks) && path_size < PATHLENGTH - 1
|
|
+ else if ((follow_jumps || skip_blocks) && path_size < PARAM_VALUE (PARAM_MAX_CSE_PATH_LENGTH) - 1
|
|
&& GET_CODE (p) == JUMP_INSN
|
|
&& GET_CODE (PATTERN (p)) == SET
|
|
&& GET_CODE (SET_SRC (PATTERN (p))) == IF_THEN_ELSE
|
|
@@ -7149,6 +7146,9 @@ cse_main (f, nregs, after_loop, file)
|
|
rtx insn = f;
|
|
int i;
|
|
|
|
+ val.path = xmalloc (sizeof (struct branch_path)
|
|
+ * PARAM_VALUE (PARAM_MAX_CSE_PATH_LENGTH));
|
|
+
|
|
cse_jumps_altered = 0;
|
|
recorded_label_ref = 0;
|
|
constant_pool_entries_cost = 0;
|
|
@@ -7272,6 +7272,7 @@ cse_main (f, nregs, after_loop, file)
|
|
end_alias_analysis ();
|
|
free (uid_cuid);
|
|
free (reg_eqv_table);
|
|
+ free (val.path);
|
|
|
|
return cse_jumps_altered || recorded_label_ref;
|
|
}
|
|
@@ -7449,7 +7450,10 @@ cse_basic_block (from, to, next_branch,
|
|
following branches in this case. */
|
|
to_usage = 0;
|
|
val.path_size = 0;
|
|
+ val.path = xmalloc (sizeof (struct branch_path)
|
|
+ * PARAM_VALUE (PARAM_MAX_CSE_PATH_LENGTH));
|
|
cse_end_of_basic_block (insn, &val, 0, 0, 0);
|
|
+ free (val.path);
|
|
|
|
/* If the tables we allocated have enough space left
|
|
to handle all the SETs in the next basic block,
|
|
Index: gcc/params.def
|
|
===================================================================
|
|
--- gcc/params.def.orig 2009-11-20 13:04:56.000000000 +0100
|
|
+++ gcc/params.def 2009-11-20 13:05:39.000000000 +0100
|
|
@@ -294,6 +294,12 @@ DEFPARAM(PARAM_MISS_FALLTHRU_COST,
|
|
"The cost of incorrectly predicted branch that is not taken",
|
|
0)
|
|
|
|
+/* The maximum length of path considered in cse. */
|
|
+DEFPARAM(PARAM_MAX_CSE_PATH_LENGTH,
|
|
+ "max-cse-path-length",
|
|
+ "The maximum length of path considered in cse.",
|
|
+ 10)
|
|
+
|
|
#ifdef ENABLE_GC_ALWAYS_COLLECT
|
|
# define GGC_MIN_EXPAND_DEFAULT 0
|
|
# define GGC_MIN_HEAPSIZE_DEFAULT 0
|