aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorStefan Schulze Frielinghaus <stefansf@linux.ibm.com>2022-10-06 08:43:53 +0200
committerStefan Schulze Frielinghaus <stefansf@linux.ibm.com>2022-10-06 08:43:53 +0200
commit5fc4d3e1837ea4850aac6460f563913f1d3fc5b8 (patch)
treef6101e8cdf333b8ec34da24e3969977e37cd5938 /gcc
parente9d50e7a4e290d7476cc7e6b5a8f2f1fb496c570 (diff)
downloadgcc-5fc4d3e1837ea4850aac6460f563913f1d3fc5b8.zip
gcc-5fc4d3e1837ea4850aac6460f563913f1d3fc5b8.tar.gz
gcc-5fc4d3e1837ea4850aac6460f563913f1d3fc5b8.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cselib.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/cselib.cc b/gcc/cselib.cc
index 9b582e5..2abc763 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)))
{