The following fails, likely a recent regression: $ cat asmgoto.c int foo_a1, foo_a2; int foo() { int v0, x; asm goto("" : "=r"(x) : : : lab); lab: v0 += x + x; return v0 + x + foo_a1 + foo_a2; } $ s390x-linux-gnu-gcc asmgoto.c -fwrapv --param=tree-reassoc-width=2 -O2 during GIMPLE pass: reassoc asmgoto.c: In function ‘foo’: asmgoto.c:4:5: internal compiler error: in insert_stmt_after, at tree-ssa-reassoc.c:1452 4 | int foo() { | ^~~ 0x5c5300 insert_stmt_after /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-s390x/build/gcc/tree-ssa-reassoc.c:1452 0xc51ad4 build_and_add_sum /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-s390x/build/gcc/tree-ssa-reassoc.c:1517 0xc51e39 rewrite_expr_tree_parallel /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-s390x/build/gcc/tree-ssa-reassoc.c:5396 0xc621f7 reassociate_bb /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-s390x/build/gcc/tree-ssa-reassoc.c:6682 0xc5fde8 reassociate_bb /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-s390x/build/gcc/tree-ssa-reassoc.c:6743 0xc62b6c do_reassoc /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-s390x/build/gcc/tree-ssa-reassoc.c:6855 0xc62b6c execute_reassoc /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-s390x/build/gcc/tree-ssa-reassoc.c:6942 0xc62b6c execute /home/marxin/BIG/buildbot/buildworker/marxinbox-gcc-trunk-s390x/build/gcc/tree-ssa-reassoc.c:6981 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions.
Hmm, my can_reassociate_p patch isn't enough to fend of asm goto defs... Will have to look again for a suitable place to check this :/
The master branch has been updated by Richard Biener <rguenth@gcc.gnu.org>: https://gcc.gnu.org/g:cd36bbb2281ada10b5e1df143ecf64b88cdb8119 commit r12-745-gcd36bbb2281ada10b5e1df143ecf64b88cdb8119 Author: Richard Biener <rguenther@suse.de> Date: Tue May 11 14:59:59 2021 +0200 tree-optimization/100519 - avoid reassociating asm goto defs This splits can_associate_p into checks for SSA defs and checks for the type so it can be called from is_reassociable_op to catch cases not catched by the earlier fix. 2021-05-11 Richard Biener <rguenther@suse.de> PR tree-optimization/100519 * tree-ssa-reassoc.c (can_associate_p): Split into... (can_associate_op_p): ... this (can_associate_type_p): ... and this. (is_reassociable_op): Call can_associate_op_p. (break_up_subtract_bb): Call the appropriate predicates. (reassociate_bb): Likewise. * gcc.dg/torture/pr100519.c: New testcase.
Fixed on trunk sofar.
The releases/gcc-11 branch has been updated by Richard Biener <rguenth@gcc.gnu.org>: https://gcc.gnu.org/g:edd7bbe0e96a0d45d6ae142c5809ef1cae6c0999 commit r11-8465-gedd7bbe0e96a0d45d6ae142c5809ef1cae6c0999 Author: Richard Biener <rguenther@suse.de> Date: Tue May 11 14:59:59 2021 +0200 tree-optimization/100519 - avoid reassociating asm goto defs This splits can_associate_p into checks for SSA defs and checks for the type so it can be called from is_reassociable_op to catch cases not catched by the earlier fix. 2021-05-11 Richard Biener <rguenther@suse.de> PR tree-optimization/100519 * tree-ssa-reassoc.c (can_associate_p): Split into... (can_associate_op_p): ... this (can_associate_type_p): ... and this. (is_reassociable_op): Call can_associate_op_p. (break_up_subtract_bb): Call the appropriate predicates. (reassociate_bb): Likewise. * gcc.dg/torture/pr100519.c: New testcase. (cherry picked from commit cd36bbb2281ada10b5e1df143ecf64b88cdb8119)
Fixed.