Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On 03/12/2017 05:23 PM, Gerald Pfeifer wrote: Hi Martin, On Mon, 27 Feb 2017, Martin Sebor wrote: Sorry to be jumping in so late. I only noticed this bit now. I would suggest to say that these new built-ins evaluate to integer constant expressions when their arguments do. Not all C programmers are familiar with C++ constexpr so they may not understand the use use case. The request for these built-ins also came from a C user and was specifically motivated by avoiding -Woverflow warnings so adding an example demonstrating that might be helpful as well. Something like this: ... Calls to these built-ins with integer constant arguments evaluate to integer constants expressions. For example, in the following, c is assigned the result of a * b only if the multiplication does not overflow, otherwise it is assigned the value zero. The multiplication is performed at compile-time and without triggering a -Woverflow warning. enum { a = 12345678, b = 87654321, c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b }; this works for me, modulo the closing which I believe will be necessary. Were you seeing approval for this from someone? (If so, that may not have been me. ;-) Thanks. I just committed it. Martin
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
Hi Martin, On Mon, 27 Feb 2017, Martin Sebor wrote: > Sorry to be jumping in so late. I only noticed this bit now. > > I would suggest to say that these new built-ins evaluate to integer > constant expressions when their arguments do. Not all C programmers > are familiar with C++ constexpr so they may not understand the use > use case. The request for these built-ins also came from a C user > and was specifically motivated by avoiding -Woverflow warnings so > adding an example demonstrating that might be helpful as well. > Something like this: > > ... Calls to these built-ins with integer constant arguments > evaluate to integer constants expressions. > For example, in the following, c is assigned > the result of a * b only if the multiplication > does not overflow, otherwise it is assigned the value zero. > The multiplication is performed at compile-time and without > triggering a -Woverflow warning. > > enum { > a = 12345678, > b = 87654321, > c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b > }; > this works for me, modulo the closing which I believe will be necessary. Were you seeing approval for this from someone? (If so, that may not have been me. ;-) Gerald
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
Hi, On Mon, Feb 27, 2017 at 02:42:58PM -0800, Gerald Pfeifer wrote: > Hi Martin, > > at first I was surprised to see two suggestions from -- until I > realized those came from the two (Martins) of you. ;-) > > On Mon, 27 Feb 2017, Martin Jambor wrote: > > on top of your patch, I would like to propose the following. What do > > you think? > > > > Index: changes.html > > === > > + -Os). This optimization and its option supersede > > + interprocedural alignment propagation of gcc 6, and therefore the > > + option -fipa-cp-alignment is now deprecated and > > + ignored. > > Make it "GCC 6" (all uppercase) and consider just saying "This > supersedes" or "This optimization supersedes", and I'll think I > like it. :-) > thanks for the review, I have committed the following then. Martin Index: changes.html === RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/changes.html,v retrieving revision 1.69 diff -u -r1.69 changes.html --- changes.html28 Feb 2017 08:11:56 - 1.69 +++ changes.html28 Feb 2017 09:50:20 - @@ -67,7 +67,10 @@ the call graph. It is enabled by the -fipa-bit-cp option if -fipa-cp is enabled as well, and is enabled at the -O2 optimization level and higher (and - -Os). + -Os). This optimization supersedes interprocedural + alignment propagation of GCC 6, and therefore the + option -fipa-cp-alignment is now deprecated and + ignored. A new interprocedural value range propagation optimization has been added, which propagates integral ranges that variable values can be proven
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
Hi Martin, at first I was surprised to see two suggestions from -- until I realized those came from the two (Martins) of you. ;-) On Mon, 27 Feb 2017, Martin Jambor wrote: > on top of your patch, I would like to propose the following. What do > you think? > > Index: changes.html > === > + -Os). This optimization and its option supersede > + interprocedural alignment propagation of gcc 6, and therefore the > + option -fipa-cp-alignment is now deprecated and > + ignored. Make it "GCC 6" (all uppercase) and consider just saying "This supersedes" or "This optimization supersedes", and I'll think I like it. :-) Thanks, Gerald
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
Hello, On Sun, Feb 26, 2017 at 03:21:20PM +0100, Gerald Pfeifer wrote: > On Sun, 19 Feb 2017, Gerald Pfeifer wrote: > > That was quite a bit; thanks for doing that, Jakub! > > > > In the patch below I try to streamline language a bit, document options > > being implied by -Os (in addition to -O2 or higher), fix grammar in a few > > places, and change a textual link to being a real one. > > > > I have _not_ applied this yet, and would appreciate your feedback. > > I did another two passes through this, making a few more simplifications > and changes, and committed it. > > If you see anything beyond it, or changes you disagree with, let me know! > on top of your patch, I would like to propose the following. What do you think? Martin Index: changes.html === RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/changes.html,v retrieving revision 1.67 diff -u -r1.67 changes.html --- changes.html26 Feb 2017 14:21:15 - 1.67 +++ changes.html27 Feb 2017 16:55:31 - @@ -67,7 +67,10 @@ the call graph. It is enabled by the -fipa-bit-cp option if -fipa-cp is enabled as well, and is enabled at the -O2 optimization level and higher (and - -Os). + -Os). This optimization and its option supersede + interprocedural alignment propagation of gcc 6, and therefore the + option -fipa-cp-alignment is now deprecated and + ignored. A new interprocedural value range propagation optimization has been added, which propagates integral ranges that variable values can be proven
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On 02/26/2017 07:21 AM, Gerald Pfeifer wrote: On Sun, 19 Feb 2017, Gerald Pfeifer wrote: That was quite a bit; thanks for doing that, Jakub! In the patch below I try to streamline language a bit, document options being implied by -Os (in addition to -O2 or higher), fix grammar in a few places, and change a textual link to being a real one. I have _not_ applied this yet, and would appreciate your feedback. I did another two passes through this, making a few more simplifications and changes, and committed it. If you see anything beyond it, or changes you disagree with, let me know! @@ -525,8 +524,8 @@ New __builtin_add_overflow_p, __builtin_sub_overflow_p, __builtin_mul_overflow_p built-in functions have been added. - These work similarly to earlier added built-in functions without the - _p suffix, but don't actually store the result of the + These work similarly to their siblings without the + _p suffix, but do not actually store the result of the arithmetics anywhere, just return whether the operation would overflow. These builtins allow easy checking for overflows e.g. in C++ constexpr contexts. Sorry to be jumping in so late. I only noticed this bit now. I would suggest to say that these new built-ins evaluate to integer constant expressions when their arguments do. Not all C programmers are familiar with C++ constexpr so they may not understand the use use case. The request for these built-ins also came from a C user and was specifically motivated by avoiding -Woverflow warnings so adding an example demonstrating that might be helpful as well. Something like this: ... Calls to these built-ins with integer constant arguments evaluate to integer constants expressions. For example, in the following, c is assigned the result of a * b only if the multiplication does not overflow, otherwise it is assigned the value zero. The multiplication is performed at compile-time and without triggering a -Woverflow warning. enum { a = 12345678, b = 87654321, c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b }; Martin
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On Sun, 19 Feb 2017, Gerald Pfeifer wrote: > That was quite a bit; thanks for doing that, Jakub! > > In the patch below I try to streamline language a bit, document options > being implied by -Os (in addition to -O2 or higher), fix grammar in a few > places, and change a textual link to being a real one. > > I have _not_ applied this yet, and would appreciate your feedback. I did another two passes through this, making a few more simplifications and changes, and committed it. If you see anything beyond it, or changes you disagree with, let me know! Gerald Index: gcc-7/changes.html === RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/changes.html,v retrieving revision 1.66 diff -u -r1.66 changes.html --- gcc-7/changes.html 24 Feb 2017 05:19:19 - 1.66 +++ gcc-7/changes.html 26 Feb 2017 14:19:09 - @@ -50,41 +50,40 @@ -fprintf-return-value option. A new store merging pass has been added. It merges constant stores to adjacent memory locations into fewer, wider, stores. - It can be enabled by using the -fstore-merging option and is - enabled by default at the -O2 optimization - level or higher (including -Os). + It is enabled by the -fstore-merging option and at the + -O2 optimization level or higher (and -Os). A new code hoisting optimization has been added to the partial redundancy elimination pass. It attempts to move evaluation of expressions executed on all paths to the function exit as early as possible, which helps primarily for code size, but can be useful for - speed of generated code as well. It can be enabled by using the - -fcode-hoisting option and is enabled by default at - the -O2 optimization level or higher. + speed of generated code as well. It is enabled by the + -fcode-hoisting option and at the -O2 + optimization level or higher (and -Os). A new interprocedural bitwise constant propagation optimization has been added, which propagates knowledge about which bits of variables are known to be zero (including pointer alignment information) across - the call graph. It can be enabled by using the -fipa-bit-cp - option if -fipa-cp is enabled as well, and is enabled by - default at the -O2 optimization level and higher. + the call graph. It is enabled by the -fipa-bit-cp + option if -fipa-cp is enabled as well, and is enabled + at the -O2 optimization level and higher (and + -Os). A new interprocedural value range propagation optimization has been added, which propagates integral ranges that variable values can be proven - to be within across the call graph. It can be enabled by using the - -fipa-vrp option and is enabled by default at the - -O2 optimization level and higher. + to be within across the call graph. It is enabled by the + -fipa-vrp option and at the -O2 optimization + level and higher (and -Os). A new loop splitting optimization pass has been added. It splits certain loops if they contain a condition that is always true on one side of the iteration space and always false on the other into two loops where each of the new two loops iterates just on one of the sides of the iteration space and the condition does not need to be checked - inside of the loop. It can be enabled by using the - -fsplit-loops option and is enabled by default at the - -O3 optimization level or higher. + inside of the loop. It is enabled by the -fsplit-loops + option and at the -O3 optimization level or higher. - Shrink-wrapping optimization can now separate portions of + The shrink-wrapping optimization can now separate portions of prologues and epilogues to improve performance if some of the work done traditionally by prologues and epilogues is not needed on certain paths. This is controlled by the @@ -138,7 +137,7 @@ The -fsanitize=signed-integer-overflow suboption of the - UndefinedBehavior Sanitizer now diagnose arithmetic overflows even on + UndefinedBehavior Sanitizer now diagnoses arithmetic overflows even on arithmetic operations with generic vectors. Version 5 of the New __builtin_add_overflow_p, __builtin_sub_overflow_p, __builtin_mul_overflow_p built-in functions have been added. - These work similarly to earlier added built-in functions without the - _p suffix, but don't actually store the result of the + These work similarly to their siblings without the + _p suffix, but do not actually store the result of the arithmetics anywhere, just return whether the operation would overflow. These builtins allow easy checking for overflows e.g. in C++ constexpr contexts. @@ -566,7 +565,7 @@ (suffixed fN or fNx) for the new types: __builtin_copysign, __builtin_fabs, __builtin_huge_val, __builtin_inf, __builtin_nan, __builtin_nans. - Compilation with -fopenmp is now compatible with + Compilation with -fopenmp is now compatible with the C11 _Atomic keyword. @@ -730,8
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
That was quite a bit; thanks for doing that, Jakub! In the patch below I try to streamline language a bit, document options being implied by -Os (in addition to -O2 or higher), fix grammar in a few places, and change a textual link to being a real one. I have _not_ applied this yet, and would appreciate your feedback. Gerald Index: changes.html === RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/changes.html,v retrieving revision 1.65 diff -u -r1.65 changes.html --- changes.html19 Feb 2017 21:55:56 - 1.65 +++ changes.html19 Feb 2017 22:00:59 - @@ -50,41 +50,44 @@ -fprintf-return-value option. A new store merging pass has been added. It merges constant stores to adjacent memory locations into fewer, wider, stores. - It can be enabled by using the -fstore-merging option and is + It is enabled by the -fstore-merging option and is enabled by default at the -O2 optimization - level or higher (including -Os). + level or higher (and -Os). A new code hoisting optimization has been added to the partial redundancy elimination pass. It attempts to move evaluation of expressions executed on all paths to the function exit as early as possible, which helps primarily for code size, but can be useful for - speed of generated code as well. It can be enabled by using the + speed of generated code as well. It is enabled by the -fcode-hoisting option and is enabled by default at - the -O2 optimization level or higher. + the -O2 optimization level or higher (and + -Os). A new interprocedural bitwise constant propagation optimization has been added, which propagates knowledge about which bits of variables are known to be zero (including pointer alignment information) across - the call graph. It can be enabled by using the -fipa-bit-cp + the call graph. It is enabled by the -fipa-bit-cp option if -fipa-cp is enabled as well, and is enabled by - default at the -O2 optimization level and higher. + default at the -O2 optimization level and higher (and + -Os). A new interprocedural value range propagation optimization has been added, which propagates integral ranges that variable values can be proven - to be within across the call graph. It can be enabled by using the + to be within across the call graph. It is enabled by the -fipa-vrp option and is enabled by default at the - -O2 optimization level and higher. + -O2 optimization level and higher (and + -Os). A new loop splitting optimization pass has been added. It splits certain loops if they contain a condition that is always true on one side of the iteration space and always false on the other into two loops where each of the new two loops iterates just on one of the sides of the iteration space and the condition does not need to be checked - inside of the loop. It can be enabled by using the + inside of the loop. It is enabled by the -fsplit-loops option and is enabled by default at the -O3 optimization level or higher. - Shrink-wrapping optimization can now separate portions of + The shrink-wrapping optimization can now separate portions of prologues and epilogues to improve performance if some of the work done traditionally by prologues and epilogues is not needed on certain paths. This is controlled by the @@ -138,7 +141,7 @@ The -fsanitize=signed-integer-overflow suboption of the - UndefinedBehavior Sanitizer now diagnose arithmetic overflows even on + UndefinedBehavior Sanitizer now diagnoses arithmetic overflows even on arithmetic operations with generic vectors. Version 5 of the New __builtin_add_overflow_p, __builtin_sub_overflow_p, __builtin_mul_overflow_p built-in functions have been added. - These work similarly to earlier added built-in functions without the - _p suffix, but don't actually store the result of the + These work similarly to their siblings without the + _p suffix, but do not actually store the result of the arithmetics anywhere, just return whether the operation would overflow. These builtins allow easy checking for overflows e.g. in C++ constexpr contexts. @@ -566,7 +569,7 @@ (suffixed fN or fNx) for the new types: __builtin_copysign, __builtin_fabs, __builtin_huge_val, __builtin_inf, __builtin_nan, __builtin_nans. - Compilation with -fopenmp is now compatible with + Compilation with -fopenmp is now compatible with the C11 _Atomic keyword. @@ -730,8 +733,8 @@ Version 4.5 of the http://www.openmp.org/specifications/; >OpenMP specification is now partially supported also in the - Fortran compilers, largest missing support in the Fortran frontend - is structure element mapping. + Fortran compiler; the largest missing item is structure element + mapping. User-defined derived-type input/output (UDTIO) is added. @@ -752,11 +755,13 @@
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On Tue, Jan 31, 2017 at 05:31:41PM +0100, Jakub Jelinek wrote: > On Tue, Jan 31, 2017 at 12:15:36PM +0100, Martin Jambor wrote: > > > I've committed it as is, feel free to propose changes. But before that, > > > we > > > should figure out what to do with -fipa-cp-alignment. Should it have > > > Ignore flag and > > > Does nothing. Preserved for backward compatibility. > > > description in common.opt, and > > > > > > @item -fipa-cp-alignment > > > @opindex -fipa-cp-alignment > > > When enabled, this optimization propagates alignment of function > > > parameters to support better vectorization and string operations. > > > > > > This flag is enabled by default at @option{-O2} and @option{-Os}. It > > > requires that @option{-fipa-cp} is enabled. > > > @option{-fipa-cp-alignment} is obsolete, use @option{-fipa-bit-cp} > > > instead. > > > > > > removed altogether, or should it say be alias for -fipa-bit-cp? > > > > Well, -fipa-bit-cp is a superset of the old -fipa-cp-alignment in the > > sense that the latter worked only for pointers whereas the former now > > also operates on integers. > > > > We could still refuse to store results of the analysis to pointers if > > user provided -fno-ipa-cp-alignment, but I do not think it is > > reasonable. My preference would be to mark it obsolete and document > > that -fipa-bit-cp should be used instead. > > What are obsolete options? Do you mean deprecated or removed? I am sorry, I got confused by the mail I was quoting. I meant deprecated, because I thought that was the appropriate thing to do. However, I personally will not object if we remove it. > We have ignored options retained just for compatibility that do nothing. I'll have a look at how it is done and prepare a patch, it may take a few days though because I am traveling now. Martin > -fipa-cp-alignment does nothing right now (nothing ever checks it), but > it isn't declared as Ignore and is documented (ignored options aren't > documented). The current state is that e.g. x_flag_ipa_cp_alignment is > still a field in global_options* etc. > > Jakub
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On Tue, Jan 31, 2017 at 12:15:36PM +0100, Martin Jambor wrote: > > I've committed it as is, feel free to propose changes. But before that, we > > should figure out what to do with -fipa-cp-alignment. Should it have > > Ignore flag and > > Does nothing. Preserved for backward compatibility. > > description in common.opt, and > > > > @item -fipa-cp-alignment > > @opindex -fipa-cp-alignment > > When enabled, this optimization propagates alignment of function > > parameters to support better vectorization and string operations. > > > > This flag is enabled by default at @option{-O2} and @option{-Os}. It > > requires that @option{-fipa-cp} is enabled. > > @option{-fipa-cp-alignment} is obsolete, use @option{-fipa-bit-cp} instead. > > > > removed altogether, or should it say be alias for -fipa-bit-cp? > > Well, -fipa-bit-cp is a superset of the old -fipa-cp-alignment in the > sense that the latter worked only for pointers whereas the former now > also operates on integers. > > We could still refuse to store results of the analysis to pointers if > user provided -fno-ipa-cp-alignment, but I do not think it is > reasonable. My preference would be to mark it obsolete and document > that -fipa-bit-cp should be used instead. What are obsolete options? Do you mean deprecated or removed? We have ignored options retained just for compatibility that do nothing. -fipa-cp-alignment does nothing right now (nothing ever checks it), but it isn't declared as Ignore and is documented (ignored options aren't documented). The current state is that e.g. x_flag_ipa_cp_alignment is still a field in global_options* etc. Jakub
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
Hi, On Sun, Jan 29, 2017 at 07:55:18PM +0100, Jakub Jelinek wrote: > On Sun, Jan 29, 2017 at 06:08:32PM +0530, Prathamesh Kulkarni wrote: > > > + A new interprocedural bitwise constant propagation optimization > > > + has been added, which propagates knowledge about which bits of > > > variables > > > + are known to be zero (including pointer alignment information) across > > > + the call graph. It can be enabled by using the > > > -fipa-bit-cp > > > + option if -fipa-cp is enabled as well, and is enabled by > > > + default at the -O2 optimization level and higher. > > Hi, > > Just a small comment: -fipa-bit-cp makes -fipa-cp-alignment deprecated. > > I've committed it as is, feel free to propose changes. But before that, we > should figure out what to do with -fipa-cp-alignment. Should it have > Ignore flag and > Does nothing. Preserved for backward compatibility. > description in common.opt, and > > @item -fipa-cp-alignment > @opindex -fipa-cp-alignment > When enabled, this optimization propagates alignment of function > parameters to support better vectorization and string operations. > > This flag is enabled by default at @option{-O2} and @option{-Os}. It > requires that @option{-fipa-cp} is enabled. > @option{-fipa-cp-alignment} is obsolete, use @option{-fipa-bit-cp} instead. > > removed altogether, or should it say be alias for -fipa-bit-cp? Well, -fipa-bit-cp is a superset of the old -fipa-cp-alignment in the sense that the latter worked only for pointers whereas the former now also operates on integers. We could still refuse to store results of the analysis to pointers if user provided -fno-ipa-cp-alignment, but I do not think it is reasonable. My preference would be to mark it obsolete and document that -fipa-bit-cp should be used instead. > The documentation certainly doesn't document what it does, because nothing > ever looks at that flag, so it is effectively ignored, not just obsolete. I'm not sure I understand, it was used by gcc 6 and the documentation describes what it did. The documentation of course should be updated. Martin
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On Sun, Jan 29, 2017 at 06:08:32PM +0530, Prathamesh Kulkarni wrote: > > + A new interprocedural bitwise constant propagation optimization > > + has been added, which propagates knowledge about which bits of variables > > + are known to be zero (including pointer alignment information) across > > + the call graph. It can be enabled by using the -fipa-bit-cp > > + option if -fipa-cp is enabled as well, and is enabled by > > + default at the -O2 optimization level and higher. > Hi, > Just a small comment: -fipa-bit-cp makes -fipa-cp-alignment deprecated. I've committed it as is, feel free to propose changes. But before that, we should figure out what to do with -fipa-cp-alignment. Should it have Ignore flag and Does nothing. Preserved for backward compatibility. description in common.opt, and @item -fipa-cp-alignment @opindex -fipa-cp-alignment When enabled, this optimization propagates alignment of function parameters to support better vectorization and string operations. This flag is enabled by default at @option{-O2} and @option{-Os}. It requires that @option{-fipa-cp} is enabled. @option{-fipa-cp-alignment} is obsolete, use @option{-fipa-bit-cp} instead. removed altogether, or should it say be alias for -fipa-bit-cp? The documentation certainly doesn't document what it does, because nothing ever looks at that flag, so it is effectively ignored, not just obsolete. Jakub
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On 27 January 2017 at 22:00, Jakub Jelinekwrote: > Hi! > > This patch attempts to document some new features (without warnings, > those are partially covered by Marek's patch, C++ FE (would be nice > to document -faligned-new, -fnew-inheriting-ctors, -fnew-ttp-matching, > -fstrong-eval-order and what from C++ is supported) and the BRIG FE). > > Ok for wwwdocs? > > Index: changes.html > === > RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/changes.html,v > retrieving revision 1.44 > diff -u -p -r1.44 changes.html > --- changes.html27 Jan 2017 09:54:32 - 1.44 > +++ changes.html27 Jan 2017 16:23:03 - > @@ -45,8 +45,39 @@ a work-in-progress. >A new store merging pass has been added. It merges constant stores to >adjacent memory locations into fewer, wider, stores. >It can be enabled by using the -fstore-merging option and is > - enabled by default at -Os and the -O2 > optimization > - level or higher. > + enabled by default at the -O2 optimization > + level or higher (including -Os). > + > + A new code hoisting optimization has been added to the partial > + redundancy elimination pass. It attempts to move evaluation of > + expressions executed on all paths to the function exit as early as > + possible, which helps primarily for code size, but can be useful for > + speed of generated code as well. It can be enabled by using the > + -fcode-hoisting option and is enabled by default at > + the -O2 optimization level or higher. > + > + A new interprocedural bitwise constant propagation optimization > + has been added, which propagates knowledge about which bits of variables > + are known to be zero (including pointer alignment information) across > + the call graph. It can be enabled by using the -fipa-bit-cp > + option if -fipa-cp is enabled as well, and is enabled by > + default at the -O2 optimization level and higher. Hi, Just a small comment: -fipa-bit-cp makes -fipa-cp-alignment deprecated. Sorry for not documenting this option myself and thanks for writing it up! Regards, Prathamesh > + > + A new interprocedural value range propagation optimization has been > + added, which propagates integral ranges that variable values can be proven > + to be within across the call graph. It can be enabled by using the > + -fipa-vrp option and is enabled by default at the > + -O2 optimization level and higher. > + > + A new loop splitting optimization pass has been added. It splits > + certain loops if they contain a condition that is always true on one > + side of the iteration space and always false on the other into two > + loops where each of the new two loops iterates just on one of the sides > + of the iteration space and the condition does not need to be checked > + inside of the loop. It can be enabled by using the > + -fsplit-loops option and is enabled by default at the > + -O3 optimization level or higher. > + >AddressSanitizer gained a new sanitization option, > -fsanitize-address-use-after-scope, >which enables sanitization of variables whose address is taken and > used after a scope where the >variable is defined: > @@ -64,17 +95,17 @@ main (int argc, char **argv) >return *ptr; > } > > -==28882==ERROR: AddressSanitizer: stack-use-after-scope on address > 0x7fffb8dba990 at pc 0x004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958 > -WRITE of size 1 at 0x7fffb8dba990 thread T0 > +==28882==ERROR: AddressSanitizer: > stack-use-after-scope on address 0x7fffb8dba990 at pc 0x004006d5 bp > 0x7fffb8dba960 sp 0x7fffb8dba958 > +WRITE of size 1 at 0x7fffb8dba990 thread T0 > #0 0x4006d4 in main /tmp/use-after-scope-1.c:10 > #1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290) > #2 0x400739 in _start (/tmp/a.out+0x400739) > > -Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 in frame > +Address 0x7fffb8dba990 is located in stack of thread > T0 at offset 32 in frame > #0 0x40067f in main /tmp/use-after-scope-1.c:3 > >This frame has 1 object(s): > -[32, 33) 'my_char' == Memory access at offset 32 is inside this > variable > +[32, 33) 'my_char' == Memory access at offset > 32 is inside this variable > > >The option is enabled by default with -fsanitize=address and > disabled > @@ -92,6 +123,16 @@ Address 0x7fffb8dba990 is located in sta > > > > + The -fsanitize=signed-integer-overflow suboption of the > + UndefinedBehavior Sanitizer now diagnose arithmetic overflows even on > + arithmetic operations with generic vectors. > + > + The upcoming version 5 of the + href="http://www.dwarfstd.org/Download.php;>DWARF debugging > + information standard is supported through the -gdwarf-5 > + option. The DWARF version 4 debugging information remains the > + default until debugging information consumers are adjusted. > + > > > > @@ -255,6 +296,14 @@ of the
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On January 27, 2017 5:30:51 PM GMT+01:00, Jakub Jelinekwrote: >Hi! > >This patch attempts to document some new features (without warnings, >those are partially covered by Marek's patch, C++ FE (would be nice >to document -faligned-new, -fnew-inheriting-ctors, -fnew-ttp-matching, >-fstrong-eval-order and what from C++ is supported) and the BRIG FE). > >Ok for wwwdocs? LGTM. Richard. >Index: changes.html >=== >RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/changes.html,v >retrieving revision 1.44 >diff -u -p -r1.44 changes.html >--- changes.html 27 Jan 2017 09:54:32 - 1.44 >+++ changes.html 27 Jan 2017 16:23:03 - >@@ -45,8 +45,39 @@ a work-in-progress. >A new store merging pass has been added. It merges constant stores >to > adjacent memory locations into fewer, wider, stores. >It can be enabled by using the -fstore-merging option and >is >- enabled by default at -Os and the -O2 >optimization >- level or higher. >+ enabled by default at the -O2 optimization >+ level or higher (including -Os). >+ >+ A new code hoisting optimization has been added to the partial >+ redundancy elimination pass. It attempts to move evaluation of >+ expressions executed on all paths to the function exit as early as >+ possible, which helps primarily for code size, but can be useful for >+ speed of generated code as well. It can be enabled by using the >+ -fcode-hoisting option and is enabled by default at >+ the -O2 optimization level or higher. >+ >+ A new interprocedural bitwise constant propagation optimization >+ has been added, which propagates knowledge about which bits of >variables >+ are known to be zero (including pointer alignment information) >across >+ the call graph. It can be enabled by using the >-fipa-bit-cp >+ option if -fipa-cp is enabled as well, and is enabled >by >+ default at the -O2 optimization level and higher. >+ >+ A new interprocedural value range propagation optimization has >been >+ added, which propagates integral ranges that variable values can be >proven >+ to be within across the call graph. It can be enabled by using the >+ -fipa-vrp option and is enabled by default at the >+ -O2 optimization level and higher. >+ >+ A new loop splitting optimization pass has been added. It >splits >+ certain loops if they contain a condition that is always true on one >+ side of the iteration space and always false on the other into two >+ loops where each of the new two loops iterates just on one of the >sides >+ of the iteration space and the condition does not need to be checked >+ inside of the loop. It can be enabled by using the >+ -fsplit-loops option and is enabled by default at the >+ -O3 optimization level or higher. >+ >AddressSanitizer gained a new sanitization option, >-fsanitize-address-use-after-scope, >which enables sanitization of variables whose address is taken and used >after a scope where the > variable is defined: >@@ -64,17 +95,17 @@ main (int argc, char **argv) > return *ptr; > } > >-==28882==ERROR: AddressSanitizer: stack-use-after-scope on address >0x7fffb8dba990 at pc 0x004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958 >-WRITE of size 1 at 0x7fffb8dba990 thread T0 >+==28882==ERROR: AddressSanitizer: >stack-use-after-scope on address 0x7fffb8dba990 at pc 0x004006d5 bp >0x7fffb8dba960 sp 0x7fffb8dba958 >+WRITE of size 1 at 0x7fffb8dba990 thread >T0 > #0 0x4006d4 in main /tmp/use-after-scope-1.c:10 > #1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290) > #2 0x400739 in _start (/tmp/a.out+0x400739) > >-Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 >in frame >+Address 0x7fffb8dba990 is located in stack of >thread T0 at offset 32 in frame > #0 0x40067f in main /tmp/use-after-scope-1.c:3 > > This frame has 1 object(s): >-[32, 33) 'my_char' == Memory access at offset 32 is inside >this variable >+[32, 33) 'my_char' == Memory access at >offset 32 is inside this variable > > >The option is enabled by default with -fsanitize=address >and disabled >@@ -92,6 +123,16 @@ Address 0x7fffb8dba990 is located in sta > > > >+ The -fsanitize=signed-integer-overflow suboption of >the >+ UndefinedBehavior Sanitizer now diagnose arithmetic overflows even >on >+ arithmetic operations with generic vectors. >+ >+ The upcoming version 5 of the + href="http://www.dwarfstd.org/Download.php;>DWARF debugging >+ information standard is supported through the -gdwarf-5 >+ option. The DWARF version 4 debugging information remains the >+ default until debugging information consumers are adjusted. >+ > > > >@@ -255,6 +296,14 @@ of the global declaration: > currently has the value of UINTMAX_MAX on all systems, > reflecting that GCC's compile-time conversions are correctly rounded > for any number of digits. >+New __builtin_add_overflow_p, >+ __builtin_sub_overflow_p, >+
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On Fri, Jan 27, 2017 at 10:15:37PM +0100, Jakub Jelinek wrote: > > > > AArch64 also implements these hooks and so benefits from the > > > > optimisation as well. > > > > Perhaps move this to the general optimizer improvements section and > > > > mention it's only > > > > enabled for powerpc and aarch64 for the moment? > > > > > > Yeah, I've also noticed that, but not sure what is better, as it is only 2 > > > targets that support it, so it is not really generic enough. It is > > > unclear what > > > is better. > > > > The subpass _is_ generic, I would move it like Kyrill says. > > Ok, so like this? That looks great, thanks again! Segher
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On Fri, Jan 27, 2017 at 02:05:40PM -0600, Segher Boessenkool wrote: > On Fri, Jan 27, 2017 at 05:38:17PM +0100, Jakub Jelinek wrote: > > On Fri, Jan 27, 2017 at 04:34:53PM +, Kyrill Tkachov wrote: > > > > + > > > > PowerPC / PowerPC64 / RS6000 > > > > > > > > The PowerPC port now uses LRA by default. > > > > GCC now diagnoses inline assembly that clobbers register r2. > > > > This has always been invalid code, and is no longer quietly > > > > tolerated. > > > > + Shrink-wrapping optimization can now separate portions of > > > > +prologues and epilogues to improve performance if some of the > > > > +work done traditionally by prologues and epilogues is not needed > > > > +on certain paths. This is controlled by the > > > > +-fshrink-wrap-separate option, enabled by > > > > default. > > > > > > Thanks for doing this. It was still on my todo list :-/ > > > > AArch64 also implements these hooks and so benefits from the optimisation > > > as well. > > > Perhaps move this to the general optimizer improvements section and > > > mention it's only > > > enabled for powerpc and aarch64 for the moment? > > > > Yeah, I've also noticed that, but not sure what is better, as it is only 2 > > targets that support it, so it is not really generic enough. It is unclear > > what > > is better. > > The subpass _is_ generic, I would move it like Kyrill says. Ok, so like this? Index: changes.html === RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/changes.html,v retrieving revision 1.44 diff -u -p -r1.44 changes.html --- changes.html27 Jan 2017 09:54:32 - 1.44 +++ changes.html27 Jan 2017 21:14:50 - @@ -45,8 +45,47 @@ a work-in-progress. A new store merging pass has been added. It merges constant stores to adjacent memory locations into fewer, wider, stores. It can be enabled by using the -fstore-merging option and is - enabled by default at -Os and the -O2 optimization - level or higher. + enabled by default at the -O2 optimization + level or higher (including -Os). + + A new code hoisting optimization has been added to the partial + redundancy elimination pass. It attempts to move evaluation of + expressions executed on all paths to the function exit as early as + possible, which helps primarily for code size, but can be useful for + speed of generated code as well. It can be enabled by using the + -fcode-hoisting option and is enabled by default at + the -O2 optimization level or higher. + + A new interprocedural bitwise constant propagation optimization + has been added, which propagates knowledge about which bits of variables + are known to be zero (including pointer alignment information) across + the call graph. It can be enabled by using the -fipa-bit-cp + option if -fipa-cp is enabled as well, and is enabled by + default at the -O2 optimization level and higher. + + A new interprocedural value range propagation optimization has been + added, which propagates integral ranges that variable values can be proven + to be within across the call graph. It can be enabled by using the + -fipa-vrp option and is enabled by default at the + -O2 optimization level and higher. + + A new loop splitting optimization pass has been added. It splits + certain loops if they contain a condition that is always true on one + side of the iteration space and always false on the other into two + loops where each of the new two loops iterates just on one of the sides + of the iteration space and the condition does not need to be checked + inside of the loop. It can be enabled by using the + -fsplit-loops option and is enabled by default at the + -O3 optimization level or higher. + + Shrink-wrapping optimization can now separate portions of + prologues and epilogues to improve performance if some of the + work done traditionally by prologues and epilogues is not needed + on certain paths. This is controlled by the + -fshrink-wrap-separate option, enabled by default. + It requires target support, which is currently only implemented in the + PowerPC and AArch64 ports. + AddressSanitizer gained a new sanitization option, -fsanitize-address-use-after-scope, which enables sanitization of variables whose address is taken and used after a scope where the variable is defined: @@ -64,17 +103,17 @@ main (int argc, char **argv) return *ptr; } -==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba990 at pc 0x004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958 -WRITE of size 1 at 0x7fffb8dba990 thread T0 +==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba990 at pc 0x004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958 +WRITE of size 1 at 0x7fffb8dba990 thread T0 #0 0x4006d4 in main /tmp/use-after-scope-1.c:10 #1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290)
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On Fri, Jan 27, 2017 at 05:38:17PM +0100, Jakub Jelinek wrote: > On Fri, Jan 27, 2017 at 04:34:53PM +, Kyrill Tkachov wrote: > > > + > > > PowerPC / PowerPC64 / RS6000 > > > > > > The PowerPC port now uses LRA by default. > > > GCC now diagnoses inline assembly that clobbers register r2. > > > This has always been invalid code, and is no longer quietly > > > tolerated. > > > + Shrink-wrapping optimization can now separate portions of > > > +prologues and epilogues to improve performance if some of the > > > +work done traditionally by prologues and epilogues is not needed > > > +on certain paths. This is controlled by the > > > +-fshrink-wrap-separate option, enabled by default. > > > Thanks for doing this. It was still on my todo list :-/ > > AArch64 also implements these hooks and so benefits from the optimisation > > as well. > > Perhaps move this to the general optimizer improvements section and mention > > it's only > > enabled for powerpc and aarch64 for the moment? > > Yeah, I've also noticed that, but not sure what is better, as it is only 2 > targets that support it, so it is not really generic enough. It is unclear > what > is better. The subpass _is_ generic, I would move it like Kyrill says. Segher
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
On Fri, Jan 27, 2017 at 04:34:53PM +, Kyrill Tkachov wrote: > > + > > PowerPC / PowerPC64 / RS6000 > > > > The PowerPC port now uses LRA by default. > > GCC now diagnoses inline assembly that clobbers register r2. > > This has always been invalid code, and is no longer quietly > > tolerated. > > + Shrink-wrapping optimization can now separate portions of > > +prologues and epilogues to improve performance if some of the > > +work done traditionally by prologues and epilogues is not needed > > +on certain paths. This is controlled by the > > +-fshrink-wrap-separate option, enabled by default. > > > > AArch64 also implements these hooks and so benefits from the optimisation as > well. > Perhaps move this to the general optimizer improvements section and mention > it's only > enabled for powerpc and aarch64 for the moment? Yeah, I've also noticed that, but not sure what is better, as it is only 2 targets that support it, so it is not really generic enough. It is unclear what is better. Jakub
Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
Hi Jakub, On 27/01/17 16:30, Jakub Jelinek wrote: Hi! This patch attempts to document some new features (without warnings, those are partially covered by Marek's patch, C++ FE (would be nice to document -faligned-new, -fnew-inheriting-ctors, -fnew-ttp-matching, -fstrong-eval-order and what from C++ is supported) and the BRIG FE). Ok for wwwdocs? + PowerPC / PowerPC64 / RS6000 The PowerPC port now uses LRA by default. GCC now diagnoses inline assembly that clobbers register r2. This has always been invalid code, and is no longer quietly tolerated. + Shrink-wrapping optimization can now separate portions of +prologues and epilogues to improve performance if some of the +work done traditionally by prologues and epilogues is not needed +on certain paths. This is controlled by the +-fshrink-wrap-separate option, enabled by default. AArch64 also implements these hooks and so benefits from the optimisation as well. Perhaps move this to the general optimizer improvements section and mention it's only enabled for powerpc and aarch64 for the moment? Kyrill Jakub
[wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.
Hi! This patch attempts to document some new features (without warnings, those are partially covered by Marek's patch, C++ FE (would be nice to document -faligned-new, -fnew-inheriting-ctors, -fnew-ttp-matching, -fstrong-eval-order and what from C++ is supported) and the BRIG FE). Ok for wwwdocs? Index: changes.html === RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/changes.html,v retrieving revision 1.44 diff -u -p -r1.44 changes.html --- changes.html27 Jan 2017 09:54:32 - 1.44 +++ changes.html27 Jan 2017 16:23:03 - @@ -45,8 +45,39 @@ a work-in-progress. A new store merging pass has been added. It merges constant stores to adjacent memory locations into fewer, wider, stores. It can be enabled by using the -fstore-merging option and is - enabled by default at -Os and the -O2 optimization - level or higher. + enabled by default at the -O2 optimization + level or higher (including -Os). + + A new code hoisting optimization has been added to the partial + redundancy elimination pass. It attempts to move evaluation of + expressions executed on all paths to the function exit as early as + possible, which helps primarily for code size, but can be useful for + speed of generated code as well. It can be enabled by using the + -fcode-hoisting option and is enabled by default at + the -O2 optimization level or higher. + + A new interprocedural bitwise constant propagation optimization + has been added, which propagates knowledge about which bits of variables + are known to be zero (including pointer alignment information) across + the call graph. It can be enabled by using the -fipa-bit-cp + option if -fipa-cp is enabled as well, and is enabled by + default at the -O2 optimization level and higher. + + A new interprocedural value range propagation optimization has been + added, which propagates integral ranges that variable values can be proven + to be within across the call graph. It can be enabled by using the + -fipa-vrp option and is enabled by default at the + -O2 optimization level and higher. + + A new loop splitting optimization pass has been added. It splits + certain loops if they contain a condition that is always true on one + side of the iteration space and always false on the other into two + loops where each of the new two loops iterates just on one of the sides + of the iteration space and the condition does not need to be checked + inside of the loop. It can be enabled by using the + -fsplit-loops option and is enabled by default at the + -O3 optimization level or higher. + AddressSanitizer gained a new sanitization option, -fsanitize-address-use-after-scope, which enables sanitization of variables whose address is taken and used after a scope where the variable is defined: @@ -64,17 +95,17 @@ main (int argc, char **argv) return *ptr; } -==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba990 at pc 0x004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958 -WRITE of size 1 at 0x7fffb8dba990 thread T0 +==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba990 at pc 0x004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958 +WRITE of size 1 at 0x7fffb8dba990 thread T0 #0 0x4006d4 in main /tmp/use-after-scope-1.c:10 #1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290) #2 0x400739 in _start (/tmp/a.out+0x400739) -Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 in frame +Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 in frame #0 0x40067f in main /tmp/use-after-scope-1.c:3 This frame has 1 object(s): -[32, 33) 'my_char' == Memory access at offset 32 is inside this variable +[32, 33) 'my_char' == Memory access at offset 32 is inside this variable The option is enabled by default with -fsanitize=address and disabled @@ -92,6 +123,16 @@ Address 0x7fffb8dba990 is located in sta + The -fsanitize=signed-integer-overflow suboption of the + UndefinedBehavior Sanitizer now diagnose arithmetic overflows even on + arithmetic operations with generic vectors. + + The upcoming version 5 of the http://www.dwarfstd.org/Download.php;>DWARF debugging + information standard is supported through the -gdwarf-5 + option. The DWARF version 4 debugging information remains the + default until debugging information consumers are adjusted. + @@ -255,6 +296,14 @@ of the global declaration: currently has the value of UINTMAX_MAX on all systems, reflecting that GCC's compile-time conversions are correctly rounded for any number of digits. +New __builtin_add_overflow_p, + __builtin_sub_overflow_p, + __builtin_mul_overflow_p built-in functions have been added. + These work similarly to earlier added built-in functions without the + _p suffix, but don't actually store the result of the + arithmetics