compare-elim.c (try_merge_compare): Don't merge compare if address contains a side effect.

2018-06-07  Paul Koning  <ni1d@arrl.net>

gcc/

	* compare-elim.c (try_merge_compare): Don't merge compare if
	address contains a side effect.
	(try_eliminate_compare): Likewise.

gcc/testsuite/

	* gcc.c-torture/compile/20180605-1.c: New test.

From-SVN: r261287
This commit is contained in:
Paul Koning 2018-06-07 13:55:05 -04:00 committed by Paul Koning
parent 75d1c00452
commit a3e87f07f3
4 changed files with 32 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2018-06-07 Paul Koning <ni1d@arrl.net>
* compare-elim.c (try_merge_compare): Don't merge compare if
address contains a side effect.
(try_eliminate_compare): Likewise.
2018-06-07 Olga Makhotina <olga.makhotina@intel.com>
* config.gcc: Support "tremont".

View file

@ -690,6 +690,13 @@ try_merge_compare (struct comparison *cmp)
return false;
rtx src = SET_SRC (set);
/* If the source uses addressing modes with side effects, we can't
do the merge because we'd end up with a PARALLEL that has two
instances of that side effect in it. */
if (side_effects_p (src))
return false;
rtx flags = maybe_select_cc_mode (cmp, src, CONST0_RTX (GET_MODE (src)));
if (!flags)
{
@ -809,6 +816,12 @@ try_eliminate_compare (struct comparison *cmp)
else
return false;
/* If the source uses addressing modes with side effects, we can't
do the merge because we'd end up with a PARALLEL that has two
instances of that side effect in it. */
if (side_effects_p (cmp_src))
return false;
/* Determine if we ought to use a different CC_MODE here. */
flags = maybe_select_cc_mode (cmp, cmp_src, in_b);
if (flags == NULL)

View file

@ -1,3 +1,7 @@
2018-06-07 Paul Koning <ni1d@arrl.net>
* gcc.c-torture/compile/20180605-1.c: New test.
2018-06-07 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/86045

View file

@ -0,0 +1,9 @@
void f (int *p, int n)
{
int j = 0, k;
for (int i = 0; i < n; i++)
if ((k = *p++) > 0)
j += k;
return j;
}