On Wed, Sep 24, 2025 at 11:06 AM Andrew Pinski
<[email protected]> wrote:
>
> After moving the last optimization out of fab, we can
> finally remove this pass.
> For -Og, we remove this pass and also swaps out the copy_prop
> for a forwprop (which does an integrated copy prop too).
>
> A few testcases needed to be updated.
> Most is just s/fab1/optimized/ except for pr79691.c which
> needed a slight change in the scaning of the optimized dump;
> to find `return 9;` instead of `= 9;`.
>
> Bootstrappd and tested on x86_64-linux-gnu.

OK.

Thanks,
Richard.

>         PR tree-optimization/121762
> gcc/ChangeLog:
>
>         * passes.def: Remove both pass_fold_builtin.
>         Swap out pass_copy_prop for pass_forwprop with
>         full_walk = false and last=true.
>         * tree-pass.h (make_pass_fold_builtins): Remove.
>         * tree-ssa-ccp.cc (class pass_fold_builtins): Delete.
>         (pass_fold_builtins::execute): Delete.
>         (make_pass_fold_builtins): Remove.
>         * doc/passes.texi (Folding built-in functions): Remove.
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.dg/tree-ssa/builtin-fprintf-1.c: Update to scan optimized.
>         * gcc.dg/tree-ssa/builtin-fprintf-chk-1.c: Likewise.
>         * gcc.dg/tree-ssa/builtin-printf-1.c: Likewise.
>         * gcc.dg/tree-ssa/builtin-printf-chk-1.c: Likewise.
>         * gcc.dg/tree-ssa/builtin-vfprintf-1.c: Likewise.
>         * gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c: Likewise.
>         * gcc.dg/tree-ssa/builtin-vprintf-1.c: Likewise.
>         * gcc.dg/tree-ssa/builtin-vprintf-chk-1.c: Likewise.
>         * gcc.dg/tree-ssa/ssa-ccp-10.c: Likewise.
>         * gcc.dg/builtin-unreachable-5.c: Likewise.
>         * gcc.dg/builtin-unreachable-6.c: Likewise.
>         * gcc.dg/builtin-unreachable-6a.c: Likewise.
>         * gcc.dg/builtin-unreachable-7.c: Likewise.
>         * gcc.dg/pr78408-2.c: Change fab1 to forwprop1 as that
>         optimization was moved there a while back.
>         * gcc.dg/tree-ssa/pr79691.c: Udpate scanning for 9
>         constant to return.
>
> Signed-off-by: Andrew Pinski <[email protected]>
> ---
>  gcc/doc/passes.texi                           |   6 -
>  gcc/passes.def                                |   8 +-
>  gcc/testsuite/gcc.dg/builtin-unreachable-5.c  |  10 +-
>  gcc/testsuite/gcc.dg/builtin-unreachable-6.c  |   6 +-
>  gcc/testsuite/gcc.dg/builtin-unreachable-6a.c |   6 +-
>  gcc/testsuite/gcc.dg/builtin-unreachable-7.c  |   8 +-
>  gcc/testsuite/gcc.dg/pr78408-2.c              |   4 +-
>  .../gcc.dg/tree-ssa/builtin-fprintf-1.c       |  20 ++--
>  .../gcc.dg/tree-ssa/builtin-fprintf-chk-1.c   |  20 ++--
>  .../gcc.dg/tree-ssa/builtin-printf-1.c        |  22 ++--
>  .../gcc.dg/tree-ssa/builtin-printf-chk-1.c    |  22 ++--
>  .../gcc.dg/tree-ssa/builtin-vfprintf-1.c      |  16 +--
>  .../gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c  |  16 +--
>  .../gcc.dg/tree-ssa/builtin-vprintf-1.c       |  16 +--
>  .../gcc.dg/tree-ssa/builtin-vprintf-chk-1.c   |  16 +--
>  gcc/testsuite/gcc.dg/tree-ssa/pr79691.c       |   2 +-
>  gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c    |   4 +-
>  gcc/tree-pass.h                               |   1 -
>  gcc/tree-ssa-ccp.cc                           | 108 ------------------
>  19 files changed, 96 insertions(+), 215 deletions(-)
>
> diff --git a/gcc/doc/passes.texi b/gcc/doc/passes.texi
> index 282fc1a6a12..f6db15d5a5f 100644
> --- a/gcc/doc/passes.texi
> +++ b/gcc/doc/passes.texi
> @@ -735,12 +735,6 @@ cannot be used for branch prediction (though adapting it 
> would
>  not be difficult).  The pass is located in @file{tree-vrp.cc} and is
>  described by @code{pass_vrp}.
>
> -@item Folding built-in functions
> -
> -This pass simplifies built-in functions, as applicable, with constant
> -arguments or with inferable string lengths.  It is located in
> -@file{tree-ssa-ccp.cc} and is described by @code{pass_fold_builtins}.
> -
>  @item Split critical edges
>
>  This pass identifies critical edges and inserts empty basic blocks
> diff --git a/gcc/passes.def b/gcc/passes.def
> index 3f828477b68..fac04cd86c7 100644
> --- a/gcc/passes.def
> +++ b/gcc/passes.def
> @@ -369,7 +369,6 @@ along with GCC; see the file COPYING3.  If not see
>        NEXT_PASS (pass_forwprop, /*full_walk=*/false, /*last=*/true);
>        NEXT_PASS (pass_sink_code, true /* unsplit edges */);
>        NEXT_PASS (pass_phiopt, false /* early_p */);
> -      NEXT_PASS (pass_fold_builtins);
>        NEXT_PASS (pass_optimize_widening_mul);
>        NEXT_PASS (pass_store_merging);
>        /* If DCE is not run before checking for uninitialized uses,
> @@ -405,12 +404,9 @@ along with GCC; see the file COPYING3.  If not see
>        NEXT_PASS (pass_ccp, true /* nonzero_p */);
>        NEXT_PASS (pass_post_ipa_warn);
>        NEXT_PASS (pass_object_sizes);
> -      /* Fold remaining builtins.  */
> -      NEXT_PASS (pass_fold_builtins);
>        NEXT_PASS (pass_strlen);
> -      /* Copy propagation also copy-propagates constants, this is necessary
> -         to forward object-size and builtin folding results properly.  */
> -      NEXT_PASS (pass_copy_prop);
> +      /* Fold remaining builtins.  */
> +      NEXT_PASS (pass_forwprop, /*full_walk=*/false, /*last=*/true);
>        NEXT_PASS (pass_dce);
>        /* Profile count may overflow as a result of inlinining very large
>           loop nests.  This pass should run before any late pass that makes
> diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-5.c 
> b/gcc/testsuite/gcc.dg/builtin-unreachable-5.c
> index ba87bdd735e..91e6dcc3db1 100644
> --- a/gcc/testsuite/gcc.dg/builtin-unreachable-5.c
> +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-5.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1" } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
>
>  int
>  foo (int a)
> @@ -16,7 +16,7 @@ foo (int a)
>    return a > 0;
>  }
>
> -/* { dg-final { scan-tree-dump-times "if \\(" 0 "fab1" } } */
> -/* { dg-final { scan-tree-dump-times "goto" 0 "fab1" } } */
> -/* { dg-final { scan-tree-dump-times "L1:" 0 "fab1" } } */
> -/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 0 "fab1" } } */
> +/* { dg-final { scan-tree-dump-times "if \\(" 0 "optimized" } } */
> +/* { dg-final { scan-tree-dump-times "goto" 0 "optimized" } } */
> +/* { dg-final { scan-tree-dump-times "L1:" 0 "optimized" } } */
> +/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 0 "optimized" } 
> } */
> diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-6.c 
> b/gcc/testsuite/gcc.dg/builtin-unreachable-6.c
> index 4c3b9bbaefd..c896ad4e39c 100644
> --- a/gcc/testsuite/gcc.dg/builtin-unreachable-6.c
> +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-6.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1 -fno-tree-dominator-opts 
> -fno-tree-vrp" } */
> +/* { dg-options "-O2 -fdump-tree-optimized -fno-tree-dominator-opts 
> -fno-tree-vrp" } */
>  /* { dg-require-effective-target label_values } */
>
>  void
> @@ -17,5 +17,5 @@ lab2:
>    goto *x;
>  }
>
> -/* { dg-final { scan-tree-dump-times "lab:" 1 "fab1" } } */
> -/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "fab1" } } */
> +/* { dg-final { scan-tree-dump-times "lab:" 1 "optimized" } } */
> +/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "optimized" } 
> } */
> diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c 
> b/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c
> index f527f2edc3b..53062352d42 100644
> --- a/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c
> +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c
> @@ -1,7 +1,7 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1" } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
>
>  #include "builtin-unreachable-6.c"
>
> -/* { dg-final { scan-tree-dump-times "lab:" 1 "fab1" } } */
> -/* { dg-final { scan-tree-dump-not "__builtin_unreachable" "fab1" } } */
> +/* { dg-final { scan-tree-dump-times "lab:" 1 "optimized" } } */
> +/* { dg-final { scan-tree-dump-not "__builtin_unreachable" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-7.c 
> b/gcc/testsuite/gcc.dg/builtin-unreachable-7.c
> index a6c078fef28..0ff60b6550b 100644
> --- a/gcc/testsuite/gcc.dg/builtin-unreachable-7.c
> +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-7.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1 -fno-tree-dominator-opts 
> -fno-tree-vrp" } */
> +/* { dg-options "-O2 -fdump-tree-optimized -fno-tree-dominator-opts 
> -fno-tree-vrp" } */
>  /* { dg-require-effective-target label_values } */
>
>  void foo (int b, int c)
> @@ -18,7 +18,7 @@ lab2:
>
>  /* Fab should still able to remove the conditional but leave the bb there. */
>
> -/* { dg-final { scan-tree-dump-times "lab:" 1 "fab1" } } */
> -/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "fab1" } } */
> -/* { dg-final { scan-tree-dump-not "if " "fab1" } } */
> +/* { dg-final { scan-tree-dump-times "lab:" 1 "optimized" } } */
> +/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "optimized" } 
> } */
> +/* { dg-final { scan-tree-dump-not "if " "optimized" } } */
>
> diff --git a/gcc/testsuite/gcc.dg/pr78408-2.c 
> b/gcc/testsuite/gcc.dg/pr78408-2.c
> index 89c9b7eae43..cad1285f70e 100644
> --- a/gcc/testsuite/gcc.dg/pr78408-2.c
> +++ b/gcc/testsuite/gcc.dg/pr78408-2.c
> @@ -1,7 +1,7 @@
>  /* PR c/78408 */
>  /* { dg-do compile { target size32plus } } */
> -/* { dg-options "-O2 -fdump-tree-fab1-details" } */
> -/* { dg-final { scan-tree-dump-not "after previous" "fab1" } } */
> +/* { dg-options "-O2 -fdump-tree-forwprop1-details" } */
> +/* { dg-final { scan-tree-dump-not "after previous" "forwprop1" } } */
>
>  struct S { char a[32]; };
>  struct T { char a[65536]; };
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c
> index 9e4501490db..31d7f70e441 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1" } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
>
>  typedef struct { int i; } FILE;
>  FILE *fp;
> @@ -29,12 +29,12 @@ void test (void)
>    vi9 = 0;
>  }
>
> -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi8.*fprintf.*fp.*\"%d%d\".*vi9" "fab1"} } */
> +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} 
> } */
> +/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi8.*fprintf.*fp.*\"%d%d\".*vi9" 
> "optimized"} } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c
> index f3de73acd86..f4f18e8bebb 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1" } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
>
>  typedef struct { int i; } FILE;
>  FILE *fp;
> @@ -29,12 +29,12 @@ void test (void)
>    vi9 = 0;
>  }
>
> -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi8.*__fprintf_chk.*fp.*1.*\"%d%d\".*vi9" 
> "fab1"} } */
> +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} 
> } */
> +/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi8.*__fprintf_chk.*fp.*1.*\"%d%d\".*vi9" 
> "optimized"} } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c
> index bd119e0e55b..056edea65d2 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1" } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
>
>  extern int printf (const char *, ...);
>  volatile int vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7, vi8, vi9, via;
> @@ -29,13 +29,13 @@ void test (void)
>    via = 0;
>  }
>
> -/* { dg-final { scan-tree-dump "vi0.*printf.*\"hello\".*vi1" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi4.*printf.*\"hello\".*vi5" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "fab1"} } */
> +/* { dg-final { scan-tree-dump "vi0.*printf.*\"hello\".*vi1" "optimized"} } 
> */
> +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} 
> } */
> +/* { dg-final { scan-tree-dump "vi4.*printf.*\"hello\".*vi5" "optimized"} } 
> */
> +/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "optimized"} 
> } */
> +/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "optimized"} 
> } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c
> index a0c0ef946f3..1a9690fde12 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1" } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
>
>  extern int __printf_chk (int, const char *, ...);
>  volatile int vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7, vi8, vi9, via;
> @@ -29,13 +29,13 @@ void test (void)
>    via = 0;
>  }
>
> -/* { dg-final { scan-tree-dump "vi0.*__printf_chk.*1.*\"hello\".*vi1" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi4.*__printf_chk.*1.*\"hello\".*vi5" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "fab1"} } */
> +/* { dg-final { scan-tree-dump "vi0.*__printf_chk.*1.*\"hello\".*vi1" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} 
> } */
> +/* { dg-final { scan-tree-dump "vi4.*__printf_chk.*1.*\"hello\".*vi5" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "optimized"} 
> } */
> +/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "optimized"} 
> } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c
> index 29b4a4b4ebe..3124309198c 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1" } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
>
>  #include <stdarg.h>
>
> @@ -29,10 +29,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, 
> va_list ap5,
>    vi7 = 0;
>  }
>
> -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi4.*vfprintf.*\"%s\".*vi5" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi5.*vfprintf.*\"%c\".*vi6" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi6.*vfprintf.*\"%s\\\\n\".*vi7" "fab1"} } */
> +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} 
> } */
> +/* { dg-final { scan-tree-dump "vi4.*vfprintf.*\"%s\".*vi5" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi5.*vfprintf.*\"%c\".*vi6" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi6.*vfprintf.*\"%s\\\\n\".*vi7" 
> "optimized"} } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c
> index c91c70921b5..15ee7f97952 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1" } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
>
>  #include <stdarg.h>
>
> @@ -29,10 +29,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, 
> va_list ap5,
>    vi7 = 0;
>  }
>
> -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi4.*__vfprintf_chk.*fp.*1.*\"%s\".*vi5" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi5.*__vfprintf_chk.*fp.*1.*\"%c\".*vi6" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump 
> "vi6.*__vfprintf_chk.*fp.*1.*\"%s\\\\n\".*vi7" "fab1"} } */
> +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} 
> } */
> +/* { dg-final { scan-tree-dump "vi4.*__vfprintf_chk.*fp.*1.*\"%s\".*vi5" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi5.*__vfprintf_chk.*fp.*1.*\"%c\".*vi6" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump 
> "vi6.*__vfprintf_chk.*fp.*1.*\"%s\\\\n\".*vi7" "optimized"} } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c
> index 023384a3b81..ed7a4ae0559 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1" } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
>
>  #include <stdarg.h>
>
> @@ -27,10 +27,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, 
> va_list ap5,
>    vi7 = 0;
>  }
>
> -/* { dg-final { scan-tree-dump "vi0.*vprintf.*\"hello\".*vi1" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi4.*vprintf.*\"%s\".*vi5" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi5.*vprintf.*\"%c\".*vi6" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi6.*vprintf.*\"%s\\\\n\".*vi7" "fab1"} } */
> +/* { dg-final { scan-tree-dump "vi0.*vprintf.*\"hello\".*vi1" "optimized"} } 
> */
> +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} 
> } */
> +/* { dg-final { scan-tree-dump "vi4.*vprintf.*\"%s\".*vi5" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi5.*vprintf.*\"%c\".*vi6" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi6.*vprintf.*\"%s\\\\n\".*vi7" "optimized"} 
> } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c
> index 2b21f7b70e2..b86fe33f0ed 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-fab1" } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
>
>  #include <stdarg.h>
>
> @@ -27,10 +27,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, 
> va_list ap5,
>    vi7 = 0;
>  }
>
> -/* { dg-final { scan-tree-dump "vi0.*__vprintf_chk.*1.*\"hello\".*vi1" 
> "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */
> -/* { dg-final { scan-tree-dump "vi4.*__vprintf_chk.*1.*\"%s\".*vi5" "fab1"} 
> } */
> -/* { dg-final { scan-tree-dump "vi5.*__vprintf_chk.*1.*\"%c\".*vi6" "fab1"} 
> } */
> -/* { dg-final { scan-tree-dump "vi6.*__vprintf_chk.*1.*\"%s\\\\n\".*vi7" 
> "fab1"} } */
> +/* { dg-final { scan-tree-dump "vi0.*__vprintf_chk.*1.*\"hello\".*vi1" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} 
> } */
> +/* { dg-final { scan-tree-dump "vi4.*__vprintf_chk.*1.*\"%s\".*vi5" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi5.*__vprintf_chk.*1.*\"%c\".*vi6" 
> "optimized"} } */
> +/* { dg-final { scan-tree-dump "vi6.*__vprintf_chk.*1.*\"%s\\\\n\".*vi7" 
> "optimized"} } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c
> index bf889318c06..43770c95bca 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c
> @@ -34,4 +34,4 @@ int f4 (int i)
>
>  /* { dg-final { scan-tree-dump-times "sprintf" 1 "optimized" } }
>     { dg-final { scan-tree-dump-times "snprintf" 1 "optimized" } }
> -   { dg-final { scan-tree-dump " = 9;" "optimized" } } */
> +   { dg-final { scan-tree-dump "return 9;" "optimized" } } */
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c 
> b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c
> index d6126a3e8ef..dc87a56de06 100644
> --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O1 -fdump-tree-fab1" } */
> +/* { dg-options "-O1 -fdump-tree-optimized" } */
>
>  /* Check that we fold strlen of equally long strings, and that we do not
>     fail to terminate when there is a nontrivial cycle in the corresponding
> @@ -32,4 +32,4 @@ middle:
>  }
>
>  /* There should be no calls to strlen.  */
> -/* { dg-final { scan-tree-dump-times "strlen" 0 "fab1"} } */
> +/* { dg-final { scan-tree-dump-times "strlen" 0 "optimized"} } */
> diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
> index 61cec52c624..410341d4711 100644
> --- a/gcc/tree-pass.h
> +++ b/gcc/tree-pass.h
> @@ -447,7 +447,6 @@ extern gimple_opt_pass *make_pass_warn_access 
> (gcc::context *ctxt);
>  extern gimple_opt_pass *make_pass_warn_printf (gcc::context *ctxt);
>  extern gimple_opt_pass *make_pass_warn_recursion (gcc::context *ctxt);
>  extern gimple_opt_pass *make_pass_strlen (gcc::context *ctxt);
> -extern gimple_opt_pass *make_pass_fold_builtins (gcc::context *ctxt);
>  extern gimple_opt_pass *make_pass_post_ipa_warn (gcc::context *ctxt);
>  extern gimple_opt_pass *make_pass_stdarg (gcc::context *ctxt);
>  extern gimple_opt_pass *make_pass_early_warn_uninitialized (gcc::context 
> *ctxt);
> diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc
> index c884fdfffd0..6de02e5c7dc 100644
> --- a/gcc/tree-ssa-ccp.cc
> +++ b/gcc/tree-ssa-ccp.cc
> @@ -3085,114 +3085,6 @@ make_pass_ccp (gcc::context *ctxt)
>    return new pass_ccp (ctxt);
>  }
>
> -/* A simple pass that attempts to fold all builtin functions.  This pass
> -   is run after we've propagated as many constants as we can.  */
> -
> -namespace {
> -
> -const pass_data pass_data_fold_builtins =
> -{
> -  GIMPLE_PASS, /* type */
> -  "fab", /* name */
> -  OPTGROUP_NONE, /* optinfo_flags */
> -  TV_NONE, /* tv_id */
> -  ( PROP_cfg | PROP_ssa ), /* properties_required */
> -  0, /* properties_provided */
> -  0, /* properties_destroyed */
> -  0, /* todo_flags_start */
> -  TODO_update_ssa, /* todo_flags_finish */
> -};
> -
> -class pass_fold_builtins : public gimple_opt_pass
> -{
> -public:
> -  pass_fold_builtins (gcc::context *ctxt)
> -    : gimple_opt_pass (pass_data_fold_builtins, ctxt)
> -  {}
> -
> -  /* opt_pass methods: */
> -  opt_pass * clone () final override { return new pass_fold_builtins 
> (m_ctxt); }
> -  unsigned int execute (function *) final override;
> -
> -}; // class pass_fold_builtins
> -
> -unsigned int
> -pass_fold_builtins::execute (function *fun)
> -{
> -  bool cfg_changed = false;
> -  basic_block bb;
> -  unsigned int todoflags = 0;
> -
> -  /* Set last full fold prop if not already set. */
> -  fun->curr_properties |= PROP_last_full_fold;
> -
> -  FOR_EACH_BB_FN (bb, fun)
> -    {
> -      gimple_stmt_iterator i;
> -      for (i = gsi_start_bb (bb); !gsi_end_p (i); )
> -       {
> -         gimple *stmt, *old_stmt;
> -
> -         stmt = gsi_stmt (i);
> -
> -         if (gimple_code (stmt) != GIMPLE_CALL)
> -           {
> -             gsi_next (&i);
> -             continue;
> -           }
> -
> -         /* Only fold internal calls
> -            or normal builtins. */
> -         if (!gimple_call_internal_p (stmt)
> -             && !gimple_call_builtin_p (stmt, BUILT_IN_NORMAL))
> -           {
> -             gsi_next (&i);
> -             continue;
> -           }
> -         if (!fold_stmt (&i))
> -           {
> -             gsi_next (&i);
> -             continue;
> -           }
> -         if (dump_file && (dump_flags & TDF_DETAILS))
> -           {
> -             fprintf (dump_file, "Simplified\n  ");
> -             print_gimple_stmt (dump_file, stmt, 0, dump_flags);
> -           }
> -
> -         old_stmt = stmt;
> -         stmt = gsi_stmt (i);
> -         update_stmt (stmt);
> -
> -         if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt)
> -             && gimple_purge_dead_eh_edges (bb))
> -           cfg_changed = true;
> -
> -         if (dump_file && (dump_flags & TDF_DETAILS))
> -           {
> -             fprintf (dump_file, "to\n  ");
> -             print_gimple_stmt (dump_file, stmt, 0, dump_flags);
> -             fprintf (dump_file, "\n");
> -           }
> -         gsi_next (&i);
> -       }
> -    }
> -
> -  /* Delete unreachable blocks.  */
> -  if (cfg_changed)
> -    todoflags |= TODO_cleanup_cfg;
> -
> -  return todoflags;
> -}
> -
> -} // anon namespace
> -
> -gimple_opt_pass *
> -make_pass_fold_builtins (gcc::context *ctxt)
> -{
> -  return new pass_fold_builtins (ctxt);
> -}
> -
>  /* A simple pass that emits some warnings post IPA.  */
>
>  namespace {
> --
> 2.43.0
>

Reply via email to