Re: [wwwdocs] Document in changes.html -fcode-hoisting, -fipa-bit-cp, -fipa-vrp, -fsplit-loops, GCJ removal, x86 ISA additions, -fshrink-wrap-separate etc.

2017-03-14 Thread Martin Sebor

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.

2017-03-12 Thread Gerald Pfeifer
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.

2017-02-28 Thread Martin Jambor
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.

2017-02-27 Thread Gerald Pfeifer
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.

2017-02-27 Thread Martin Jambor
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.

2017-02-27 Thread Martin Sebor

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.

2017-02-26 Thread Gerald Pfeifer
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.

2017-02-19 Thread Gerald Pfeifer
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.

2017-01-31 Thread Martin Jambor
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.

2017-01-31 Thread Jakub Jelinek
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.

2017-01-31 Thread Martin Jambor
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.

2017-01-29 Thread Jakub Jelinek
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.

2017-01-29 Thread Prathamesh Kulkarni
On 27 January 2017 at 22:00, 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?
>
> 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.

2017-01-29 Thread Richard Biener
On January 27, 2017 5:30:51 PM GMT+01:00, 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?

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.

2017-01-27 Thread Segher Boessenkool
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.

2017-01-27 Thread Jakub Jelinek
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.

2017-01-27 Thread Segher Boessenkool
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.

2017-01-27 Thread Jakub Jelinek
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.

2017-01-27 Thread Kyrill Tkachov

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.

2017-01-27 Thread Jakub Jelinek
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