Message ID | 20221004112849.27678-1-stefansf@linux.ibm.com |
---|---|
State | New |
Headers | show |
Series | cselib: Skip BImode while keeping track of subvalue relations [PR107088] | expand |
On 10/4/22 05:28, Stefan Schulze Frielinghaus via Gcc-patches wrote: > For BImode get_narrowest_mode evaluates to QImode but BImode < QImode. > Thus FOR_EACH_MODE_UNTIL never reaches BImode and iterates until OImode > for which no wider mode exists so we end up with VOIDmode and fail. > Fixed by adding a size guard so we effectively skip BImode. > > Bootstrap and regtest are currently running on x64. Assuming they pass > ok for mainline? > > gcc/ChangeLog: > > PR rtl-optimization/107088 > * cselib.cc (new_cselib_val): Skip BImode while keeping track of > subvalue relations. OK. And FWIW, this fixes the various failures I saw in my tester due to the cselib patches. jeff
On Wed, Oct 05, 2022 at 08:48:13PM -0600, Jeff Law via Gcc-patches wrote: > > On 10/4/22 05:28, Stefan Schulze Frielinghaus via Gcc-patches wrote: > > For BImode get_narrowest_mode evaluates to QImode but BImode < QImode. > > Thus FOR_EACH_MODE_UNTIL never reaches BImode and iterates until OImode > > for which no wider mode exists so we end up with VOIDmode and fail. > > Fixed by adding a size guard so we effectively skip BImode. > > > > Bootstrap and regtest are currently running on x64. Assuming they pass > > ok for mainline? > > > > gcc/ChangeLog: > > > > PR rtl-optimization/107088 > > * cselib.cc (new_cselib_val): Skip BImode while keeping track of > > subvalue relations. > > OK. And FWIW, this fixes the various failures I saw in my tester due to the > cselib patches. Thanks for testing, too! Out of curiosity which target is your tester? I gave it a try on x64 and AArch64 for which bootstrap went fine and regtest showed no difference, and of course, for s390x regtest went for the better.
On 10/6/22 01:06, Stefan Schulze Frielinghaus wrote: > On Wed, Oct 05, 2022 at 08:48:13PM -0600, Jeff Law via Gcc-patches wrote: >> On 10/4/22 05:28, Stefan Schulze Frielinghaus via Gcc-patches wrote: >>> For BImode get_narrowest_mode evaluates to QImode but BImode < QImode. >>> Thus FOR_EACH_MODE_UNTIL never reaches BImode and iterates until OImode >>> for which no wider mode exists so we end up with VOIDmode and fail. >>> Fixed by adding a size guard so we effectively skip BImode. >>> >>> Bootstrap and regtest are currently running on x64. Assuming they pass >>> ok for mainline? >>> >>> gcc/ChangeLog: >>> >>> PR rtl-optimization/107088 >>> * cselib.cc (new_cselib_val): Skip BImode while keeping track of >>> subvalue relations. >> OK. And FWIW, this fixes the various failures I saw in my tester due to the >> cselib patches. > Thanks for testing, too! Out of curiosity which target is your tester? > I gave it a try on x64 and AArch64 for which bootstrap went fine and > regtest showed no difference, and of course, for s390x regtest went for > the better. It's got at least one representative from most of the targets supported by gcc. http://law-sandy.freeddns.org:8080 will get you to the jenkins instance. Jeff
diff --git a/gcc/cselib.cc b/gcc/cselib.cc index 9b582e5d3d6..2abc763a3f8 100644 --- a/gcc/cselib.cc +++ b/gcc/cselib.cc @@ -1571,6 +1571,7 @@ new_cselib_val (unsigned int hash, machine_mode mode, rtx x) scalar_int_mode int_mode; if (REG_P (x) && is_int_mode (mode, &int_mode) + && GET_MODE_SIZE (int_mode) > 1 && REG_VALUES (REGNO (x)) != NULL && (!cselib_current_insn || !DEBUG_INSN_P (cselib_current_insn))) {