From 891ea0b202c2d55025847bbbb4d86d1f50f5257c Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Thu, 16 Apr 2026 14:26:43 -0700 Subject: [PATCH] phiopt: Set cfgchanged if cselim-limited happened I noticed while improving cselim-limited that if not creating a new phi, there are a few empty basic blocks. So this sets cfgcleanup when cselim-limited does something in phiopt. cselim-5.c shows the case I was looking into. gcc/ChangeLog: * tree-ssa-phiopt.cc (pass_phiopt::execute): Set cfgcleanup if cselim_limited returns true. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/cselim-5.c: New test. Signed-off-by: Andrew Pinski --- gcc/testsuite/gcc.dg/tree-ssa/cselim-5.c | 16 ++++++++++++++++ gcc/tree-ssa-phiopt.cc | 5 +++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/cselim-5.c diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cselim-5.c b/gcc/testsuite/gcc.dg/tree-ssa/cselim-5.c new file mode 100644 index 00000000000..8d1335f174a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/cselim-5.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-phiopt1" } */ + +int t; +void f(int a, int b, int c, int d) +{ + if (b) + t = 0; + else + t = 0; +} + +/* We should sink/merge the stores and end up with a single BB. */ + +/* { dg-final { scan-tree-dump-times "t = 0;" 1 "phiopt1" } } */ +/* { dg-final { scan-tree-dump-times "preds) == 2 && !optimize_debug) while (cond_if_else_store_replacement_limited (bb1, bb2, bb3)) - ; + cfgchanged = true; } gimple_stmt_iterator gsi;