Message ID | CAFULd4be3azVdXQhpnQE7Qee8350480TdQM1woUnNuav3Ehw9g@mail.gmail.com |
---|---|
State | New |
Headers | show |
On 01/28/2013 03:14 PM, Uros Bizjak wrote: > 2013-01-28 Uros Bizjak<ubizjak@gmail.com> > > * config/alpha/alpha.c (TARGET_LRA_P): New define. > > Bootstrapped and regression tested [1] on alphaev68-unknown-linux-gnu. > > OK for 4.9? > Yep. r~
On 01/28/2013 04:14 PM, Uros Bizjak wrote: > Hello! > > 2013-01-28 Uros Bizjak <ubizjak@gmail.com> > > * config/alpha/alpha.c (TARGET_LRA_P): New define. > > Bootstrapped and regression tested [1] on alphaev68-unknown-linux-gnu. > > OK for 4.9? > > [1] http://gcc.gnu.org/ml/gcc-testresults/2013-01/msg02998.html Can you attach this to PR 55996, the 4.9 pending patches metabug. Thanks, jeff
On Tue, Jan 29, 2013 at 12:34 AM, Richard Henderson <rth@redhat.com> wrote: > On 01/28/2013 03:14 PM, Uros Bizjak wrote: >> >> 2013-01-28 Uros Bizjak<ubizjak@gmail.com> >> >> * config/alpha/alpha.c (TARGET_LRA_P): New define. >> >> Bootstrapped and regression tested [1] on alphaev68-unknown-linux-gnu. >> >> OK for 4.9? >> > > Yep. Unfortunately, alphas are much more tied to reload than it was hoped. While latest alphas (with FIX and BWX ISAs) survived transition to LRA without problems, further testing on ev4 and ev5 triggered various problems, one of them is PR57032 [1] that exposed rather unique way of handling aligned/nonaligned memory operands. The patch was reverted. I suspect that fixing older alphas to live with LRA would be quite involved task, and I guess nobody (including me) wants to spend considerable amount of time on a dying architecture. Consequently, this also means that alphas will die together with reload as far as gcc is concerned. [1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57032 Uros.
On 04/22/2013 11:17 AM, Uros Bizjak wrote: > On Tue, Jan 29, 2013 at 12:34 AM, Richard Henderson <rth@redhat.com> wrote: >> On 01/28/2013 03:14 PM, Uros Bizjak wrote: >>> >>> 2013-01-28 Uros Bizjak<ubizjak@gmail.com> >>> >>> * config/alpha/alpha.c (TARGET_LRA_P): New define. >>> >>> Bootstrapped and regression tested [1] on alphaev68-unknown-linux-gnu. >>> >>> OK for 4.9? >>> >> >> Yep. > > Unfortunately, alphas are much more tied to reload than it was hoped. > While latest alphas (with FIX and BWX ISAs) survived transition to LRA > without problems, further testing on ev4 and ev5 triggered various > problems, one of them is PR57032 [1] that exposed rather unique way of > handling aligned/nonaligned memory operands. > > The patch was reverted. > > I suspect that fixing older alphas to live with LRA would be quite > involved task, and I guess nobody (including me) wants to spend > considerable amount of time on a dying architecture. Consequently, > this also means that alphas will die together with reload as far as > gcc is concerned. > > [1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57032 Would it make sense to deprecate the older Alpha implementations without killing the "modern" ones? jeff
On Mon, Apr 22, 2013 at 7:33 PM, Jeff Law <law@redhat.com> wrote: >> Unfortunately, alphas are much more tied to reload than it was hoped. >> While latest alphas (with FIX and BWX ISAs) survived transition to LRA >> without problems, further testing on ev4 and ev5 triggered various >> problems, one of them is PR57032 [1] that exposed rather unique way of >> handling aligned/nonaligned memory operands. >> >> The patch was reverted. >> >> I suspect that fixing older alphas to live with LRA would be quite >> involved task, and I guess nobody (including me) wants to spend >> considerable amount of time on a dying architecture. Consequently, >> this also means that alphas will die together with reload as far as >> gcc is concerned. >> >> [1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57032 > > Would it make sense to deprecate the older Alpha implementations without > killing the "modern" ones? Looking at [1], I would propose a cutoff point at ev6. IIUC, the core of the problem is with *movdi, *movhi and *movqi patterns, where moves to/from memory are blocked for FP (there remains "Q" constraint in the *movdi case, ignored by LRA) and integer regs. This situation gets eventually fixed during reload (please see various instances of reload_in_progress), which is somehow incompatible with LRA. [1] http://en.wikipedia.org/wiki/DEC_Alpha Uros.
On Mon, Apr 22, 2013 at 7:33 PM, Jeff Law wrote: > On 04/22/2013 11:17 AM, Uros Bizjak wrote: >> >> On Tue, Jan 29, 2013 at 12:34 AM, Richard Henderson <rth@redhat.com> >> wrote: >>> >>> On 01/28/2013 03:14 PM, Uros Bizjak wrote: >>>> >>>> >>>> 2013-01-28 Uros Bizjak<ubizjak@gmail.com> >>>> >>>> * config/alpha/alpha.c (TARGET_LRA_P): New define. >>>> >>>> Bootstrapped and regression tested [1] on alphaev68-unknown-linux-gnu. >>>> >>>> OK for 4.9? >>>> >>> >>> Yep. >> >> >> Unfortunately, alphas are much more tied to reload than it was hoped. >> While latest alphas (with FIX and BWX ISAs) survived transition to LRA >> without problems, further testing on ev4 and ev5 triggered various >> problems, one of them is PR57032 [1] that exposed rather unique way of >> handling aligned/nonaligned memory operands. >> >> The patch was reverted. >> >> I suspect that fixing older alphas to live with LRA would be quite >> involved task, and I guess nobody (including me) wants to spend >> considerable amount of time on a dying architecture. Consequently, >> this also means that alphas will die together with reload as far as >> gcc is concerned. >> >> [1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57032 > > Would it make sense to deprecate the older Alpha implementations without > killing the "modern" ones? Right. That would also eliminate the NOTE_INSN_EH_REGION notes bug (PR target/56858). I think it would be a shame to not enable LRA on alpha. It will only be another excuse to never let reload die, and it will hurt stability and reliability for Alpha EV6 in the long term as other targets switch over to LRA. Is it possible to add some EV4/EV5 splitters to work around this Alpha EV4/EV5 oddity? Even if it comes at a code quality cost, it's IMHO still better than tying the fate of apha to reload and vice versa.. Ciao! Steven
On 13-04-22 2:19 PM, Steven Bosscher wrote: > On Mon, Apr 22, 2013 at 7:33 PM, Jeff Law wrote: >> On 04/22/2013 11:17 AM, Uros Bizjak wrote: >>> On Tue, Jan 29, 2013 at 12:34 AM, Richard Henderson <rth@redhat.com> >>> wrote: >>>> On 01/28/2013 03:14 PM, Uros Bizjak wrote: >>>>> >>>>> 2013-01-28 Uros Bizjak<ubizjak@gmail.com> >>>>> >>>>> * config/alpha/alpha.c (TARGET_LRA_P): New define. >>>>> >>>>> Bootstrapped and regression tested [1] on alphaev68-unknown-linux-gnu. >>>>> >>>>> OK for 4.9? >>>>> >>>> Yep. >>> >>> Unfortunately, alphas are much more tied to reload than it was hoped. >>> While latest alphas (with FIX and BWX ISAs) survived transition to LRA >>> without problems, further testing on ev4 and ev5 triggered various >>> problems, one of them is PR57032 [1] that exposed rather unique way of >>> handling aligned/nonaligned memory operands. >>> >>> The patch was reverted. >>> >>> I suspect that fixing older alphas to live with LRA would be quite >>> involved task, and I guess nobody (including me) wants to spend >>> considerable amount of time on a dying architecture. Consequently, >>> this also means that alphas will die together with reload as far as >>> gcc is concerned. >>> >>> [1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57032 >> Would it make sense to deprecate the older Alpha implementations without >> killing the "modern" ones? > Right. That would also eliminate the NOTE_INSN_EH_REGION notes bug (PR > target/56858). > > I think it would be a shame to not enable LRA on alpha. It will only > be another excuse to never let reload die, and it will hurt stability > and reliability for Alpha EV6 in the long term as other targets switch > over to LRA. > > Is it possible to add some EV4/EV5 splitters to work around this Alpha > EV4/EV5 oddity? Even if it comes at a code quality cost, it's IMHO > still better than tying the fate of apha to reload and vice versa.. > > I never tried alpha with LRA. So it is not assumed that LRA should work on alpha. But I am sure LRA can work for alpha if some efforts will be spent. Porting LRA to a new target always involves changes in .md and machine-dependent files. This process was even not started. Actually, Uros showed that Alpha will not require a lot of efforts as code in most cases is already generated successfully. I don't remember any target which I tried to port LRA in such a good shape at the beginning of LRA port process.
On Mon, Apr 22, 2013 at 9:17 PM, Vladimir Makarov <vmakarov@redhat.com> wrote: > > I never tried alpha with LRA. So it is not assumed that LRA should work on > alpha. But I am sure LRA can work for alpha if some efforts will be spent. > Porting LRA to a new target always involves changes in .md and > machine-dependent files. This process was even not started. > > Actually, Uros showed that Alpha will not require a lot of efforts as code > in most cases is already generated successfully. I don't remember any > target which I tried to port LRA in such a good shape at the beginning of > LRA port process. Vladimir, thanks for encouraging words, it looks that all hope is not lost yet. However, I would like to point out that I have tested only ev68 architecture, and apparently all the interesting stuff is in the way ev4 and ev5 are handled. I can certainly spend a reasonable time to bring the port up to life, but for now, I propose to revert the patch, until ev4 bootstrap is fixed. Uros.
On 13-04-22 3:35 PM, Uros Bizjak wrote: > On Mon, Apr 22, 2013 at 9:17 PM, Vladimir Makarov <vmakarov@redhat.com> wrote: >> I never tried alpha with LRA. So it is not assumed that LRA should work on >> alpha. But I am sure LRA can work for alpha if some efforts will be spent. >> Porting LRA to a new target always involves changes in .md and >> machine-dependent files. This process was even not started. >> >> Actually, Uros showed that Alpha will not require a lot of efforts as code >> in most cases is already generated successfully. I don't remember any >> target which I tried to port LRA in such a good shape at the beginning of >> LRA port process. > Vladimir, thanks for encouraging words, it looks that all hope is not > lost yet. However, I would like to point out that I have tested only > ev68 architecture, and apparently all the interesting stuff is in the > way ev4 and ev5 are handled. I can certainly spend a reasonable time > to bring the port up to life, but for now, I propose to revert the > patch, until ev4 bootstrap is fixed. > > Sure, Uros. I agree. Thanks for trying alpha.
2013/4/23 Vladimir Makarov <vmakarov@redhat.com>: > On 13-04-22 2:19 PM, Steven Bosscher wrote: >> >> On Mon, Apr 22, 2013 at 7:33 PM, Jeff Law wrote: >>> >>> On 04/22/2013 11:17 AM, Uros Bizjak wrote: >>>> >>>> On Tue, Jan 29, 2013 at 12:34 AM, Richard Henderson <rth@redhat.com> >>>> wrote: >>>>> >>>>> On 01/28/2013 03:14 PM, Uros Bizjak wrote: >>>>>> >>>>>> >>>>>> 2013-01-28 Uros Bizjak<ubizjak@gmail.com> >>>>>> >>>>>> * config/alpha/alpha.c (TARGET_LRA_P): New define. >>>>>> >>>>>> Bootstrapped and regression tested [1] on alphaev68-unknown-linux-gnu. >>>>>> >>>>>> OK for 4.9? >>>>>> >>>>> Yep. >>>> >>>> >>>> Unfortunately, alphas are much more tied to reload than it was hoped. >>>> While latest alphas (with FIX and BWX ISAs) survived transition to LRA >>>> without problems, further testing on ev4 and ev5 triggered various >>>> problems, one of them is PR57032 [1] that exposed rather unique way of >>>> handling aligned/nonaligned memory operands. >>>> >>>> The patch was reverted. >>>> >>>> I suspect that fixing older alphas to live with LRA would be quite >>>> involved task, and I guess nobody (including me) wants to spend >>>> considerable amount of time on a dying architecture. Consequently, >>>> this also means that alphas will die together with reload as far as >>>> gcc is concerned. >>>> >>>> [1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57032 >>> >>> Would it make sense to deprecate the older Alpha implementations without >>> killing the "modern" ones? >> >> Right. That would also eliminate the NOTE_INSN_EH_REGION notes bug (PR >> target/56858). >> >> I think it would be a shame to not enable LRA on alpha. It will only >> be another excuse to never let reload die, and it will hurt stability >> and reliability for Alpha EV6 in the long term as other targets switch >> over to LRA. >> >> Is it possible to add some EV4/EV5 splitters to work around this Alpha >> EV4/EV5 oddity? Even if it comes at a code quality cost, it's IMHO >> still better than tying the fate of apha to reload and vice versa.. >> >> > I never tried alpha with LRA. So it is not assumed that LRA should work on > alpha. But I am sure LRA can work for alpha if some efforts will be spent. > Porting LRA to a new target always involves changes in .md and > machine-dependent files. This process was even not started. > > Actually, Uros showed that Alpha will not require a lot of efforts as code > in most cases is already generated successfully. I don't remember any > target which I tried to port LRA in such a good shape at the beginning of > LRA port process. > I would like to share a little bit of my thought. :) We are porting a 32-bit target, 'nds32', for GCC since gcc-4.6, 4.7, and 4.8/trunk. During these years we experienced implementation trade-off between reload and LRA. Solving register allocation is NP-complete (coloring problem). Reload is further to fix up any unsatisfied operands in the instruction and trying to do everything at once. It is powerful, yet complicated. Numbers of target hooks/macros make us confused and hard to implement. LRA, however, its systematic design and clear flow make developers easy to use and trace code. The instruction constraints become primary source of the information. Even some rookie-GCC-developers like me or my team members are also capable of identifying potential allocation issues when developing a new target. (See Shiva Chen's patch http://gcc.gnu.org/ml/gcc/2013-04/msg00225.html http://gcc.gnu.org/ml/gcc-patches/2013-04/msg01350.html) Eventually we decide to enable LRA in our 'nds32' porting. So I believe porting a new target costs less efforts with LRA than that with reload. For existing targets, of course, the efforts depend on how tight it is to reload. :p Best regards, jasonwucj
Index: config/alpha/alpha.c =================================================================== --- config/alpha/alpha.c (revision 195502) +++ config/alpha/alpha.c (working copy) @@ -9872,6 +9872,9 @@ #undef TARGET_LEGITIMATE_ADDRESS_P #define TARGET_LEGITIMATE_ADDRESS_P alpha_legitimate_address_p +#undef TARGET_LRA_P +#define TARGET_LRA_P hook_bool_void_true + #undef TARGET_CONDITIONAL_REGISTER_USAGE #define TARGET_CONDITIONAL_REGISTER_USAGE alpha_conditional_register_usage