This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix postreload_combine miscompilation (PR 69941)


On 03/04/2016 04:57 PM, Bernd Schmidt wrote:
This is a transformation which looks for

(set reg1 const)
(set reg2 (plus reg2 reg1))

and tries to replace all further uses of reg2 with (plus reg2 reg1). The
problem here is that one of the uses is in a narrower mode, inside a
zero_extend, so we produce wrong results.

The fix seems rather straightforward, verifying all uses have a mode
matching the set. Bootstrapped and tested on x86_64-linux, ok?


Bernd

rcom-modes.diff


	PR rtl-optimization/69941
	* postreload.c (reload_combine_recognize_pattern): Ensure all uses of
	the reg share its mode.

testsuite/
	PR rtl-optimization/69941
	* gcc.dg/torture/pr69941.c: New test.
OK.

FWIW, based on my reading of the BZ, I think this counts as a regression -- it just happens to come and go. I strongly suspect that's due to changing register assignments or some such.

I'm going to go ahead and push this to the trunk.

Jeff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]