Created attachment 44254 [details] Reduced testcase gcc-9.0.0-alpha20180603 snapshot (r261132) ICEs when compiling the attached snippet w/ -misel -Os -floop-parallelize-all -frename-registers -fno-caller-saves -fno-gcse -fno-isolate-erroneous-paths-dereference -fno-split-wide-types -fno-tree-dominator-opts -fno-tree-vrp -g: % powerpc-e300c3-linux-gnu-gcc-9.0.0-alpha20180603 -misel -Os -floop-parallelize-all -frename-registers -fno-caller-saves -fno-gcse -fno-isolate-erroneous-paths-dereference -fno-split-wide-types -fno-tree-dominator-opts -fno-tree-vrp -g -c layafnq7.c layafnq7.c: In function 'os': layafnq7.c:43:1: error: qsort comparator non-negative on sorted output: 0 } ^ during RTL pass: rnreg layafnq7.c:43:1: internal compiler error: qsort checking failed 0x58cb34 qsort_chk_error /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/vec.c:201 0x15576f9 qsort_chk(void*, unsigned long, unsigned long, int (*)(void const*, void const*)) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/vec.c:253 0x7b406a vec<df_mw_hardreg*, va_heap, vl_embed>::qsort(int (*)(void const*, void const*)) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/vec.h:1099 0x7b406a vec<df_mw_hardreg*, va_heap, vl_ptr>::qsort(int (*)(void const*, void const*)) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/vec.h:1862 0x7b406a df_sort_and_compress_mws /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/df-scan.c:2252 0x7b406a df_canonize_collection_rec /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/df-scan.c:2281 0x7b65cd df_insn_refs_collect /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/df-scan.c:3223 0x7b6a2f df_insn_refs_verify /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/df-scan.c:4082 0x7b892f df_insn_rescan(rtx_insn*) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/df-scan.c:1065 0x7bad9c df_process_deferred_rescans() /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/df-scan.c:1246 0x7a175f df_finish_pass(bool) /var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-9.0.0_alpha20180603/work/gcc-9-20180603/gcc/df-core.c:651
df_mw_compare has: if (mw1->mw_reg != mw2->mw_reg) return mw1->mw_order - mw2->mw_order; Note mw_reg in the 'if' vs mw_order in the 'return'. This is invalid. It's simpler and more efficient to just use mw_order as the last tie-breaker regardless of mw_reg value.
*** Bug 89436 has been marked as a duplicate of this bug. ***
(In reply to Alexander Monakov from comment #1) > df_mw_compare has: > > if (mw1->mw_reg != mw2->mw_reg) > return mw1->mw_order - mw2->mw_order; > > Note mw_reg in the 'if' vs mw_order in the 'return'. This is invalid. > > It's simpler and more efficient to just use mw_order as the last tie-breaker > regardless of mw_reg value. patch is pre-approved
GCC 8.3 has been released.
Author: amonakov Date: Mon Feb 25 15:14:39 2019 New Revision: 269189 URL: https://gcc.gnu.org/viewcvs?rev=269189&root=gcc&view=rev Log: df-scan: fix use of mw_order in df_mw_compare (PR 86096) PR rtl-optimization/86096 * df-scan.c (df_mw_compare): Do not check mw_reg fields when comparing mw_order values. Modified: trunk/gcc/ChangeLog trunk/gcc/df-scan.c
GCC 8.4.0 has been released, adjusting target milestone.
I tried this on power LE and BE machines with gcc 9, 10, and trunk (11) and was unable to duplicate. It looks from above like it was fixed. Should it be closed?
It was fixed on the trunk only, so as the title says it remains an issue on the gcc-8 branch (which is still open). Bugzilla doesn't have separate resolutions for different branches, we cannot have this "RESOLVED" on the gcc-9/10/trunk and "WONTFIX" on gcc-8 branch.
The GCC 8 branch is being closed, fixed in GCC 9.1.