public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/99104] New: [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element)
@ 2021-02-15 11:32 asolokha at gmx dot com
2021-02-15 12:06 ` [Bug target/99104] " jakub at gcc dot gnu.org
` (6 more replies)
0 siblings, 7 replies; 8+ messages in thread
From: asolokha at gmx dot com @ 2021-02-15 11:32 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99104
Bug ID: 99104
Summary: [11 Regression] ICE: Segmentation fault (in
bitmap_list_find_element)
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: asolokha at gmx dot com
Target Milestone: ---
Target: x86_64-pc-linux-gnu-gcc
gcc-11.0.0-alpha20210214 snapshot (g:9966699d7a9d8e35c0c4cf9a945bcf90ef874f2d)
ICEs when compiling the following testcase w/ -O2 -fsel-sched-pipelining
-fselective-scheduling2 -funroll-loops:
__int128 i128_0;
int s_1;
int
func_6 (void);
int __attribute__ ((simd))
func_4 (void)
{
i128_0 = ~i128_0;
if (func_6 ())
s_1 = 0;
}
% x86_64-pc-linux-gnu-gcc-11.0.0 -O2 -fsel-sched-pipelining
-fselective-scheduling2 -funroll-loops -c mconkyrw.c
during RTL pass: split4
mconkyrw.c: In function 'func_4.simdclone.7':
mconkyrw.c:14:1: internal compiler error: Segmentation fault
14 | }
| ^
0xe033cf crash_signal
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/toplev.c:327
0x90c64c bitmap_list_find_element
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/bitmap.c:352
0x90c64c bitmap_bit_p(bitmap_head const*, int)
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/bitmap.c:995
0x1182ed9 ix86_ok_to_clobber_flags
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/config/i386/i386.c:15000
0x118379e ix86_avoid_lea_for_addr(rtx_insn*, rtx_def**)
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/config/i386/i386.c:15075
0x1786aa2 split_11
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/config/i386/i386.md:5192
0x179d83a split_insns(rtx_def*, rtx_insn*)
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/config/i386/i386.md:14096
0xa502b9 try_split(rtx_def*, rtx_insn*, int)
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/emit-rtl.c:3834
0xd65356 split_insn
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/recog.c:3361
0xd6aab7 split_all_insns()
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/recog.c:3465
0xd6ab68 execute
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20210214/work/gcc-11-20210214/gcc/recog.c:4383
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/99104] [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element)
2021-02-15 11:32 [Bug target/99104] New: [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element) asolokha at gmx dot com
@ 2021-02-15 12:06 ` jakub at gcc dot gnu.org
2021-02-15 12:52 ` jakub at gcc dot gnu.org
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-02-15 12:06 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99104
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
Status|UNCONFIRMED |ASSIGNED
Ever confirmed|0 |1
Target Milestone|--- |11.0
Assignee|unassigned at gcc dot gnu.org |jakub at gcc dot gnu.org
Last reconfirmed| |2021-02-15
Priority|P3 |P1
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Started with my r11-7235-g05402ca65a6696a8f20a3dbcb18f47ba3bdfa268
I'll have a look.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/99104] [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element)
2021-02-15 11:32 [Bug target/99104] New: [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element) asolokha at gmx dot com
2021-02-15 12:06 ` [Bug target/99104] " jakub at gcc dot gnu.org
@ 2021-02-15 12:52 ` jakub at gcc dot gnu.org
2021-02-15 14:46 ` rguenth at gcc dot gnu.org
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-02-15 12:52 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99104
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 50186
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50186&action=edit
gcc11-pr99104.patch
What a mess! Can we finally get rid of sel-sched?
The x86 backend uses DF inside of the splitter conditions which looks
problematic as the split passes don't really call df_analyze but so far we were
just lucky that the pass right before it maintained df.
Selective scheduling (unlike normal scheduling) can create new blocks with
insns that may need splitting and nothing computes the live or lr problem for
those.
So, either the backend needs to cope with df_get_live_out returning NULL, or,
because the pass_split_before_regstack pass is a single backend specific pass
(i386) we can call df_analyze there.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/99104] [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element)
2021-02-15 11:32 [Bug target/99104] New: [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element) asolokha at gmx dot com
2021-02-15 12:06 ` [Bug target/99104] " jakub at gcc dot gnu.org
2021-02-15 12:52 ` jakub at gcc dot gnu.org
@ 2021-02-15 14:46 ` rguenth at gcc dot gnu.org
2021-02-15 15:31 ` jakub at gcc dot gnu.org
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-02-15 14:46 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99104
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Well, at least if split() does not maintain DF then split patterns may not use
DF. It's as simple as that ;) Note you need DF analyze anyway since even
if present, the DF problem might be out-of-date.
Note when you add DF_LIVE you have to remove it manually again if optimize == 1
because there we do not maintain it (but the problem is still not optional).
I guess if the x86 backend wants to use DF but other backends do not and do
not want to pay the compile-time cost of a df_analyze we could put DF
setup into a target hooks hand ... (or a target hook returning the DF problems
it likes to have computed for split).
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/99104] [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element)
2021-02-15 11:32 [Bug target/99104] New: [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element) asolokha at gmx dot com
` (2 preceding siblings ...)
2021-02-15 14:46 ` rguenth at gcc dot gnu.org
@ 2021-02-15 15:31 ` jakub at gcc dot gnu.org
2021-02-15 16:59 ` jakub at gcc dot gnu.org
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-02-15 15:31 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99104
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |uros at gcc dot gnu.org
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Note, try_split actually makes some attempts to maintain df,
it calls emit_insn_after_setloc and delete_insn and the former in the end calls
df_set_bb_dirty and df_insn_rescan and the latter df_insn_delete.
So, one question is if ix86_ok_to_clobber_flags can safely use
FOR_EACH_INSN_USE (use, insn)
if (DF_REF_REG_USE_P (use) && DF_REF_REGNO (use) == FLAGS_REG)
return false;
if (insn_defines_reg (FLAGS_REG, INVALID_REGNUM, insn))
return true;
and another question is if it can safely use
live = df_get_live_out(bb);
return !REGNO_REG_SET_P (live, FLAGS_REG);
And, yes, perhaps a way out of this is a target hook that would initialize df
for insn splitting passes and return TODO_* to be returned.
All the split conditions that can call ix86_ok_to_clobber_flags are guarded
with reload_completed, so we could df_analyze just for split{2,3,4} (split5
isn't even invoked on x86).
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/99104] [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element)
2021-02-15 11:32 [Bug target/99104] New: [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element) asolokha at gmx dot com
` (3 preceding siblings ...)
2021-02-15 15:31 ` jakub at gcc dot gnu.org
@ 2021-02-15 16:59 ` jakub at gcc dot gnu.org
2021-02-18 8:22 ` cvs-commit at gcc dot gnu.org
2021-02-18 8:35 ` jakub at gcc dot gnu.org
6 siblings, 0 replies; 8+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-02-15 16:59 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99104
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #50186|0 |1
is obsolete| |
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 50188
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50188&action=edit
gcc11-pr99104.patch
Different (still untested) fix.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/99104] [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element)
2021-02-15 11:32 [Bug target/99104] New: [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element) asolokha at gmx dot com
` (4 preceding siblings ...)
2021-02-15 16:59 ` jakub at gcc dot gnu.org
@ 2021-02-18 8:22 ` cvs-commit at gcc dot gnu.org
2021-02-18 8:35 ` jakub at gcc dot gnu.org
6 siblings, 0 replies; 8+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-02-18 8:22 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99104
--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:
https://gcc.gnu.org/g:decd8fb0128870d0d768ba53dae626913d6d9c54
commit r11-7274-gdecd8fb0128870d0d768ba53dae626913d6d9c54
Author: Jakub Jelinek <jakub@redhat.com>
Date: Thu Feb 18 09:16:28 2021 +0100
i386: Fix up df uses in i386 splitters [PR99104]
The following testcase started ICEing with my recent changes to enable
split4 after sel-sched, but it seems the bug is more general.
Some of the i386 splitter condition functions use and rely on df, but
the split passes don't really df_analyze/df_finish_pass, so the DF info
may be stale or not computed at all - the particular ICE is because
there is a new bb and df_get_live_out (bb) returns NULL on it as the
live or lr problem has not been computed yet.
This patch fixes it by not calling ix86_ok_to_clobber_flags from
ix86_avoid_lea_for_add where it wasn't ever needed because the splitters
using that function as condition have (clobber FLAGS) in their pattern.
And, changes the ix86_avoid_lea_for_addr using splitter from normal
splitter
to peephole2 splitter that uses peep2_regno_dead_p infrastructure to
determine if FLAGS is dead. Also, it saves and restores recog_data
variable around the call to distance_non_agu_define and doesn't call
extract_insn_data there, because split_insns or peephole2_insns just
clear recog_data.insn and then fill in recog_data.operand array, and so
might not match what extract_insn will do on the insn at all.
2021-02-18 Jakub Jelinek <jakub@redhat.com>
PR target/99104
* config/i386/i386.c (distance_non_agu_define): Don't call
extract_insn_cached here.
(ix86_lea_outperforms): Save and restore recog_data around call
to distance_non_agu_define and distance_agu_use.
(ix86_ok_to_clobber_flags): Remove.
(ix86_avoid_lea_for_add): Don't call ix86_ok_to_clobber_flags.
(ix86_avoid_lea_for_addr): Likewise. Adjust function comment.
* config/i386/i386.md (*lea<mode>): Change from
define_insn_and_split
into define_insn. Move the splitting to define_peephole2 and
check there using peep2_regno_dead_p if FLAGS_REG is dead.
* gcc.dg/pr99104.c: New test.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/99104] [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element)
2021-02-15 11:32 [Bug target/99104] New: [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element) asolokha at gmx dot com
` (5 preceding siblings ...)
2021-02-18 8:22 ` cvs-commit at gcc dot gnu.org
@ 2021-02-18 8:35 ` jakub at gcc dot gnu.org
6 siblings, 0 replies; 8+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-02-18 8:35 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99104
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution|--- |FIXED
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Fixed.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-02-18 8:35 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-15 11:32 [Bug target/99104] New: [11 Regression] ICE: Segmentation fault (in bitmap_list_find_element) asolokha at gmx dot com
2021-02-15 12:06 ` [Bug target/99104] " jakub at gcc dot gnu.org
2021-02-15 12:52 ` jakub at gcc dot gnu.org
2021-02-15 14:46 ` rguenth at gcc dot gnu.org
2021-02-15 15:31 ` jakub at gcc dot gnu.org
2021-02-15 16:59 ` jakub at gcc dot gnu.org
2021-02-18 8:22 ` cvs-commit at gcc dot gnu.org
2021-02-18 8:35 ` jakub at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).