]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Remove fold_builtin pass [PR121762]
authorAndrew Pinski <andrew.pinski@oss.qualcomm.com>
Wed, 24 Sep 2025 04:36:00 +0000 (21:36 -0700)
committerAndrew Pinski <andrew.pinski@oss.qualcomm.com>
Fri, 3 Oct 2025 14:29:09 +0000 (07:29 -0700)
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.

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 <andrew.pinski@oss.qualcomm.com>
19 files changed:
gcc/doc/passes.texi
gcc/passes.def
gcc/testsuite/gcc.dg/builtin-unreachable-5.c
gcc/testsuite/gcc.dg/builtin-unreachable-6.c
gcc/testsuite/gcc.dg/builtin-unreachable-6a.c
gcc/testsuite/gcc.dg/builtin-unreachable-7.c
gcc/testsuite/gcc.dg/pr78408-2.c
gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c
gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c
gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c
gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c
gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c
gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c
gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c
gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c
gcc/testsuite/gcc.dg/tree-ssa/pr79691.c
gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c
gcc/tree-pass.h
gcc/tree-ssa-ccp.cc

index 282fc1a6a12b4f514dc7a629e8104f5374b18551..f6db15d5a5fcecb4c13fe5459c6420a60c3c4680 100644 (file)
@@ -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
index 3f828477b6873007c4f6390912ec398ff1c601da..fac04cd86c7da9c2053e3511ea91235e25ca2862 100644 (file)
@@ -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
index ba87bdd735e2cb47b91997b5c17c4fb32364a00e..91e6dcc3db1335dd9868a99a4f6c16943114349f 100644 (file)
@@ -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" } } */
index 4c3b9bbaefd016e9a1785560a909851600dfdf33..c896ad4e39ce057459e55ecc173e402fdfdb64e8 100644 (file)
@@ -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" } } */
index f527f2edc3b2ac56f92c3a3b2b8593dc3086a050..53062352d420710d849a38de7d19783c1152b5f0 100644 (file)
@@ -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" } } */
index a6c078fef285aaaf1ca95912167f7531ccc83163..0ff60b6550be52b2717462dc005f612beb676144 100644 (file)
@@ -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" } } */
 
index 89c9b7eae435c093fd7d641d6fd9c5ddf65064c2..cad1285f70e4a45b0d00978d4034e33210b95c6c 100644 (file)
@@ -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]; };
index 9e4501490dbb58d8dd71732c27cdfea89520ba72..31d7f70e441867a037d0aa2d6114952bec474ac5 100644 (file)
@@ -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"} } */
index f3de73acd86cf8c00cfac2f224ab1a176de86a3d..f4f18e8bebbf7c1da0953d51c7d552d66457c2d4 100644 (file)
@@ -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"} } */
index bd119e0e55bd11b4d47ffb0002d5473a81b25ebc..056edea65d2d511871c649a10e2124bfb8f47a5d 100644 (file)
@@ -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"} } */
index a0c0ef946f383ebd19308e67367b0cf73d38d334..1a9690fde1258a61f6d6fdb8c9f61b93f99e80e3 100644 (file)
@@ -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"} } */
index 29b4a4b4ebe71a15f9d8cff0836dbee55463c950..3124309198c68e7585c38e30ca241ee54da6e69e 100644 (file)
@@ -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"} } */
index c91c70921b505bc6e071aaa20372d84d326a534e..15ee7f9795265b8f076f2c763129e59c4c35fb04 100644 (file)
@@ -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"} } */
index 023384a3b81914b2433c72ad02af70016b5c242c..ed7a4ae05592bcd29ad487037bd4b726205437d4 100644 (file)
@@ -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"} } */
index 2b21f7b70e22f15b3ce647fb55c1c57df0d73664..b86fe33f0eddb9c249c2657b7cfafa231736f315 100644 (file)
@@ -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"} } */
index bf889318c063da46347e9c72e197d7f9caa1a849..43770c95bcab1e21abcac30b38945d3ceb70c78d 100644 (file)
@@ -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" } } */
index d6126a3e8efe5bedda54b8f1801769c6578633ba..dc87a56de06efda44e78b0390a4176e35bb92718 100644 (file)
@@ -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"} } */
index 61cec52c624881c76890e686fff1365abea40615..410341d47119c94cb194289798d33235fbbedf80 100644 (file)
@@ -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);
index c884fdfffd0146cfbfa7dfc3f98691ebc356ff58..6de02e5c7dcba8b604be67823a50a439601458c4 100644 (file)
@@ -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 {