]> git.ipfire.org Git - thirdparty/gcc.git/commit
middle-end: fix ICE when moving statements to empty BB [PR113731]
authorTamar Christina <tamar.christina@arm.com>
Wed, 7 Feb 2024 10:58:25 +0000 (10:58 +0000)
committerTamar Christina <tamar.christina@arm.com>
Wed, 7 Feb 2024 10:58:25 +0000 (10:58 +0000)
commit8f6ed71d8fff3c3c6249651a72aee084e31ffb9e
treeabc73dbd238934914851f11225c49ad41df93b23
parent194d0956ef5992d4e453bde3eb5772dc077f610c
middle-end: fix ICE when moving statements to empty BB [PR113731]

We use gsi_move_before (&stmt_gsi, &dest_gsi); to request that the new statement
be placed before any other statement.  Typically this then moves the current
pointer to be after the statement we just inserted.

However it looks like when the BB is empty, this does not happen and the CUR
pointer stays NULL.   There's a comment in the source of gsi_insert_before that
explains:

/* If CUR is NULL, we link at the end of the sequence (this case happens

This adds a default parameter to gsi_move_before to allow us to control where
the insertion happens.

gcc/ChangeLog:

PR tree-optimization/113731
* gimple-iterator.cc (gsi_move_before): Take new parameter for update
method.
* gimple-iterator.h (gsi_move_before): Default new param to
GSI_SAME_STMT.
* tree-vect-loop.cc (move_early_exit_stmts): Call gsi_move_before with
GSI_NEW_STMT.

gcc/testsuite/ChangeLog:

PR tree-optimization/113731
* gcc.dg/vect/vect-early-break_111-pr113731.c: New test.
gcc/gimple-iterator.cc
gcc/gimple-iterator.h
gcc/testsuite/gcc.dg/vect/vect-early-break_111-pr113731.c [new file with mode: 0644]
gcc/tree-vect-loop.cc