Re: [PATCH] c++/88601 - [C/C++] __builtin_shufflevector support

2021-05-25 Thread Martin Sebor via Gcc-patches

On 5/25/21 7:32 AM, Jason Merrill via Gcc-patches wrote:

On 5/25/21 2:57 AM, Richard Biener wrote:

On Fri, 21 May 2021, Jason Merrill wrote:


On 5/21/21 8:33 AM, Richard Biener wrote:

This adds support for the clang __builtin_shufflevector extension to
the C and C++ frontends.  The builtin is lowered to VEC_PERM_EXPR.
Because VEC_PERM_EXPR does not support different sized vector inputs
or result or the special permute index of -1 (don't-care)
c_build_shufflevector applies lowering by widening inputs and output
to the widest vector, replacing -1 by a defined index and
subsetting the final vector if we produced a wider result than
desired.

Code generation thus can be sub-optimal, followup patches will
aim to fix that by recovering from part of the missing features
during RTL expansion and by relaxing the constraints of the GIMPLE
IL with regard to VEC_PERM_EXPR.

Bootstrapped on x86_64-unknown-linux-gnu, (re-)testing in progress.

Honza - you've filed PR88601, can you point me to testcases that
exercise common uses so we can look at code generation quality
and where time is spent best in improving things?

OK for trunk?

Thanks,
Richard.

2021-05-21  Richard Biener  

PR c++/88601
gcc/c-family/
  * c-common.c: Include tree-vector-builder.h and
  vec-perm-indices.h.
  (c_common_reswords): Add __builtin_shufflevector.
  (c_build_shufflevector): New funtion.
  * c-common.h (enum rid): Add RID_BUILTIN_SHUFFLEVECTOR.
  (c_build_shufflevector): Declare.

gcc/c/
  * c-decl.c (names_builtin_p): Handle RID_BUILTIN_SHUFFLEVECTOR.
  * c-parser.c (c_parser_postfix_expression): Likewise.

gcc/cp/
  * cp-objcp-common.c (names_builtin_p): Handle
  RID_BUILTIN_SHUFFLEVECTOR.
  * cp-tree.h (build_x_shufflevector): Declare.
  * parser.c (cp_parser_postfix_expression): Handle
  RID_BUILTIN_SHUFFLEVECTOR.
  * pt.c (tsubst_copy_and_build): Handle IFN_SHUFFLEVECTOR.
  * typeck.c (build_x_shufflevector): Build either a lowered
  VEC_PERM_EXPR or an unlowered shufflevector via a temporary
  internal function IFN_SHUFFLEVECTOR.

gcc/
  * internal-fn.c (expand_SHUFFLEVECTOR): Define.
  * internal-fn.def (SHUFFLEVECTOR): New.
  * internal-fn.h (expand_SHUFFLEVECTOR): Declare.

gcc/testsuite/
  * c-c++-common/builtin-shufflevector-2.c: New testcase.
  * c-c++-common/torture/builtin-shufflevector-1.c: Likewise.
  * g++.dg/builtin-shufflevector-1.C: Likewise.
  * g++.dg/builtin-shufflevector-2.C: Likewise.
---
   gcc/c-family/c-common.c   | 139 
++

   gcc/c-family/c-common.h   |   4 +-
   gcc/c/c-decl.c    |   1 +
   gcc/c/c-parser.c  |  38 +
   gcc/cp/cp-objcp-common.c  |   1 +
   gcc/cp/cp-tree.h  |   3 +
   gcc/cp/parser.c   |  15 ++
   gcc/cp/pt.c   |   9 ++
   gcc/cp/typeck.c   |  36 +
   gcc/internal-fn.c |   6 +
   gcc/internal-fn.def   |   3 +
   gcc/internal-fn.h |   1 +
   .../c-c++-common/builtin-shufflevector-2.c    |  18 +++
   .../torture/builtin-shufflevector-1.c |  49 ++
   .../g++.dg/builtin-shufflevector-1.C  |  18 +++
   .../g++.dg/builtin-shufflevector-2.C  |  12 ++
   16 files changed, 352 insertions(+), 1 deletion(-)
   create mode 100644 
gcc/testsuite/c-c++-common/builtin-shufflevector-2.c

   create mode 100644
   gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c
   create mode 100644 gcc/testsuite/g++.dg/builtin-shufflevector-1.C
   create mode 100644 gcc/testsuite/g++.dg/builtin-shufflevector-2.C

diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index b7daa2e2654..c4eb2b1c920 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -51,6 +51,8 @@ along with GCC; see the file COPYING3.  If not see
   #include "c-spellcheck.h"
   #include "selftest.h"
   #include "debug.h"
+#include "tree-vector-builder.h"
+#include "vec-perm-indices.h"
   cpp_reader *parse_in;    /* Declared in c-pragma.h.  */
@@ -383,6 +385,7 @@ const struct c_common_resword c_common_reswords[] =
 { "__builtin_has_attribute", RID_BUILTIN_HAS_ATTRIBUTE, 0 },
 { "__builtin_launder", RID_BUILTIN_LAUNDER, D_CXXONLY },
 { "__builtin_shuffle", RID_BUILTIN_SHUFFLE, 0 },
+  { "__builtin_shufflevector", RID_BUILTIN_SHUFFLEVECTOR, 0 },
 { "__builtin_tgmath", RID_BUILTIN_TGMATH, D_CONLY },
 { "__builtin_offsetof", RID_OFFSETOF, 0 },
 { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 
D_CONLY },
@@ -1108,6 +,142 @@ c_build_vec_perm_expr (location_t loc, tree 
v0, tree

v1, tree mask,
 return ret;
   }
+/* Build a VEC_PERM_EXPR if V0, V1 are not error_mark_nodes
+   and have vector types, V0 has the same element type as V1, and the
+   number of elements the result is that of MASK.  */
+tree

Re: [PATCH] c++/88601 - [C/C++] __builtin_shufflevector support

2021-05-25 Thread Jason Merrill via Gcc-patches

On 5/25/21 2:57 AM, Richard Biener wrote:

On Fri, 21 May 2021, Jason Merrill wrote:


On 5/21/21 8:33 AM, Richard Biener wrote:

This adds support for the clang __builtin_shufflevector extension to
the C and C++ frontends.  The builtin is lowered to VEC_PERM_EXPR.
Because VEC_PERM_EXPR does not support different sized vector inputs
or result or the special permute index of -1 (don't-care)
c_build_shufflevector applies lowering by widening inputs and output
to the widest vector, replacing -1 by a defined index and
subsetting the final vector if we produced a wider result than
desired.

Code generation thus can be sub-optimal, followup patches will
aim to fix that by recovering from part of the missing features
during RTL expansion and by relaxing the constraints of the GIMPLE
IL with regard to VEC_PERM_EXPR.

Bootstrapped on x86_64-unknown-linux-gnu, (re-)testing in progress.

Honza - you've filed PR88601, can you point me to testcases that
exercise common uses so we can look at code generation quality
and where time is spent best in improving things?

OK for trunk?

Thanks,
Richard.

2021-05-21  Richard Biener  

PR c++/88601
gcc/c-family/
  * c-common.c: Include tree-vector-builder.h and
  vec-perm-indices.h.
  (c_common_reswords): Add __builtin_shufflevector.
  (c_build_shufflevector): New funtion.
  * c-common.h (enum rid): Add RID_BUILTIN_SHUFFLEVECTOR.
  (c_build_shufflevector): Declare.

gcc/c/
  * c-decl.c (names_builtin_p): Handle RID_BUILTIN_SHUFFLEVECTOR.
  * c-parser.c (c_parser_postfix_expression): Likewise.

gcc/cp/
  * cp-objcp-common.c (names_builtin_p): Handle
  RID_BUILTIN_SHUFFLEVECTOR.
  * cp-tree.h (build_x_shufflevector): Declare.
  * parser.c (cp_parser_postfix_expression): Handle
  RID_BUILTIN_SHUFFLEVECTOR.
  * pt.c (tsubst_copy_and_build): Handle IFN_SHUFFLEVECTOR.
  * typeck.c (build_x_shufflevector): Build either a lowered
  VEC_PERM_EXPR or an unlowered shufflevector via a temporary
  internal function IFN_SHUFFLEVECTOR.

gcc/
  * internal-fn.c (expand_SHUFFLEVECTOR): Define.
  * internal-fn.def (SHUFFLEVECTOR): New.
  * internal-fn.h (expand_SHUFFLEVECTOR): Declare.

gcc/testsuite/
  * c-c++-common/builtin-shufflevector-2.c: New testcase.
  * c-c++-common/torture/builtin-shufflevector-1.c: Likewise.
  * g++.dg/builtin-shufflevector-1.C: Likewise.
  * g++.dg/builtin-shufflevector-2.C: Likewise.
---
   gcc/c-family/c-common.c   | 139 ++
   gcc/c-family/c-common.h   |   4 +-
   gcc/c/c-decl.c|   1 +
   gcc/c/c-parser.c  |  38 +
   gcc/cp/cp-objcp-common.c  |   1 +
   gcc/cp/cp-tree.h  |   3 +
   gcc/cp/parser.c   |  15 ++
   gcc/cp/pt.c   |   9 ++
   gcc/cp/typeck.c   |  36 +
   gcc/internal-fn.c |   6 +
   gcc/internal-fn.def   |   3 +
   gcc/internal-fn.h |   1 +
   .../c-c++-common/builtin-shufflevector-2.c|  18 +++
   .../torture/builtin-shufflevector-1.c |  49 ++
   .../g++.dg/builtin-shufflevector-1.C  |  18 +++
   .../g++.dg/builtin-shufflevector-2.C  |  12 ++
   16 files changed, 352 insertions(+), 1 deletion(-)
   create mode 100644 gcc/testsuite/c-c++-common/builtin-shufflevector-2.c
   create mode 100644
   gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c
   create mode 100644 gcc/testsuite/g++.dg/builtin-shufflevector-1.C
   create mode 100644 gcc/testsuite/g++.dg/builtin-shufflevector-2.C

diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index b7daa2e2654..c4eb2b1c920 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -51,6 +51,8 @@ along with GCC; see the file COPYING3.  If not see
   #include "c-spellcheck.h"
   #include "selftest.h"
   #include "debug.h"
+#include "tree-vector-builder.h"
+#include "vec-perm-indices.h"
   
   cpp_reader *parse_in;		/* Declared in c-pragma.h.  */
   
@@ -383,6 +385,7 @@ const struct c_common_resword c_common_reswords[] =

 { "__builtin_has_attribute", RID_BUILTIN_HAS_ATTRIBUTE, 0 },
 { "__builtin_launder", RID_BUILTIN_LAUNDER, D_CXXONLY },
 { "__builtin_shuffle", RID_BUILTIN_SHUFFLE, 0 },
+  { "__builtin_shufflevector", RID_BUILTIN_SHUFFLEVECTOR, 0 },
 { "__builtin_tgmath", RID_BUILTIN_TGMATH, D_CONLY },
 { "__builtin_offsetof", RID_OFFSETOF, 0 },
 { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY },
@@ -1108,6 +,142 @@ c_build_vec_perm_expr (location_t loc, tree v0, tree
v1, tree mask,
 return ret;
   }
   
+/* Build a VEC_PERM_EXPR if V0, V1 are not error_mark_nodes

+   and have vector types, V0 has the same element type as V1, and the
+   number of elements the result is that of MASK.  */
+tree
+c_build_shufflevector (location_t loc, tree v0, tree v1, vec mask,



Re: [PATCH] c++/88601 - [C/C++] __builtin_shufflevector support

2021-05-25 Thread Richard Biener
On Fri, 21 May 2021, Jason Merrill wrote:

> On 5/21/21 8:33 AM, Richard Biener wrote:
> > This adds support for the clang __builtin_shufflevector extension to
> > the C and C++ frontends.  The builtin is lowered to VEC_PERM_EXPR.
> > Because VEC_PERM_EXPR does not support different sized vector inputs
> > or result or the special permute index of -1 (don't-care)
> > c_build_shufflevector applies lowering by widening inputs and output
> > to the widest vector, replacing -1 by a defined index and
> > subsetting the final vector if we produced a wider result than
> > desired.
> > 
> > Code generation thus can be sub-optimal, followup patches will
> > aim to fix that by recovering from part of the missing features
> > during RTL expansion and by relaxing the constraints of the GIMPLE
> > IL with regard to VEC_PERM_EXPR.
> > 
> > Bootstrapped on x86_64-unknown-linux-gnu, (re-)testing in progress.
> > 
> > Honza - you've filed PR88601, can you point me to testcases that
> > exercise common uses so we can look at code generation quality
> > and where time is spent best in improving things?
> > 
> > OK for trunk?
> > 
> > Thanks,
> > Richard.
> > 
> > 2021-05-21  Richard Biener  
> > 
> > PR c++/88601
> > gcc/c-family/
> >  * c-common.c: Include tree-vector-builder.h and
> >  vec-perm-indices.h.
> >  (c_common_reswords): Add __builtin_shufflevector.
> >  (c_build_shufflevector): New funtion.
> >  * c-common.h (enum rid): Add RID_BUILTIN_SHUFFLEVECTOR.
> >  (c_build_shufflevector): Declare.
> > 
> > gcc/c/
> >  * c-decl.c (names_builtin_p): Handle RID_BUILTIN_SHUFFLEVECTOR.
> >  * c-parser.c (c_parser_postfix_expression): Likewise.
> > 
> > gcc/cp/
> >  * cp-objcp-common.c (names_builtin_p): Handle
> >  RID_BUILTIN_SHUFFLEVECTOR.
> >  * cp-tree.h (build_x_shufflevector): Declare.
> >  * parser.c (cp_parser_postfix_expression): Handle
> >  RID_BUILTIN_SHUFFLEVECTOR.
> >  * pt.c (tsubst_copy_and_build): Handle IFN_SHUFFLEVECTOR.
> >  * typeck.c (build_x_shufflevector): Build either a lowered
> >  VEC_PERM_EXPR or an unlowered shufflevector via a temporary
> >  internal function IFN_SHUFFLEVECTOR.
> > 
> > gcc/
> >  * internal-fn.c (expand_SHUFFLEVECTOR): Define.
> >  * internal-fn.def (SHUFFLEVECTOR): New.
> >  * internal-fn.h (expand_SHUFFLEVECTOR): Declare.
> > 
> > gcc/testsuite/
> >  * c-c++-common/builtin-shufflevector-2.c: New testcase.
> >  * c-c++-common/torture/builtin-shufflevector-1.c: Likewise.
> >  * g++.dg/builtin-shufflevector-1.C: Likewise.
> >  * g++.dg/builtin-shufflevector-2.C: Likewise.
> > ---
> >   gcc/c-family/c-common.c   | 139 ++
> >   gcc/c-family/c-common.h   |   4 +-
> >   gcc/c/c-decl.c|   1 +
> >   gcc/c/c-parser.c  |  38 +
> >   gcc/cp/cp-objcp-common.c  |   1 +
> >   gcc/cp/cp-tree.h  |   3 +
> >   gcc/cp/parser.c   |  15 ++
> >   gcc/cp/pt.c   |   9 ++
> >   gcc/cp/typeck.c   |  36 +
> >   gcc/internal-fn.c |   6 +
> >   gcc/internal-fn.def   |   3 +
> >   gcc/internal-fn.h |   1 +
> >   .../c-c++-common/builtin-shufflevector-2.c|  18 +++
> >   .../torture/builtin-shufflevector-1.c |  49 ++
> >   .../g++.dg/builtin-shufflevector-1.C  |  18 +++
> >   .../g++.dg/builtin-shufflevector-2.C  |  12 ++
> >   16 files changed, 352 insertions(+), 1 deletion(-)
> >   create mode 100644 gcc/testsuite/c-c++-common/builtin-shufflevector-2.c
> >   create mode 100644
> >   gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c
> >   create mode 100644 gcc/testsuite/g++.dg/builtin-shufflevector-1.C
> >   create mode 100644 gcc/testsuite/g++.dg/builtin-shufflevector-2.C
> > 
> > diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
> > index b7daa2e2654..c4eb2b1c920 100644
> > --- a/gcc/c-family/c-common.c
> > +++ b/gcc/c-family/c-common.c
> > @@ -51,6 +51,8 @@ along with GCC; see the file COPYING3.  If not see
> >   #include "c-spellcheck.h"
> >   #include "selftest.h"
> >   #include "debug.h"
> > +#include "tree-vector-builder.h"
> > +#include "vec-perm-indices.h"
> >   
> >   cpp_reader *parse_in; /* Declared in c-pragma.h.  */
> >   
> > @@ -383,6 +385,7 @@ const struct c_common_resword c_common_reswords[] =
> > { "__builtin_has_attribute", RID_BUILTIN_HAS_ATTRIBUTE, 0 },
> > { "__builtin_launder", RID_BUILTIN_LAUNDER, D_CXXONLY },
> > { "__builtin_shuffle", RID_BUILTIN_SHUFFLE, 0 },
> > +  { "__builtin_shufflevector", RID_BUILTIN_SHUFFLEVECTOR, 0 },
> > { "__builtin_tgmath", RID_BUILTIN_TGMATH, D_CONLY },
> > { "__builtin_offsetof", RID_OFFSETOF, 0 },
> > { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY },
> > @@ -1108,6 +,142 @@ c_build_vec_perm_expr 

Re: [PATCH] c++/88601 - [C/C++] __builtin_shufflevector support

2021-05-21 Thread Jason Merrill via Gcc-patches

On 5/21/21 8:33 AM, Richard Biener wrote:

This adds support for the clang __builtin_shufflevector extension to
the C and C++ frontends.  The builtin is lowered to VEC_PERM_EXPR.
Because VEC_PERM_EXPR does not support different sized vector inputs
or result or the special permute index of -1 (don't-care)
c_build_shufflevector applies lowering by widening inputs and output
to the widest vector, replacing -1 by a defined index and
subsetting the final vector if we produced a wider result than
desired.

Code generation thus can be sub-optimal, followup patches will
aim to fix that by recovering from part of the missing features
during RTL expansion and by relaxing the constraints of the GIMPLE
IL with regard to VEC_PERM_EXPR.

Bootstrapped on x86_64-unknown-linux-gnu, (re-)testing in progress.

Honza - you've filed PR88601, can you point me to testcases that
exercise common uses so we can look at code generation quality
and where time is spent best in improving things?

OK for trunk?

Thanks,
Richard.

2021-05-21  Richard Biener  

PR c++/88601
gcc/c-family/
* c-common.c: Include tree-vector-builder.h and
vec-perm-indices.h.
(c_common_reswords): Add __builtin_shufflevector.
(c_build_shufflevector): New funtion.
* c-common.h (enum rid): Add RID_BUILTIN_SHUFFLEVECTOR.
(c_build_shufflevector): Declare.

gcc/c/
* c-decl.c (names_builtin_p): Handle RID_BUILTIN_SHUFFLEVECTOR.
* c-parser.c (c_parser_postfix_expression): Likewise.

gcc/cp/
* cp-objcp-common.c (names_builtin_p): Handle
RID_BUILTIN_SHUFFLEVECTOR.
* cp-tree.h (build_x_shufflevector): Declare.
* parser.c (cp_parser_postfix_expression): Handle
RID_BUILTIN_SHUFFLEVECTOR.
* pt.c (tsubst_copy_and_build): Handle IFN_SHUFFLEVECTOR.
* typeck.c (build_x_shufflevector): Build either a lowered
VEC_PERM_EXPR or an unlowered shufflevector via a temporary
internal function IFN_SHUFFLEVECTOR.

gcc/
* internal-fn.c (expand_SHUFFLEVECTOR): Define.
* internal-fn.def (SHUFFLEVECTOR): New.
* internal-fn.h (expand_SHUFFLEVECTOR): Declare.

gcc/testsuite/
* c-c++-common/builtin-shufflevector-2.c: New testcase.
* c-c++-common/torture/builtin-shufflevector-1.c: Likewise.
* g++.dg/builtin-shufflevector-1.C: Likewise.
* g++.dg/builtin-shufflevector-2.C: Likewise.
---
  gcc/c-family/c-common.c   | 139 ++
  gcc/c-family/c-common.h   |   4 +-
  gcc/c/c-decl.c|   1 +
  gcc/c/c-parser.c  |  38 +
  gcc/cp/cp-objcp-common.c  |   1 +
  gcc/cp/cp-tree.h  |   3 +
  gcc/cp/parser.c   |  15 ++
  gcc/cp/pt.c   |   9 ++
  gcc/cp/typeck.c   |  36 +
  gcc/internal-fn.c |   6 +
  gcc/internal-fn.def   |   3 +
  gcc/internal-fn.h |   1 +
  .../c-c++-common/builtin-shufflevector-2.c|  18 +++
  .../torture/builtin-shufflevector-1.c |  49 ++
  .../g++.dg/builtin-shufflevector-1.C  |  18 +++
  .../g++.dg/builtin-shufflevector-2.C  |  12 ++
  16 files changed, 352 insertions(+), 1 deletion(-)
  create mode 100644 gcc/testsuite/c-c++-common/builtin-shufflevector-2.c
  create mode 100644 
gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c
  create mode 100644 gcc/testsuite/g++.dg/builtin-shufflevector-1.C
  create mode 100644 gcc/testsuite/g++.dg/builtin-shufflevector-2.C

diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index b7daa2e2654..c4eb2b1c920 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -51,6 +51,8 @@ along with GCC; see the file COPYING3.  If not see
  #include "c-spellcheck.h"
  #include "selftest.h"
  #include "debug.h"
+#include "tree-vector-builder.h"
+#include "vec-perm-indices.h"
  
  cpp_reader *parse_in;		/* Declared in c-pragma.h.  */
  
@@ -383,6 +385,7 @@ const struct c_common_resword c_common_reswords[] =

{ "__builtin_has_attribute", RID_BUILTIN_HAS_ATTRIBUTE, 0 },
{ "__builtin_launder", RID_BUILTIN_LAUNDER, D_CXXONLY },
{ "__builtin_shuffle", RID_BUILTIN_SHUFFLE, 0 },
+  { "__builtin_shufflevector", RID_BUILTIN_SHUFFLEVECTOR, 0 },
{ "__builtin_tgmath", RID_BUILTIN_TGMATH, D_CONLY },
{ "__builtin_offsetof", RID_OFFSETOF, 0 },
{ "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY },
@@ -1108,6 +,142 @@ c_build_vec_perm_expr (location_t loc, tree v0, tree 
v1, tree mask,
return ret;
  }
  
+/* Build a VEC_PERM_EXPR if V0, V1 are not error_mark_nodes

+   and have vector types, V0 has the same element type as V1, and the
+   number of elements the result is that of MASK.  */
+tree
+c_build_shufflevector (location_t loc, tree v0, 

Re: [PATCH] c++/88601 - [C/C++] __builtin_shufflevector support

2021-05-21 Thread Richard Biener via Gcc-patches
On Fri, May 21, 2021 at 3:19 PM Richard Biener  wrote:
>
> This adds support for the clang __builtin_shufflevector extension to
> the C and C++ frontends.  The builtin is lowered to VEC_PERM_EXPR.
> Because VEC_PERM_EXPR does not support different sized vector inputs
> or result or the special permute index of -1 (don't-care)
> c_build_shufflevector applies lowering by widening inputs and output
> to the widest vector, replacing -1 by a defined index and
> subsetting the final vector if we produced a wider result than
> desired.
>
> Code generation thus can be sub-optimal, followup patches will
> aim to fix that by recovering from part of the missing features
> during RTL expansion and by relaxing the constraints of the GIMPLE
> IL with regard to VEC_PERM_EXPR.
>
> Bootstrapped on x86_64-unknown-linux-gnu, (re-)testing in progress.
>
> Honza - you've filed PR88601, can you point me to testcases that
> exercise common uses so we can look at code generation quality
> and where time is spent best in improving things?
>
> OK for trunk?

Updated patch with added documentation and the C++ testcases
moved to g++.dg/ext/

Richard.


p
Description: Binary data