patch to fix PR61215

Vladimir Makarov vmakarov@redhat.com
Fri May 23 01:58:00 GMT 2014


   The following patch fixes

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61215

   The patch was bootstrapped on x86/x86-64 and arm and tested on 
x86/x86-64.

   Unfortunately I did not managed to decrease the test significantly to 
include it into the testsuite.

   Committed as rev. 210828 into the trunk and rev. 210829 into the 
gcc-4.9 branch.

   2014-05-22  Vladimir Makarov  <vmakarov@redhat.com>

         PR rtl-optimization/61215
         * lra-elelimination.c (lra_eliminate_regs_1): Don't use
         simplify_gen_subreg until final substitution.
-------------- next part --------------
Index: lra-eliminations.c
===================================================================
--- lra-eliminations.c  (revision 210728)
+++ lra-eliminations.c  (working copy)
@@ -565,6 +565,16 @@
              alter_subreg (&x, false);
              return x;
            }
+         else if (! subst_p)
+           {
+             /* LRA can transform subregs itself.  So don't call
+                simplify_gen_subreg until LRA transformations are
+                finished.  Function simplify_gen_subreg can do
+                non-trivial transformations (like truncation) which
+                might make LRA work to fail.  */
+             SUBREG_REG (x) = new_rtx;
+             return x;
+           }
          else
            return simplify_gen_subreg (GET_MODE (x), new_rtx,
                                        GET_MODE (new_rtx), SUBREG_BYTE (x));


More information about the Gcc-patches mailing list