[Bug rtl-optimization/83393] [8 Regression] wrong code with -O2 -fno-forward-propagate -fno-tree-bit-ccp

2017-12-13 Thread segher at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83393

Segher Boessenkool  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |FIXED

--- Comment #5 from Segher Boessenkool  ---
Fixed.  Thanks for the report!

[Bug rtl-optimization/83393] [8 Regression] wrong code with -O2 -fno-forward-propagate -fno-tree-bit-ccp

2017-12-13 Thread segher at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83393

--- Comment #4 from Segher Boessenkool  ---
Author: segher
Date: Wed Dec 13 14:05:57 2017
New Revision: 255606

URL: https://gcc.gnu.org/viewcvs?rev=255606=gcc=rev
Log:
combine: Fix PR83393

In move_deaths we move a REG_DEAD note if the instruction combination
has extended the lifetime of a register so that the existing note is
no longer valid.  We find that note using reg_stat, but what that finds
can refer to a later insn.  If so, we cannot use the cached value.  This
patch implements that.


PR rtl-optimization/83393
* combine.c (move_deaths): If reg_stat points to a too new insn in
last_death, do not use it: find the proper insn instead.

gcc/testsuite/
PR rtl-optimization/83393
* gcc.dg/pr83393.c: New testcase.

Added:
trunk/gcc/testsuite/gcc.dg/pr83393.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/combine.c
trunk/gcc/testsuite/ChangeLog

[Bug rtl-optimization/83393] [8 Regression] wrong code with -O2 -fno-forward-propagate -fno-tree-bit-ccp

2017-12-12 Thread segher at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83393

--- Comment #3 from Segher Boessenkool  ---
In the original code, r108 as set by insn 14 is dead after insn 16.  The
combination 15->20 should have changed that, but apparently didn't.

[Bug rtl-optimization/83393] [8 Regression] wrong code with -O2 -fno-forward-propagate -fno-tree-bit-ccp

2017-12-12 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83393

Jakub Jelinek  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek  ---
For the testsuite, we should use LL or ULL suffix for the large fn argument,
and return 0; from main early if not lp64 or ilp32 (like if (__SIZEOF_INT__ !=
4 || __SIZEOF_LONG_LONG__ != 8 || __CHAR_BIT__ != 8) return 0; ).

[Bug rtl-optimization/83393] [8 Regression] wrong code with -O2 -fno-forward-propagate -fno-tree-bit-ccp

2017-12-12 Thread zsojka at seznam dot cz
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83393

--- Comment #1 from Zdenek Sojka  ---
(In reply to Zdenek Sojka from comment #0)

> ... even though insn 16 output (r108) should be used insn 20; ...

s/insn 16/insn 14/


Later, there is:

Trying 18 -> 20:
   18: r116:SI=0
   20: {r108:HI=r108:HI<

[Bug rtl-optimization/83393] [8 Regression] wrong code with -O2 -fno-forward-propagate -fno-tree-bit-ccp

2017-12-12 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83393

Richard Biener  changed:

   What|Removed |Added

   Target Milestone|--- |8.0