diff options
author | Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> | 2022-10-06 08:43:53 +0200 |
---|---|---|
committer | Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> | 2022-10-06 08:43:53 +0200 |
commit | 5fc4d3e1837ea4850aac6460f563913f1d3fc5b8 (patch) | |
tree | f6101e8cdf333b8ec34da24e3969977e37cd5938 /gcc | |
parent | e9d50e7a4e290d7476cc7e6b5a8f2f1fb496c570 (diff) | |
download | gcc-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.cc | 1 |
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))) { |