Re: [PATCH] alpha: add -mlra and enable LRA by default on BWX targets
Jeffrey Law <[email protected]> Wed, 5 Aug 2026 17:55:34 -0600
| Newsgroups | gmane.comp.gcc.patches |
|---|---|
| Message-ID | <[email protected]> |
On 8/3/2026 10:24 AM, Matt Turner wrote: > On Mon, Jul 20, 2026 at 12:26 PM Matt Turner <[email protected]> wrote: >> Alpha is one of the last targets still forcing TARGET_LRA_P to false, and >> reload is slated for removal (PR113932). Add a transitional -mlra option, >> following the hppa pattern (r16-5534), so that -mno-lra remains available as >> an escape hatch until reload is deleted. >> >> LRA is enabled by default only on BWX targets. On non-BWX targets a QImode or >> HImode pseudo that has to be spilled reaches the target's reload_in<mode> / >> reload_out<mode> secondary-reload path, which LRA does not yet drive correctly >> (PR117185: LRA either loops generating reload insns or passes a pseudo where >> get_unaligned_address expects a MEM). BWX has real byte/word memory >> instructions and does not need that path, so it is unaffected. Gating the >> default on TARGET_BWX enables LRA where it is known good and leaves non-BWX on >> reload until PR117185 is resolved. -mlra / -mno-lra override the default in >> either direction. >> >> The default is resolved in alpha_option_override once TARGET_BWX is final, so >> it tracks -mcpu (e.g. -mcpu=ev4 selects reload, -mcpu=ev56 selects LRA) rather >> than only the configured default CPU. >> >> Tested with an alpha-linux-gnu cross (both ev4/non-BWX and --with-cpu=ev56/BWX, >> --enable-checking=yes,rtl): libgcc, libgomp and libstdc++ build cleanly under >> LRA, and gcc.c-torture/execute under qemu-alpha at -O0 and -O2 gives identical >> results with -mlra and -mno-lra on both configurations (3380 results each, no >> differences). A native ev56 bootstrap with c,c++,m2 completes and, comparing a >> full make check-gcc/check-g++ at the default (LRA) against --target_board >> unix/-mno-lra (reload), LRA shows no correctness regressions: gcc unexpected >> failures drop from 626 to 541 and g++ from 57 to 56, with the only LRA-only >> differences being debug-info-quality (gcc.dg/guality) shifts in LRA's favor. >> The prerequisite middle-end fix for the BWX m2 miscompile is PR117184. >> >> gcc/ >> * config/alpha/alpha.opt (mlra): New option. >> * config/alpha/alpha.cc (alpha_option_override): Default alpha_lra_p >> to TARGET_BWX when not set explicitly. >> (alpha_use_lra_p): New function. >> (TARGET_LRA_P): Define to it instead of hook_bool_void_false. >> --- > Hi Vlad and Peter, > > I could really use your review on this patch as well as your feedback > on the questions in > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117185#c8 So at a high level, do we want to have LRA depend on subtarget capabilities. I don't think we've ever done that, though I can understand the motivation here. We don't have an active alpha maintainer, so I'm happy to go when general consensus here. I haven't gotten a clean bootstrap & regression on alpha in about a month and my tester only runs in the default mode, so I don't think it's really going to exercise this meaningfully or give us any sense of LRA on alpha state going forward. Given it's a dead architecture one possibility that we should at least consider is deprecating the non-BWX variants at which point we could convert to LRA and having bootstrap/regression testing in place. For reference Matt, I have an alpha native root filesystem with enough components to bootstrap GCC. My tester chroots into that RFS using user mode QEMU emulation. So it looks native, but doesn't have as much overhead as full system emulation. A bootstrap and regression test takes 16-19 hours on my builders. Jeff