I'm looking for an approval of the attached patch. I've adjusted the documentation based on Sandra's input (i.e., documented the negative of the option rather than the positive; thank you for the review, btw.)
On 11/08/2016 08:13 PM, Martin Sebor wrote:
The -fprintf-return-value optimization has been disabled since the last time it caused a bootstrap failure on powerpc64le. With the underlying problems fixed GCC has bootstrapped fine on all of powerpc64, powerpc64le and x86_64 and tested with no regressions. I'd like to re-enable the option. The attached patch does that. Thanks Martin
gcc/c-family/ChangeLog: * c.opt (-fprintf-return-value): Enable by default. gcc/ChangeLog: * doc/invoke.texi (-fprintf-return-value): Document that option is enabled by default. Index: gcc/c-family/c.opt =================================================================== --- gcc/c-family/c.opt (revision 242500) +++ gcc/c-family/c.opt (working copy) @@ -1550,7 +1550,7 @@ C++ ObjC++ Var(flag_pretty_templates) Init(1) -fno-pretty-templates Do not pretty-print template specializations as the template signature followed by the arguments. fprintf-return-value -C ObjC C++ ObjC++ LTO Optimization Var(flag_printf_return_value) Init(0) +C ObjC C++ ObjC++ LTO Optimization Var(flag_printf_return_value) Init(1) Treat known sprintf return values as constants. freplace-objc-classes Index: gcc/doc/invoke.texi =================================================================== --- gcc/doc/invoke.texi (revision 242500) +++ gcc/doc/invoke.texi (working copy) @@ -384,7 +384,7 @@ Objective-C and Objective-C++ Dialects}. -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol -fomit-frame-pointer -foptimize-sibling-calls @gol -fpartial-inlining -fpeel-loops -fpredictive-commoning @gol --fprefetch-loop-arrays -fprintf-return-value @gol +-fprefetch-loop-arrays -fno-printf-return-value @gol -fprofile-correction @gol -fprofile-use -fprofile-use=@var{path} -fprofile-values @gol -fprofile-reorder-functions @gol @@ -8286,18 +8286,19 @@ dependent on the structure of loops within the sou Disabled at level @option{-Os}. -@item -fprintf-return-value -@opindex fprintf-return-value -Substitute constants for known return value of formatted output functions -such as @code{sprintf}, @code{snprintf}, @code{vsprintf}, and @code{vsnprintf} -(but not @code{printf} of @code{fprintf}). This transformation allows GCC -to optimize or even eliminate branches based on the known return value of -these functions called with arguments that are either constant, or whose -values are known to be in a range that makes determining the exact return -value possible. For example, both the branch and the body of the @code{if} -statement (but not the call to @code{snprint}) can be optimized away when -@code{i} is a 32-bit or smaller integer because the return value is guaranteed -to be at most 8. +@item -fno-printf-return-value +@opindex fno-printf-return-value +Do not substitute constants for known return value of formatted output +functions such as @code{sprintf}, @code{snprintf}, @code{vsprintf}, and +@code{vsnprintf} (but not @code{printf} or @code{fprintf}). This +transformation allows GCC to optimize or even eliminate branches based +on the known return value of these functions called with arguments that +are either constant, or whose values are known to be in a range that +makes determining the exact return value possible. For example, when +@option{-fprintf-return-value} is in effect, both the branch and the +body of the @code{if} statement (but not the call to @code{snprintf}) +can be optimized away when @code{i} is a 32-bit or smaller integer +because the return value is guaranteed to be at most 8. @smallexample char buf[9]; @@ -8308,7 +8309,7 @@ if (snprintf (buf, "%08x", i) >= sizeof buf) The @option{-fprintf-return-value} option relies on other optimizations and yields best results with @option{-O2}. It works in tandem with the @option{-Wformat-length} option. The @option{-fprintf-return-value} -option is disabled by default. +option is enabled by default. @item -fno-peephole @itemx -fno-peephole2