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
This commit is contained in:
parent
98fa4d3c02
commit
ec7f796e87
|
@ -1,3 +1,11 @@
|
|||
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>
|
||||
|
||||
* fixed-value.c (fixed_from_string): Restore use of elt (1)
|
||||
|
|
27
gcc/gcse.c
27
gcc/gcse.c
|
@ -281,7 +281,7 @@ struct gcse_expr
|
|||
to keep register pressure under control.
|
||||
A value of "0" removes restrictions on how far the expression can
|
||||
travel. */
|
||||
int max_distance;
|
||||
HOST_WIDE_INT max_distance;
|
||||
};
|
||||
|
||||
/* Occurrence of an expression.
|
||||
|
@ -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_available_p (const_rtx, const rtx_insn *);
|
||||
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 void record_last_reg_set_info (rtx_insn *, int);
|
||||
static void record_last_mem_set_info (rtx_insn *);
|
||||
|
@ -488,8 +488,10 @@ static void alloc_code_hoist_mem (int, int);
|
|||
static void free_code_hoist_mem (void);
|
||||
static void compute_code_hoist_vbeinout (void);
|
||||
static void compute_code_hoist_data (void);
|
||||
static int should_hoist_expr_to_dom (basic_block, struct gcse_expr *, basic_block,
|
||||
sbitmap, int, int *, enum reg_class,
|
||||
static int should_hoist_expr_to_dom (basic_block, struct gcse_expr *,
|
||||
basic_block,
|
||||
sbitmap, HOST_WIDE_INT, int *,
|
||||
enum reg_class,
|
||||
int *, bitmap, rtx_insn *);
|
||||
static int hoist_code (void);
|
||||
static enum reg_class get_regno_pressure_class (int regno, int *nregs);
|
||||
|
@ -743,7 +745,7 @@ static basic_block current_bb;
|
|||
GCSE. */
|
||||
|
||||
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
|
||||
/* On register stack architectures, don't GCSE constants from the
|
||||
|
@ -1115,7 +1117,8 @@ expr_equiv_p (const_rtx x, const_rtx y)
|
|||
static void
|
||||
insert_expr_in_table (rtx x, machine_mode mode, rtx_insn *insn,
|
||||
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;
|
||||
unsigned int hash;
|
||||
|
@ -1231,7 +1234,7 @@ hash_scan_set (rtx set, rtx_insn *insn, struct gcse_hash_table_d *table)
|
|||
else if (REG_P (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.
|
||||
|
||||
|
@ -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))
|
||||
{
|
||||
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. */
|
||||
if (regno >= FIRST_PSEUDO_REGISTER
|
||||
|
@ -1412,7 +1415,8 @@ dump_hash_table (FILE *file, const char *name, struct gcse_hash_table_d *table)
|
|||
if (flat_table[i] != 0)
|
||||
{
|
||||
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);
|
||||
print_rtl (file, expr->expr);
|
||||
fprintf (file, "\n");
|
||||
|
@ -2884,7 +2888,8 @@ update_bb_reg_pressure (basic_block bb, rtx_insn *from)
|
|||
|
||||
static int
|
||||
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 *nregs, bitmap hoisted_bbs, rtx_insn *from)
|
||||
{
|
||||
|
@ -3161,7 +3166,7 @@ hoist_code (void)
|
|||
computes the expression. */
|
||||
FOR_EACH_VEC_ELT (domby, j, dominated)
|
||||
{
|
||||
int max_distance;
|
||||
HOST_WIDE_INT max_distance;
|
||||
|
||||
/* Ignore self dominance. */
|
||||
if (bb == dominated)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
PR c++/79825
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
/* 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;
|
||||
}
|
Loading…
Reference in New Issue