From 8f4e0f7bd0a6696864a8950ef5a12422cdc4ddc1 Mon Sep 17 00:00:00 2001 From: jakub Date: Wed, 22 Nov 2017 09:08:23 +0000 Subject: [PATCH] PR rtl-optimization/82044 PR tree-optimization/82042 * dse.c (record_store): Check for overflow. (check_mem_read_rtx): Properly check for overflow if width == -1, call add_wild_read instead of clear_rhs_from_active_local_stores on overflow and log it into dump_file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255048 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/dse.c | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dc96750a2da..f4b05f0eb2f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2017-11-22 Jakub Jelinek + + PR rtl-optimization/82044 + PR tree-optimization/82042 + * dse.c (record_store): Check for overflow. + (check_mem_read_rtx): Properly check for overflow if width == -1, call + add_wild_read instead of clear_rhs_from_active_local_stores on + overflow and log it into dump_file. + 2017-11-22 Richard Biener * gimple-iterator.c (gimple_find_edge_insert_loc): Ignore diff --git a/gcc/dse.c b/gcc/dse.c index f6d5e6e6fe2..1b34f4f0285 100644 --- a/gcc/dse.c +++ b/gcc/dse.c @@ -1342,6 +1342,12 @@ record_store (rtx body, bb_info_t bb_info) else width = GET_MODE_SIZE (GET_MODE (mem)); + if (offset > HOST_WIDE_INT_MAX - width) + { + clear_rhs_from_active_local_stores (); + return 0; + } + if (group_id >= 0) { /* In the restrictive case where the base is a constant or the @@ -1981,9 +1987,13 @@ check_mem_read_rtx (rtx *loc, bb_info_t bb_info) else width = GET_MODE_SIZE (GET_MODE (mem)); - if (offset > HOST_WIDE_INT_MAX - width) + if (width == -1 + ? offset == HOST_WIDE_INT_MIN + : offset > HOST_WIDE_INT_MAX - width) { - clear_rhs_from_active_local_stores (); + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, " adding wild read, due to overflow.\n"); + add_wild_read (bb_info); return; } -- 2.11.4.GIT