Commit ec7f796e by Martin Liska Committed by Martin Liska

GCSE: Use HOST_WIDE_INT instead of int (PR rtl-optimization/79574).

2017-03-03  Martin Liska  <mliska@suse.cz>

	PR rtl-optimization/79574
	* gcse.c (struct gcse_expr): Use HOST_WIDE_INT instead of int.
	(hash_scan_set): Likewise.
	(dump_hash_table): Likewise.
	(hoist_code): Likewise.
2017-03-03  Martin Liska  <mliska@suse.cz>

	PR rtl-optimization/79574
	* gcc.dg/pr79574-2.c: New test.

From-SVN: r245868
parent 98fa4d3c
2017-03-03 Martin Liska <mliska@suse.cz>
PR rtl-optimization/79574
* gcse.c (struct gcse_expr): Use HOST_WIDE_INT instead of int.
(hash_scan_set): Likewise.
(dump_hash_table): Likewise.
(hoist_code): Likewise.
2017-03-03 Richard Biener <rguenther@suse.de> 2017-03-03 Richard Biener <rguenther@suse.de>
* fixed-value.c (fixed_from_string): Restore use of elt (1) * fixed-value.c (fixed_from_string): Restore use of elt (1)
......
...@@ -281,7 +281,7 @@ struct gcse_expr ...@@ -281,7 +281,7 @@ struct gcse_expr
to keep register pressure under control. to keep register pressure under control.
A value of "0" removes restrictions on how far the expression can A value of "0" removes restrictions on how far the expression can
travel. */ travel. */
int max_distance; HOST_WIDE_INT max_distance;
}; };
/* Occurrence of an expression. /* Occurrence of an expression.
...@@ -458,7 +458,7 @@ static int oprs_unchanged_p (const_rtx, const rtx_insn *, int); ...@@ -458,7 +458,7 @@ static int oprs_unchanged_p (const_rtx, const rtx_insn *, int);
static int oprs_anticipatable_p (const_rtx, const rtx_insn *); static int oprs_anticipatable_p (const_rtx, const rtx_insn *);
static int oprs_available_p (const_rtx, const rtx_insn *); static int oprs_available_p (const_rtx, const rtx_insn *);
static void insert_expr_in_table (rtx, machine_mode, rtx_insn *, int, int, static void insert_expr_in_table (rtx, machine_mode, rtx_insn *, int, int,
int, struct gcse_hash_table_d *); HOST_WIDE_INT, struct gcse_hash_table_d *);
static unsigned int hash_expr (const_rtx, machine_mode, int *, int); static unsigned int hash_expr (const_rtx, machine_mode, int *, int);
static void record_last_reg_set_info (rtx_insn *, int); static void record_last_reg_set_info (rtx_insn *, int);
static void record_last_mem_set_info (rtx_insn *); static void record_last_mem_set_info (rtx_insn *);
...@@ -488,8 +488,10 @@ static void alloc_code_hoist_mem (int, int); ...@@ -488,8 +488,10 @@ static void alloc_code_hoist_mem (int, int);
static void free_code_hoist_mem (void); static void free_code_hoist_mem (void);
static void compute_code_hoist_vbeinout (void); static void compute_code_hoist_vbeinout (void);
static void compute_code_hoist_data (void); static void compute_code_hoist_data (void);
static int should_hoist_expr_to_dom (basic_block, struct gcse_expr *, basic_block, static int should_hoist_expr_to_dom (basic_block, struct gcse_expr *,
sbitmap, int, int *, enum reg_class, basic_block,
sbitmap, HOST_WIDE_INT, int *,
enum reg_class,
int *, bitmap, rtx_insn *); int *, bitmap, rtx_insn *);
static int hoist_code (void); static int hoist_code (void);
static enum reg_class get_regno_pressure_class (int regno, int *nregs); static enum reg_class get_regno_pressure_class (int regno, int *nregs);
...@@ -743,7 +745,7 @@ static basic_block current_bb; ...@@ -743,7 +745,7 @@ static basic_block current_bb;
GCSE. */ GCSE. */
static int static int
want_to_gcse_p (rtx x, machine_mode mode, int *max_distance_ptr) want_to_gcse_p (rtx x, machine_mode mode, HOST_WIDE_INT *max_distance_ptr)
{ {
#ifdef STACK_REGS #ifdef STACK_REGS
/* On register stack architectures, don't GCSE constants from the /* On register stack architectures, don't GCSE constants from the
...@@ -1115,7 +1117,8 @@ expr_equiv_p (const_rtx x, const_rtx y) ...@@ -1115,7 +1117,8 @@ expr_equiv_p (const_rtx x, const_rtx y)
static void static void
insert_expr_in_table (rtx x, machine_mode mode, rtx_insn *insn, insert_expr_in_table (rtx x, machine_mode mode, rtx_insn *insn,
int antic_p, int antic_p,
int avail_p, int max_distance, struct gcse_hash_table_d *table) int avail_p, HOST_WIDE_INT max_distance,
struct gcse_hash_table_d *table)
{ {
int found, do_not_record_p; int found, do_not_record_p;
unsigned int hash; unsigned int hash;
...@@ -1231,7 +1234,7 @@ hash_scan_set (rtx set, rtx_insn *insn, struct gcse_hash_table_d *table) ...@@ -1231,7 +1234,7 @@ hash_scan_set (rtx set, rtx_insn *insn, struct gcse_hash_table_d *table)
else if (REG_P (dest)) else if (REG_P (dest))
{ {
unsigned int regno = REGNO (dest); unsigned int regno = REGNO (dest);
int max_distance = 0; HOST_WIDE_INT max_distance = 0;
/* See if a REG_EQUAL note shows this equivalent to a simpler expression. /* See if a REG_EQUAL note shows this equivalent to a simpler expression.
...@@ -1300,7 +1303,7 @@ hash_scan_set (rtx set, rtx_insn *insn, struct gcse_hash_table_d *table) ...@@ -1300,7 +1303,7 @@ hash_scan_set (rtx set, rtx_insn *insn, struct gcse_hash_table_d *table)
else if (flag_gcse_las && REG_P (src) && MEM_P (dest)) else if (flag_gcse_las && REG_P (src) && MEM_P (dest))
{ {
unsigned int regno = REGNO (src); unsigned int regno = REGNO (src);
int max_distance = 0; HOST_WIDE_INT max_distance = 0;
/* Only record sets of pseudo-regs in the hash table. */ /* Only record sets of pseudo-regs in the hash table. */
if (regno >= FIRST_PSEUDO_REGISTER if (regno >= FIRST_PSEUDO_REGISTER
...@@ -1412,7 +1415,8 @@ dump_hash_table (FILE *file, const char *name, struct gcse_hash_table_d *table) ...@@ -1412,7 +1415,8 @@ dump_hash_table (FILE *file, const char *name, struct gcse_hash_table_d *table)
if (flat_table[i] != 0) if (flat_table[i] != 0)
{ {
expr = flat_table[i]; expr = flat_table[i];
fprintf (file, "Index %d (hash value %d; max distance %d)\n ", fprintf (file, "Index %d (hash value %d; max distance "
HOST_WIDE_INT_PRINT_DEC ")\n ",
expr->bitmap_index, hash_val[i], expr->max_distance); expr->bitmap_index, hash_val[i], expr->max_distance);
print_rtl (file, expr->expr); print_rtl (file, expr->expr);
fprintf (file, "\n"); fprintf (file, "\n");
...@@ -2884,7 +2888,8 @@ update_bb_reg_pressure (basic_block bb, rtx_insn *from) ...@@ -2884,7 +2888,8 @@ update_bb_reg_pressure (basic_block bb, rtx_insn *from)
static int static int
should_hoist_expr_to_dom (basic_block expr_bb, struct gcse_expr *expr, should_hoist_expr_to_dom (basic_block expr_bb, struct gcse_expr *expr,
basic_block bb, sbitmap visited, int distance, basic_block bb, sbitmap visited,
HOST_WIDE_INT distance,
int *bb_size, enum reg_class pressure_class, int *bb_size, enum reg_class pressure_class,
int *nregs, bitmap hoisted_bbs, rtx_insn *from) int *nregs, bitmap hoisted_bbs, rtx_insn *from)
{ {
...@@ -3161,7 +3166,7 @@ hoist_code (void) ...@@ -3161,7 +3166,7 @@ hoist_code (void)
computes the expression. */ computes the expression. */
FOR_EACH_VEC_ELT (domby, j, dominated) FOR_EACH_VEC_ELT (domby, j, dominated)
{ {
int max_distance; HOST_WIDE_INT max_distance;
/* Ignore self dominance. */ /* Ignore self dominance. */
if (bb == dominated) if (bb == dominated)
......
2017-03-03 Martin Liska <mliska@suse.cz>
PR rtl-optimization/79574
* gcc.dg/pr79574-2.c: New test.
2017-03-03 Richard Biener <rguenther@suse.de> 2017-03-03 Richard Biener <rguenther@suse.de>
PR c++/79825 PR c++/79825
......
/* PR rtl-optimization/79574 */
/* { dg-do compile } */
/* { dg-options "-Os --param gcse-cost-distance-ratio=2147483647" } */
#include "stdarg.h"
int buf[100];
int buf1[10];
int rd (int *pppp, int n, ...)
{
va_list argp;
int *p;
int i;
int res;
va_start (argp, n);
for (; n > 0; n--)
va_arg (argp, double);
p = va_arg (argp, int *);
i = va_arg (argp, int);
res = p[i];
__builtin_printf ("%d\n", res);
return res;
}
int mpx_test (int argc, const char **argv)
{
rd (buf1, 2, 10.0d, 10.0d, buf, 100, buf1);
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment