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] |
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] |