From patchwork Fri Sep 21 11:03:47 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: Fix PR rtl-optimization/54644 Date: Fri, 21 Sep 2012 01:03:47 -0000 From: Eric Botcazou X-Patchwork-Id: 185691 Message-Id: <2200105.jWuU9Ae6vR@polaris> To: gcc-patches@gcc.gnu.org It's the regression of gcc.c-torture/execute/multi-ix.c at -O1 on Alpha reported by Uros and comes from a thinko in my fix for PR rtl-opt/54290. Tested on x86-64/Linux, applied on the mainline. 2012-09-21 Eric Botcazou PR rtl-optimization/54290 PR rtl-optimization/54644 * reload1.c (choose_reload_regs): Fix thinko in previous change. Index: reload1.c =================================================================== --- reload1.c (revision 191596) +++ reload1.c (working copy) @@ -6991,16 +6991,17 @@ choose_reload_regs (struct insn_chain *c If we succeeded removing some reload and we are doing a preliminary pass just to remove such reloads, make another pass, since the removal of one reload might allow us to inherit another one. */ - else if (pass - && rld[r].in + else if (rld[r].in && rld[r].out != rld[r].in && remove_address_replacements (rld[r].in)) - pass = 2; + { + if (pass) + pass = 2; + } #ifdef SECONDARY_MEMORY_NEEDED /* If we needed a memory location for the reload, we also have to remove its related reloads. */ - else if (pass - && rld[r].in + else if (rld[r].in && rld[r].out != rld[r].in && (tem = replaced_subreg (rld[r].in), REG_P (tem)) && REGNO (tem) < FIRST_PSEUDO_REGISTER @@ -7009,7 +7010,10 @@ choose_reload_regs (struct insn_chain *c && remove_address_replacements (get_secondary_mem (tem, rld[r].inmode, rld[r].opnum, rld[r].when_needed))) - pass = 2; + { + if (pass) + pass = 2; + } #endif } }