https://gcc.gnu.org/g:ecb6eba763e671490384e70df26a85051012e2d1
commit r16-9096-gecb6eba763e671490384e70df26a85051012e2d1 Author: Richard Biener <[email protected]> Date: Tue Jun 2 14:56:12 2026 +0200 tree-optimization/125545 - reassoc insering after asm goto There's one case we can handle just fine which is when the asm goto has a single successor (it's fallthru edge, possibly shared with an asm goto label). As we're using dominance based insertion point discovery we have to handle this case. PR tree-optimization/125545 * tree-ssa-reassoc.cc (insert_stmt_after): Allow asm goto with a single successor. * gcc.dg/torture/pr125545.c: New testcase. (cherry picked from commit 31c818a7ff8f090e58379c52c7589f2e6e35de20) Diff: --- gcc/testsuite/gcc.dg/torture/pr125545.c | 9 +++++++++ gcc/tree-ssa-reassoc.cc | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/torture/pr125545.c b/gcc/testsuite/gcc.dg/torture/pr125545.c new file mode 100644 index 000000000000..084ce567851a --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr125545.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ + +int b(int c) +{ + int a; + __asm__ goto("" : "=r"(a) : : : d); +d: + return c && a != 42 && a >= 42; +} diff --git a/gcc/tree-ssa-reassoc.cc b/gcc/tree-ssa-reassoc.cc index 7abbf195520b..e0fc80974929 100644 --- a/gcc/tree-ssa-reassoc.cc +++ b/gcc/tree-ssa-reassoc.cc @@ -1521,7 +1521,8 @@ insert_stmt_after (gimple *stmt, gimple *insert_point) return; } else if (gimple_code (insert_point) == GIMPLE_ASM - && gimple_asm_nlabels (as_a <gasm *> (insert_point)) != 0) + && gimple_asm_nlabels (as_a <gasm *> (insert_point)) != 0 + && !single_succ_p (gimple_bb (insert_point))) /* We have no idea where to insert - it depends on where the uses will be placed. */ gcc_unreachable ();
