From: Stefan Schulze Frielinghaus Date: Thu, 6 Oct 2022 06:43:53 +0000 (+0200) Subject: cselib: Skip BImode while keeping track of subvalue relations [PR107088] X-Git-Tag: basepoints/gcc-14~4102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5fc4d3e1837ea4850aac6460f563913f1d3fc5b8;p=thirdparty%2Fgcc.git cselib: Skip BImode while keeping track of subvalue relations [PR107088] 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. gcc/ChangeLog: PR rtl-optimization/107088 * cselib.cc (new_cselib_val): Skip BImode while keeping track of subvalue relations. --- diff --git a/gcc/cselib.cc b/gcc/cselib.cc index 9b582e5d3d6d..2abc763a3f8e 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))) {