On Thu, Feb 11, 2016 at 03:29:05PM +0100, Bernd Schmidt wrote: > On 02/11/2016 10:45 AM, Alan Modra wrote: > > >Due to uses elsewhere in vsx instructions, reload chooses to put > >psuedo 185 in fr31, which can't be used as a base register in the > >following: > > What code exactly makes the choice of fr31? I assume this is in > reg_renumber, so it's IRA and not reload that's making that decision?
Yes, sorry, I shouldn't have said reload chooses the reg. > > PR target/68973 > > * reloads.c (find_reloads_address_1): For pre/post-inc/dec > > with an invalid hard reg, reload just the reg not the entire > > pre/post-inc/dec address expression. > > Hmm, you're patching tricky code. Thanks for being willing to review! :) > I'm not sure yet whether this is right or > not. More reload dumps might help if you have them; I'll Cc myself on the > PR. I've attached rtl dumps to the PR. > My gut feeling is that we want to reload the inner reg before entering this > block of code, Yes, my first quick hack did just that, then I noticed there was existing code to reload the inner reg.. > with a new test for SECONDARY_MEMORY_NEEDED alongside the > existing block that already sets reloaded_inner_of_autoinc. I don't understand this comment. If we're pushing a reload of the inner reg, then the SECONDARY_MEMORY_NEEDED code in push_reload will fire. Why then should there be any need to do anything special in find_reloads_address_1 regarding secondary memory? -- Alan Modra Australia Development Lab, IBM