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 >
