public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
@ 2018-10-04 14:12 Martin Liška
  2018-10-04 14:34 ` Jeff Law
  2018-10-08  9:16 ` Renlin Li
  0 siblings, 2 replies; 26+ messages in thread
From: Martin Liška @ 2018-10-04 14:12 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 840 bytes --]

Hi.

When having a pair of target clones where foo calls bar, if the target
attribute are equal we can redirect the call and not use ifunc dispatcher.

Patch survives regression tests on x86_64-linux-gnu.
Ready for trunk?

Martin

gcc/ChangeLog:

2018-10-04  Martin Liska  <mliska@suse.cz>

	PR ipa/82625
	* multiple_target.c (redirect_to_specific_clone): New function.
	(ipa_target_clone): Use it.
	* tree-inline.c: Fix comment.

gcc/testsuite/ChangeLog:

2018-10-04  Martin Liska  <mliska@suse.cz>

	PR ipa/82625
	* g++.dg/ext/pr82625.C: New test.
---
 gcc/multiple_target.c              | 51 ++++++++++++++++++++++++++++++
 gcc/testsuite/g++.dg/ext/pr82625.C | 36 +++++++++++++++++++++
 gcc/tree-inline.c                  |  2 +-
 3 files changed, 88 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/ext/pr82625.C



[-- Attachment #2: 0001-Redirect-call-within-specific-target-attribute-among.patch --]
[-- Type: text/x-patch, Size: 3489 bytes --]

diff --git a/gcc/multiple_target.c b/gcc/multiple_target.c
index a610d9a3345..2d892f201c5 100644
--- a/gcc/multiple_target.c
+++ b/gcc/multiple_target.c
@@ -451,6 +451,54 @@ expand_target_clones (struct cgraph_node *node, bool definition)
   return ret;
 }
 
+/* When NODE is a target clone, consider all callees and redirect
+   to a clone with equal target attributes.  That prevents multiple
+   multi-versioning dispatches and a call-chain can be optimized.  */
+
+static void
+redirect_to_specific_clone (cgraph_node *node)
+{
+  cgraph_function_version_info *fv = node->function_version ();
+  if (fv == NULL)
+    return;
+
+  tree attr_target = lookup_attribute ("target", DECL_ATTRIBUTES (node->decl));
+  if (attr_target == NULL_TREE)
+    return;
+
+  /* We need to remember NEXT_CALLER as it could be modified in the loop.  */
+  for (cgraph_edge *e = node->callees; e ; e = e->next_callee)
+    {
+      cgraph_function_version_info *fv2 = e->callee->function_version ();
+      if (!fv2)
+	continue;
+
+      tree attr_target2 = lookup_attribute ("target",
+					    DECL_ATTRIBUTES (e->callee->decl));
+
+      /* Function is not calling proper target clone.  */
+      if (!attribute_list_equal (attr_target, attr_target2))
+	{
+	  while (fv2->prev != NULL)
+	    fv2 = fv2->prev;
+
+	  /* Try to find a clone with equal target attribute.  */
+	  for (; fv2 != NULL; fv2 = fv2->next)
+	    {
+	      cgraph_node *callee = fv2->this_node;
+	      attr_target2 = lookup_attribute ("target",
+					       DECL_ATTRIBUTES (callee->decl));
+	      if (attribute_list_equal (attr_target, attr_target2))
+		{
+		  e->redirect_callee (callee);
+		  e->redirect_call_stmt_to_callee ();
+		  break;
+		}
+	    }
+	}
+    }
+}
+
 static unsigned int
 ipa_target_clone (void)
 {
@@ -464,6 +512,9 @@ ipa_target_clone (void)
   for (unsigned i = 0; i < to_dispatch.length (); i++)
     create_dispatcher_calls (to_dispatch[i]);
 
+  FOR_EACH_FUNCTION (node)
+    redirect_to_specific_clone (node);
+
   return 0;
 }
 
diff --git a/gcc/testsuite/g++.dg/ext/pr82625.C b/gcc/testsuite/g++.dg/ext/pr82625.C
new file mode 100644
index 00000000000..47bd2df1104
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/pr82625.C
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-require-ifunc "" } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+__attribute__ ((target ("default")))
+static unsigned foo(const char *buf, unsigned size) {
+  return 1;
+}
+
+__attribute__ ((target ("avx")))
+static unsigned foo(const char *buf, unsigned size) {
+  return 2;
+}
+
+__attribute__ ((target ("default")))
+unsigned bar() {
+  char buf[4096];
+  unsigned acc = 0;
+  for (int i = 0; i < sizeof(buf); i++) {
+    acc += foo(&buf[i], 1);
+  }
+  return acc;
+}
+
+__attribute__ ((target ("avx")))
+unsigned bar() {
+  char buf[4096];
+  unsigned acc = 0;
+  for (int i = 0; i < sizeof(buf); i++) {
+    acc += foo(&buf[i], 1);
+  }
+  return acc;
+}
+
+/* { dg-final { scan-tree-dump-times "return 4096;" 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "return 8192;" 1 "optimized" } } */
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index ff8ee8ce78f..913425394e0 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -2631,7 +2631,7 @@ copy_loops (copy_body_data *id,
     }
 }
 
-/* Call cgraph_redirect_edge_call_stmt_to_callee on all calls in BB */
+/* Call redirect_call_stmt_to_callee on all calls in BB.  */
 
 void
 redirect_all_calls (copy_body_data * id, basic_block bb)


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-04 14:12 [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625) Martin Liška
@ 2018-10-04 14:34 ` Jeff Law
  2018-10-04 14:58   ` Martin Liška
  2018-10-08  9:16 ` Renlin Li
  1 sibling, 1 reply; 26+ messages in thread
From: Jeff Law @ 2018-10-04 14:34 UTC (permalink / raw)
  To: Martin Liška, gcc-patches

On 10/4/18 7:56 AM, Martin Liška wrote:
> Hi.
> 
> When having a pair of target clones where foo calls bar, if the target
> attribute are equal we can redirect the call and not use ifunc dispatcher.
> 
> Patch survives regression tests on x86_64-linux-gnu.
> Ready for trunk?
> 
> Martin
> 
> gcc/ChangeLog:
> 
> 2018-10-04  Martin Liska  <mliska@suse.cz>
> 
> 	PR ipa/82625
> 	* multiple_target.c (redirect_to_specific_clone): New function.
> 	(ipa_target_clone): Use it.
> 	* tree-inline.c: Fix comment.
> 
> gcc/testsuite/ChangeLog:
> 
> 2018-10-04  Martin Liska  <mliska@suse.cz>
> 
> 	PR ipa/82625
> 	* g++.dg/ext/pr82625.C: New test.
Your timing is good.  The issues with unnecessary calls to ifunc
dispatchers when we have an ifunc that is not a leaf in the call graph
came up in some meetings I was having last week.

I doubt this is enough to address all the issues folks raised, but ISTM
it should certainly help.

OK for the trunk.

Jeff


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-04 14:34 ` Jeff Law
@ 2018-10-04 14:58   ` Martin Liška
  0 siblings, 0 replies; 26+ messages in thread
From: Martin Liška @ 2018-10-04 14:58 UTC (permalink / raw)
  To: Jeff Law, gcc-patches

On 10/4/18 4:17 PM, Jeff Law wrote:
> On 10/4/18 7:56 AM, Martin Liška wrote:
>> Hi.
>>
>> When having a pair of target clones where foo calls bar, if the target
>> attribute are equal we can redirect the call and not use ifunc dispatcher.
>>
>> Patch survives regression tests on x86_64-linux-gnu.
>> Ready for trunk?
>>
>> Martin
>>
>> gcc/ChangeLog:
>>
>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>
>> 	PR ipa/82625
>> 	* multiple_target.c (redirect_to_specific_clone): New function.
>> 	(ipa_target_clone): Use it.
>> 	* tree-inline.c: Fix comment.
>>
>> gcc/testsuite/ChangeLog:
>>
>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>
>> 	PR ipa/82625
>> 	* g++.dg/ext/pr82625.C: New test.
> Your timing is good.  The issues with unnecessary calls to ifunc
> dispatchers when we have an ifunc that is not a leaf in the call graph
> came up in some meetings I was having last week.

Funny.

> 
> I doubt this is enough to address all the issues folks raised, but ISTM
> it should certainly help.

Sure, are you talking about:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83411
https://hannes.hauswedell.net/post/2017/12/09/fmv/

or do you have any other specific situations?

> 
> OK for the trunk.

Installed as r264845.

Martin

> 
> Jeff
> 
> 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-04 14:12 [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625) Martin Liška
  2018-10-04 14:34 ` Jeff Law
@ 2018-10-08  9:16 ` Renlin Li
  2018-10-08 10:06   ` Martin Liška
  1 sibling, 1 reply; 26+ messages in thread
From: Renlin Li @ 2018-10-08  9:16 UTC (permalink / raw)
  To: Martin Liška, gcc-patches

Hi Martin,

pr82625.C failed on compiler builds which don't support "default" and "avx" target.
For example, arm/aarch64 native linux gcc compiler.


As I found in this gcc wiki: https://gcc.gnu.org/wiki/FunctionMultiVersioning
'''
This support is available in GCC 4.8 and later. Support is only available in C++ for i386 targets.
'''

Should the test be guarded with a target selector or require function multi-versioning instead of ifunc?

Regards,
Renlin


On 10/04/2018 02:56 PM, Martin Liška wrote:
> Hi.
> 
> When having a pair of target clones where foo calls bar, if the target
> attribute are equal we can redirect the call and not use ifunc dispatcher.
> 
> Patch survives regression tests on x86_64-linux-gnu.
> Ready for trunk?
> 
> Martin
> 
> gcc/ChangeLog:
> 
> 2018-10-04  Martin Liska  <mliska@suse.cz>
> 
> 	PR ipa/82625
> 	* multiple_target.c (redirect_to_specific_clone): New function.
> 	(ipa_target_clone): Use it.
> 	* tree-inline.c: Fix comment.
> 
> gcc/testsuite/ChangeLog:
> 
> 2018-10-04  Martin Liska  <mliska@suse.cz>
> 
> 	PR ipa/82625
> 	* g++.dg/ext/pr82625.C: New test.
> ---
>   gcc/multiple_target.c              | 51 ++++++++++++++++++++++++++++++
>   gcc/testsuite/g++.dg/ext/pr82625.C | 36 +++++++++++++++++++++
>   gcc/tree-inline.c                  |  2 +-
>   3 files changed, 88 insertions(+), 1 deletion(-)
>   create mode 100644 gcc/testsuite/g++.dg/ext/pr82625.C
> 
> 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-08  9:16 ` Renlin Li
@ 2018-10-08 10:06   ` Martin Liška
  2018-10-08 10:11     ` Richard Earnshaw (lists)
  0 siblings, 1 reply; 26+ messages in thread
From: Martin Liška @ 2018-10-08 10:06 UTC (permalink / raw)
  To: Renlin Li, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1815 bytes --]

On 10/8/18 10:46 AM, Renlin Li wrote:
> Hi Martin,
> 
> pr82625.C failed on compiler builds which don't support "default" and "avx" target.
> For example, arm/aarch64 native linux gcc compiler.
> 
> 
> As I found in this gcc wiki: https://gcc.gnu.org/wiki/FunctionMultiVersioning
> '''
> This support is available in GCC 4.8 and later. Support is only available in C++ for i386 targets.
> '''
> 
> Should the test be guarded with a target selector or require function multi-versioning instead of ifunc?

Hi.

Sure, sorry for the breakage. I'm going to install following tested patch.

Martin

> 
> Regards,
> Renlin
> 
> 
> On 10/04/2018 02:56 PM, Martin Liška wrote:
>> Hi.
>>
>> When having a pair of target clones where foo calls bar, if the target
>> attribute are equal we can redirect the call and not use ifunc dispatcher.
>>
>> Patch survives regression tests on x86_64-linux-gnu.
>> Ready for trunk?
>>
>> Martin
>>
>> gcc/ChangeLog:
>>
>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>
>>     PR ipa/82625
>>     * multiple_target.c (redirect_to_specific_clone): New function.
>>     (ipa_target_clone): Use it.
>>     * tree-inline.c: Fix comment.
>>
>> gcc/testsuite/ChangeLog:
>>
>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>
>>     PR ipa/82625
>>     * g++.dg/ext/pr82625.C: New test.
>> ---
>>   gcc/multiple_target.c              | 51 ++++++++++++++++++++++++++++++
>>   gcc/testsuite/g++.dg/ext/pr82625.C | 36 +++++++++++++++++++++
>>   gcc/tree-inline.c                  |  2 +-
>>   3 files changed, 88 insertions(+), 1 deletion(-)
>>   create mode 100644 gcc/testsuite/g++.dg/ext/pr82625.C
>>
>>


[-- Attachment #2: 0001-Limit-a-MV-test-just-for-x86-target.patch --]
[-- Type: text/x-patch, Size: 880 bytes --]

From e3053abe58eba832262db0af77980012010a642c Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Mon, 8 Oct 2018 11:07:29 +0200
Subject: [PATCH] Limit a MV test just for x86 target.

gcc/testsuite/ChangeLog:

2018-10-08  Martin Liska  <mliska@suse.cz>

	* g++.dg/ext/pr82625.C: Add dg-compile filter.
---
 gcc/testsuite/g++.dg/ext/pr82625.C | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gcc/testsuite/g++.dg/ext/pr82625.C b/gcc/testsuite/g++.dg/ext/pr82625.C
index 47bd2df1104..59b174f8c51 100644
--- a/gcc/testsuite/g++.dg/ext/pr82625.C
+++ b/gcc/testsuite/g++.dg/ext/pr82625.C
@@ -1,6 +1,7 @@
 /* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 /* { dg-options "-O2 -fdump-tree-optimized" } */
+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
 
 __attribute__ ((target ("default")))
 static unsigned foo(const char *buf, unsigned size) {
-- 
2.19.0


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-08 10:06   ` Martin Liška
@ 2018-10-08 10:11     ` Richard Earnshaw (lists)
  2018-10-08 10:29       ` Martin Liška
  0 siblings, 1 reply; 26+ messages in thread
From: Richard Earnshaw (lists) @ 2018-10-08 10:11 UTC (permalink / raw)
  To: Martin Liška, Renlin Li, gcc-patches

On 08/10/18 10:47, Martin Liška wrote:
> On 10/8/18 10:46 AM, Renlin Li wrote:
>> Hi Martin,
>>
>> pr82625.C failed on compiler builds which don't support "default" and "avx" target.
>> For example, arm/aarch64 native linux gcc compiler.
>>
>>
>> As I found in this gcc wiki: https://gcc.gnu.org/wiki/FunctionMultiVersioning
>> '''
>> This support is available in GCC 4.8 and later. Support is only available in C++ for i386 targets.
>> '''
>>
>> Should the test be guarded with a target selector or require function multi-versioning instead of ifunc?
> 
> Hi.
> 
> Sure, sorry for the breakage. I'm going to install following tested patch.
> 
> Martin
> 
>>
>> Regards,
>> Renlin
>>
>>
>> On 10/04/2018 02:56 PM, Martin Liška wrote:
>>> Hi.
>>>
>>> When having a pair of target clones where foo calls bar, if the target
>>> attribute are equal we can redirect the call and not use ifunc dispatcher.
>>>
>>> Patch survives regression tests on x86_64-linux-gnu.
>>> Ready for trunk?
>>>
>>> Martin
>>>
>>> gcc/ChangeLog:
>>>
>>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>>
>>>     PR ipa/82625
>>>     * multiple_target.c (redirect_to_specific_clone): New function.
>>>     (ipa_target_clone): Use it.
>>>     * tree-inline.c: Fix comment.
>>>
>>> gcc/testsuite/ChangeLog:
>>>
>>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>>
>>>     PR ipa/82625
>>>     * g++.dg/ext/pr82625.C: New test.
>>> ---
>>>   gcc/multiple_target.c              | 51 ++++++++++++++++++++++++++++++
>>>   gcc/testsuite/g++.dg/ext/pr82625.C | 36 +++++++++++++++++++++
>>>   gcc/tree-inline.c                  |  2 +-
>>>   3 files changed, 88 insertions(+), 1 deletion(-)
>>>   create mode 100644 gcc/testsuite/g++.dg/ext/pr82625.C
>>>
>>>
> 
> 
> 0001-Limit-a-MV-test-just-for-x86-target.patch
> 
> 
> From e3053abe58eba832262db0af77980012010a642c Mon Sep 17 00:00:00 2001
> From: marxin <mliska@suse.cz>
> Date: Mon, 8 Oct 2018 11:07:29 +0200
> Subject: [PATCH] Limit a MV test just for x86 target.
> 
> gcc/testsuite/ChangeLog:
> 
> 2018-10-08  Martin Liska  <mliska@suse.cz>
> 
> 	* g++.dg/ext/pr82625.C: Add dg-compile filter.
> ---
>  gcc/testsuite/g++.dg/ext/pr82625.C | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/gcc/testsuite/g++.dg/ext/pr82625.C b/gcc/testsuite/g++.dg/ext/pr82625.C
> index 47bd2df1104..59b174f8c51 100644
> --- a/gcc/testsuite/g++.dg/ext/pr82625.C
> +++ b/gcc/testsuite/g++.dg/ext/pr82625.C
> @@ -1,6 +1,7 @@
>  /* { dg-do compile } */
>  /* { dg-require-ifunc "" } */
>  /* { dg-options "-O2 -fdump-tree-optimized" } */
> +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
>  
>  __attribute__ ((target ("default")))
>  static unsigned foo(const char *buf, unsigned size) {
> 

Which begs the question why is this not put under g++.target?

R.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-08 10:11     ` Richard Earnshaw (lists)
@ 2018-10-08 10:29       ` Martin Liška
  2018-10-08 10:34         ` Richard Biener
  0 siblings, 1 reply; 26+ messages in thread
From: Martin Liška @ 2018-10-08 10:29 UTC (permalink / raw)
  To: Richard Earnshaw (lists), Renlin Li, gcc-patches

On 10/8/18 11:55 AM, Richard Earnshaw (lists) wrote:
> On 08/10/18 10:47, Martin Liška wrote:
>> On 10/8/18 10:46 AM, Renlin Li wrote:
>>> Hi Martin,
>>>
>>> pr82625.C failed on compiler builds which don't support "default" and "avx" target.
>>> For example, arm/aarch64 native linux gcc compiler.
>>>
>>>
>>> As I found in this gcc wiki: https://gcc.gnu.org/wiki/FunctionMultiVersioning
>>> '''
>>> This support is available in GCC 4.8 and later. Support is only available in C++ for i386 targets.
>>> '''
>>>
>>> Should the test be guarded with a target selector or require function multi-versioning instead of ifunc?
>>
>> Hi.
>>
>> Sure, sorry for the breakage. I'm going to install following tested patch.
>>
>> Martin
>>
>>>
>>> Regards,
>>> Renlin
>>>
>>>
>>> On 10/04/2018 02:56 PM, Martin Liška wrote:
>>>> Hi.
>>>>
>>>> When having a pair of target clones where foo calls bar, if the target
>>>> attribute are equal we can redirect the call and not use ifunc dispatcher.
>>>>
>>>> Patch survives regression tests on x86_64-linux-gnu.
>>>> Ready for trunk?
>>>>
>>>> Martin
>>>>
>>>> gcc/ChangeLog:
>>>>
>>>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>>>
>>>>     PR ipa/82625
>>>>     * multiple_target.c (redirect_to_specific_clone): New function.
>>>>     (ipa_target_clone): Use it.
>>>>     * tree-inline.c: Fix comment.
>>>>
>>>> gcc/testsuite/ChangeLog:
>>>>
>>>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>>>
>>>>     PR ipa/82625
>>>>     * g++.dg/ext/pr82625.C: New test.
>>>> ---
>>>>   gcc/multiple_target.c              | 51 ++++++++++++++++++++++++++++++
>>>>   gcc/testsuite/g++.dg/ext/pr82625.C | 36 +++++++++++++++++++++
>>>>   gcc/tree-inline.c                  |  2 +-
>>>>   3 files changed, 88 insertions(+), 1 deletion(-)
>>>>   create mode 100644 gcc/testsuite/g++.dg/ext/pr82625.C
>>>>
>>>>
>>
>>
>> 0001-Limit-a-MV-test-just-for-x86-target.patch
>>
>>
>> From e3053abe58eba832262db0af77980012010a642c Mon Sep 17 00:00:00 2001
>> From: marxin <mliska@suse.cz>
>> Date: Mon, 8 Oct 2018 11:07:29 +0200
>> Subject: [PATCH] Limit a MV test just for x86 target.
>>
>> gcc/testsuite/ChangeLog:
>>
>> 2018-10-08  Martin Liska  <mliska@suse.cz>
>>
>> 	* g++.dg/ext/pr82625.C: Add dg-compile filter.
>> ---
>>  gcc/testsuite/g++.dg/ext/pr82625.C | 1 +
>>  1 file changed, 1 insertion(+)
>>
>> diff --git a/gcc/testsuite/g++.dg/ext/pr82625.C b/gcc/testsuite/g++.dg/ext/pr82625.C
>> index 47bd2df1104..59b174f8c51 100644
>> --- a/gcc/testsuite/g++.dg/ext/pr82625.C
>> +++ b/gcc/testsuite/g++.dg/ext/pr82625.C
>> @@ -1,6 +1,7 @@
>>  /* { dg-do compile } */
>>  /* { dg-require-ifunc "" } */
>>  /* { dg-options "-O2 -fdump-tree-optimized" } */
>> +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
>>  
>>  __attribute__ ((target ("default")))
>>  static unsigned foo(const char *buf, unsigned size) {
>>
> 
> Which begs the question why is this not put under g++.target?
> 
> R.
> 

Agree, apparently we have quite some tests that should be moved:
gcc/testsuite/g++.dg/ext/pr57362.C:/* { dg-require-ifunc "" }  */
gcc/testsuite/g++.dg/ext/pr57548.C:/* { dg-require-ifunc "" }  */
gcc/testsuite/g++.dg/ext/pr82625.C:/* { dg-require-ifunc "" } */
gcc/testsuite/g++.dg/ext/pr85329-2.C:/* { dg-require-ifunc "" } */
gcc/testsuite/g++.dg/ext/pr85329.C:/* { dg-require-ifunc "" } */
...
gcc/testsuite/g++.dg/ext/mv*.C

I'll prepare patch for it.
Martin

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-08 10:29       ` Martin Liška
@ 2018-10-08 10:34         ` Richard Biener
  2018-10-08 10:46           ` Martin Liška
  2018-10-08 11:14           ` Richard Earnshaw (lists)
  0 siblings, 2 replies; 26+ messages in thread
From: Richard Biener @ 2018-10-08 10:34 UTC (permalink / raw)
  To: Martin Liška; +Cc: Richard Earnshaw, renlin.li, GCC Patches

On Mon, Oct 8, 2018 at 12:14 PM Martin Liška <mliska@suse.cz> wrote:
>
> On 10/8/18 11:55 AM, Richard Earnshaw (lists) wrote:
> > On 08/10/18 10:47, Martin Liška wrote:
> >> On 10/8/18 10:46 AM, Renlin Li wrote:
> >>> Hi Martin,
> >>>
> >>> pr82625.C failed on compiler builds which don't support "default" and "avx" target.
> >>> For example, arm/aarch64 native linux gcc compiler.
> >>>
> >>>
> >>> As I found in this gcc wiki: https://gcc.gnu.org/wiki/FunctionMultiVersioning
> >>> '''
> >>> This support is available in GCC 4.8 and later. Support is only available in C++ for i386 targets.
> >>> '''
> >>>
> >>> Should the test be guarded with a target selector or require function multi-versioning instead of ifunc?
> >>
> >> Hi.
> >>
> >> Sure, sorry for the breakage. I'm going to install following tested patch.
> >>
> >> Martin
> >>
> >>>
> >>> Regards,
> >>> Renlin
> >>>
> >>>
> >>> On 10/04/2018 02:56 PM, Martin Liška wrote:
> >>>> Hi.
> >>>>
> >>>> When having a pair of target clones where foo calls bar, if the target
> >>>> attribute are equal we can redirect the call and not use ifunc dispatcher.
> >>>>
> >>>> Patch survives regression tests on x86_64-linux-gnu.
> >>>> Ready for trunk?
> >>>>
> >>>> Martin
> >>>>
> >>>> gcc/ChangeLog:
> >>>>
> >>>> 2018-10-04  Martin Liska  <mliska@suse.cz>
> >>>>
> >>>>     PR ipa/82625
> >>>>     * multiple_target.c (redirect_to_specific_clone): New function.
> >>>>     (ipa_target_clone): Use it.
> >>>>     * tree-inline.c: Fix comment.
> >>>>
> >>>> gcc/testsuite/ChangeLog:
> >>>>
> >>>> 2018-10-04  Martin Liska  <mliska@suse.cz>
> >>>>
> >>>>     PR ipa/82625
> >>>>     * g++.dg/ext/pr82625.C: New test.
> >>>> ---
> >>>>   gcc/multiple_target.c              | 51 ++++++++++++++++++++++++++++++
> >>>>   gcc/testsuite/g++.dg/ext/pr82625.C | 36 +++++++++++++++++++++
> >>>>   gcc/tree-inline.c                  |  2 +-
> >>>>   3 files changed, 88 insertions(+), 1 deletion(-)
> >>>>   create mode 100644 gcc/testsuite/g++.dg/ext/pr82625.C
> >>>>
> >>>>
> >>
> >>
> >> 0001-Limit-a-MV-test-just-for-x86-target.patch
> >>
> >>
> >> From e3053abe58eba832262db0af77980012010a642c Mon Sep 17 00:00:00 2001
> >> From: marxin <mliska@suse.cz>
> >> Date: Mon, 8 Oct 2018 11:07:29 +0200
> >> Subject: [PATCH] Limit a MV test just for x86 target.
> >>
> >> gcc/testsuite/ChangeLog:
> >>
> >> 2018-10-08  Martin Liska  <mliska@suse.cz>
> >>
> >>      * g++.dg/ext/pr82625.C: Add dg-compile filter.
> >> ---
> >>  gcc/testsuite/g++.dg/ext/pr82625.C | 1 +
> >>  1 file changed, 1 insertion(+)
> >>
> >> diff --git a/gcc/testsuite/g++.dg/ext/pr82625.C b/gcc/testsuite/g++.dg/ext/pr82625.C
> >> index 47bd2df1104..59b174f8c51 100644
> >> --- a/gcc/testsuite/g++.dg/ext/pr82625.C
> >> +++ b/gcc/testsuite/g++.dg/ext/pr82625.C
> >> @@ -1,6 +1,7 @@
> >>  /* { dg-do compile } */
> >>  /* { dg-require-ifunc "" } */
> >>  /* { dg-options "-O2 -fdump-tree-optimized" } */
> >> +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
> >>
> >>  __attribute__ ((target ("default")))
> >>  static unsigned foo(const char *buf, unsigned size) {
> >>
> >
> > Which begs the question why is this not put under g++.target?
> >
> > R.
> >
>
> Agree, apparently we have quite some tests that should be moved:
> gcc/testsuite/g++.dg/ext/pr57362.C:/* { dg-require-ifunc "" }  */
> gcc/testsuite/g++.dg/ext/pr57548.C:/* { dg-require-ifunc "" }  */
> gcc/testsuite/g++.dg/ext/pr82625.C:/* { dg-require-ifunc "" } */
> gcc/testsuite/g++.dg/ext/pr85329-2.C:/* { dg-require-ifunc "" } */
> gcc/testsuite/g++.dg/ext/pr85329.C:/* { dg-require-ifunc "" } */
> ...
> gcc/testsuite/g++.dg/ext/mv*.C

You cannot move C++ tests to gcc.target/

> I'll prepare patch for it.
> Martin
>

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-08 10:34         ` Richard Biener
@ 2018-10-08 10:46           ` Martin Liška
  2018-10-08 10:55             ` Jakub Jelinek
  2018-10-08 11:14           ` Richard Earnshaw (lists)
  1 sibling, 1 reply; 26+ messages in thread
From: Martin Liška @ 2018-10-08 10:46 UTC (permalink / raw)
  To: Richard Biener; +Cc: Richard Earnshaw, renlin.li, GCC Patches

On 10/8/18 12:29 PM, Richard Biener wrote:
> On Mon, Oct 8, 2018 at 12:14 PM Martin Liška <mliska@suse.cz> wrote:
>>
>> On 10/8/18 11:55 AM, Richard Earnshaw (lists) wrote:
>>> On 08/10/18 10:47, Martin Liška wrote:
>>>> On 10/8/18 10:46 AM, Renlin Li wrote:
>>>>> Hi Martin,
>>>>>
>>>>> pr82625.C failed on compiler builds which don't support "default" and "avx" target.
>>>>> For example, arm/aarch64 native linux gcc compiler.
>>>>>
>>>>>
>>>>> As I found in this gcc wiki: https://gcc.gnu.org/wiki/FunctionMultiVersioning
>>>>> '''
>>>>> This support is available in GCC 4.8 and later. Support is only available in C++ for i386 targets.
>>>>> '''
>>>>>
>>>>> Should the test be guarded with a target selector or require function multi-versioning instead of ifunc?
>>>>
>>>> Hi.
>>>>
>>>> Sure, sorry for the breakage. I'm going to install following tested patch.
>>>>
>>>> Martin
>>>>
>>>>>
>>>>> Regards,
>>>>> Renlin
>>>>>
>>>>>
>>>>> On 10/04/2018 02:56 PM, Martin Liška wrote:
>>>>>> Hi.
>>>>>>
>>>>>> When having a pair of target clones where foo calls bar, if the target
>>>>>> attribute are equal we can redirect the call and not use ifunc dispatcher.
>>>>>>
>>>>>> Patch survives regression tests on x86_64-linux-gnu.
>>>>>> Ready for trunk?
>>>>>>
>>>>>> Martin
>>>>>>
>>>>>> gcc/ChangeLog:
>>>>>>
>>>>>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>>>>>
>>>>>>     PR ipa/82625
>>>>>>     * multiple_target.c (redirect_to_specific_clone): New function.
>>>>>>     (ipa_target_clone): Use it.
>>>>>>     * tree-inline.c: Fix comment.
>>>>>>
>>>>>> gcc/testsuite/ChangeLog:
>>>>>>
>>>>>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>>>>>
>>>>>>     PR ipa/82625
>>>>>>     * g++.dg/ext/pr82625.C: New test.
>>>>>> ---
>>>>>>   gcc/multiple_target.c              | 51 ++++++++++++++++++++++++++++++
>>>>>>   gcc/testsuite/g++.dg/ext/pr82625.C | 36 +++++++++++++++++++++
>>>>>>   gcc/tree-inline.c                  |  2 +-
>>>>>>   3 files changed, 88 insertions(+), 1 deletion(-)
>>>>>>   create mode 100644 gcc/testsuite/g++.dg/ext/pr82625.C
>>>>>>
>>>>>>
>>>>
>>>>
>>>> 0001-Limit-a-MV-test-just-for-x86-target.patch
>>>>
>>>>
>>>> From e3053abe58eba832262db0af77980012010a642c Mon Sep 17 00:00:00 2001
>>>> From: marxin <mliska@suse.cz>
>>>> Date: Mon, 8 Oct 2018 11:07:29 +0200
>>>> Subject: [PATCH] Limit a MV test just for x86 target.
>>>>
>>>> gcc/testsuite/ChangeLog:
>>>>
>>>> 2018-10-08  Martin Liska  <mliska@suse.cz>
>>>>
>>>>      * g++.dg/ext/pr82625.C: Add dg-compile filter.
>>>> ---
>>>>  gcc/testsuite/g++.dg/ext/pr82625.C | 1 +
>>>>  1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/gcc/testsuite/g++.dg/ext/pr82625.C b/gcc/testsuite/g++.dg/ext/pr82625.C
>>>> index 47bd2df1104..59b174f8c51 100644
>>>> --- a/gcc/testsuite/g++.dg/ext/pr82625.C
>>>> +++ b/gcc/testsuite/g++.dg/ext/pr82625.C
>>>> @@ -1,6 +1,7 @@
>>>>  /* { dg-do compile } */
>>>>  /* { dg-require-ifunc "" } */
>>>>  /* { dg-options "-O2 -fdump-tree-optimized" } */
>>>> +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
>>>>
>>>>  __attribute__ ((target ("default")))
>>>>  static unsigned foo(const char *buf, unsigned size) {
>>>>
>>>
>>> Which begs the question why is this not put under g++.target?
>>>
>>> R.
>>>
>>
>> Agree, apparently we have quite some tests that should be moved:
>> gcc/testsuite/g++.dg/ext/pr57362.C:/* { dg-require-ifunc "" }  */
>> gcc/testsuite/g++.dg/ext/pr57548.C:/* { dg-require-ifunc "" }  */
>> gcc/testsuite/g++.dg/ext/pr82625.C:/* { dg-require-ifunc "" } */
>> gcc/testsuite/g++.dg/ext/pr85329-2.C:/* { dg-require-ifunc "" } */
>> gcc/testsuite/g++.dg/ext/pr85329.C:/* { dg-require-ifunc "" } */
>> ...
>> gcc/testsuite/g++.dg/ext/mv*.C
> 
> You cannot move C++ tests to gcc.target/

I realized that we don't have ./gcc/testsuite/g++.target/i386 yet :/

Martin

> 
>> I'll prepare patch for it.
>> Martin
>>

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-08 10:46           ` Martin Liška
@ 2018-10-08 10:55             ` Jakub Jelinek
  2018-10-08 11:01               ` Martin Liška
  0 siblings, 1 reply; 26+ messages in thread
From: Jakub Jelinek @ 2018-10-08 10:55 UTC (permalink / raw)
  To: Martin Liška
  Cc: Richard Biener, Richard Earnshaw, renlin.li, GCC Patches

On Mon, Oct 08, 2018 at 12:34:19PM +0200, Martin Liška wrote:
> >> gcc/testsuite/g++.dg/ext/mv*.C
> > 
> > You cannot move C++ tests to gcc.target/
> 
> I realized that we don't have ./gcc/testsuite/g++.target/i386 yet :/

But we want it and there are multiple tests waiting for that move.

	Jakub

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-08 10:55             ` Jakub Jelinek
@ 2018-10-08 11:01               ` Martin Liška
  0 siblings, 0 replies; 26+ messages in thread
From: Martin Liška @ 2018-10-08 11:01 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Richard Biener, Richard Earnshaw, renlin.li, GCC Patches

On 10/8/18 12:46 PM, Jakub Jelinek wrote:
> On Mon, Oct 08, 2018 at 12:34:19PM +0200, Martin Liška wrote:
>>>> gcc/testsuite/g++.dg/ext/mv*.C
>>>
>>> You cannot move C++ tests to gcc.target/
>>
>> I realized that we don't have ./gcc/testsuite/g++.target/i386 yet :/
> 
> But we want it and there are multiple tests waiting for that move.
> 
> 	Jakub
> 

I'll try to set it up.

Martin

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
  2018-10-08 10:34         ` Richard Biener
  2018-10-08 10:46           ` Martin Liška
@ 2018-10-08 11:14           ` Richard Earnshaw (lists)
  2018-10-08 11:29             ` [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests Martin Liška
  1 sibling, 1 reply; 26+ messages in thread
From: Richard Earnshaw (lists) @ 2018-10-08 11:14 UTC (permalink / raw)
  To: Richard Biener, Martin Liška; +Cc: renlin.li, GCC Patches

On 08/10/18 11:29, Richard Biener wrote:
> On Mon, Oct 8, 2018 at 12:14 PM Martin Liška <mliska@suse.cz> wrote:
>>
>> On 10/8/18 11:55 AM, Richard Earnshaw (lists) wrote:
>>> On 08/10/18 10:47, Martin Liška wrote:
>>>> On 10/8/18 10:46 AM, Renlin Li wrote:
>>>>> Hi Martin,
>>>>>
>>>>> pr82625.C failed on compiler builds which don't support "default" and "avx" target.
>>>>> For example, arm/aarch64 native linux gcc compiler.
>>>>>
>>>>>
>>>>> As I found in this gcc wiki: https://gcc.gnu.org/wiki/FunctionMultiVersioning
>>>>> '''
>>>>> This support is available in GCC 4.8 and later. Support is only available in C++ for i386 targets.
>>>>> '''
>>>>>
>>>>> Should the test be guarded with a target selector or require function multi-versioning instead of ifunc?
>>>>
>>>> Hi.
>>>>
>>>> Sure, sorry for the breakage. I'm going to install following tested patch.
>>>>
>>>> Martin
>>>>
>>>>>
>>>>> Regards,
>>>>> Renlin
>>>>>
>>>>>
>>>>> On 10/04/2018 02:56 PM, Martin Liška wrote:
>>>>>> Hi.
>>>>>>
>>>>>> When having a pair of target clones where foo calls bar, if the target
>>>>>> attribute are equal we can redirect the call and not use ifunc dispatcher.
>>>>>>
>>>>>> Patch survives regression tests on x86_64-linux-gnu.
>>>>>> Ready for trunk?
>>>>>>
>>>>>> Martin
>>>>>>
>>>>>> gcc/ChangeLog:
>>>>>>
>>>>>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>>>>>
>>>>>>     PR ipa/82625
>>>>>>     * multiple_target.c (redirect_to_specific_clone): New function.
>>>>>>     (ipa_target_clone): Use it.
>>>>>>     * tree-inline.c: Fix comment.
>>>>>>
>>>>>> gcc/testsuite/ChangeLog:
>>>>>>
>>>>>> 2018-10-04  Martin Liska  <mliska@suse.cz>
>>>>>>
>>>>>>     PR ipa/82625
>>>>>>     * g++.dg/ext/pr82625.C: New test.
>>>>>> ---
>>>>>>   gcc/multiple_target.c              | 51 ++++++++++++++++++++++++++++++
>>>>>>   gcc/testsuite/g++.dg/ext/pr82625.C | 36 +++++++++++++++++++++
>>>>>>   gcc/tree-inline.c                  |  2 +-
>>>>>>   3 files changed, 88 insertions(+), 1 deletion(-)
>>>>>>   create mode 100644 gcc/testsuite/g++.dg/ext/pr82625.C
>>>>>>
>>>>>>
>>>>
>>>>
>>>> 0001-Limit-a-MV-test-just-for-x86-target.patch
>>>>
>>>>
>>>> From e3053abe58eba832262db0af77980012010a642c Mon Sep 17 00:00:00 2001
>>>> From: marxin <mliska@suse.cz>
>>>> Date: Mon, 8 Oct 2018 11:07:29 +0200
>>>> Subject: [PATCH] Limit a MV test just for x86 target.
>>>>
>>>> gcc/testsuite/ChangeLog:
>>>>
>>>> 2018-10-08  Martin Liska  <mliska@suse.cz>
>>>>
>>>>      * g++.dg/ext/pr82625.C: Add dg-compile filter.
>>>> ---
>>>>  gcc/testsuite/g++.dg/ext/pr82625.C | 1 +
>>>>  1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/gcc/testsuite/g++.dg/ext/pr82625.C b/gcc/testsuite/g++.dg/ext/pr82625.C
>>>> index 47bd2df1104..59b174f8c51 100644
>>>> --- a/gcc/testsuite/g++.dg/ext/pr82625.C
>>>> +++ b/gcc/testsuite/g++.dg/ext/pr82625.C
>>>> @@ -1,6 +1,7 @@
>>>>  /* { dg-do compile } */
>>>>  /* { dg-require-ifunc "" } */
>>>>  /* { dg-options "-O2 -fdump-tree-optimized" } */
>>>> +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
>>>>
>>>>  __attribute__ ((target ("default")))
>>>>  static unsigned foo(const char *buf, unsigned size) {
>>>>
>>>
>>> Which begs the question why is this not put under g++.target?
>>>
>>> R.
>>>
>>
>> Agree, apparently we have quite some tests that should be moved:
>> gcc/testsuite/g++.dg/ext/pr57362.C:/* { dg-require-ifunc "" }  */
>> gcc/testsuite/g++.dg/ext/pr57548.C:/* { dg-require-ifunc "" }  */
>> gcc/testsuite/g++.dg/ext/pr82625.C:/* { dg-require-ifunc "" } */
>> gcc/testsuite/g++.dg/ext/pr85329-2.C:/* { dg-require-ifunc "" } */
>> gcc/testsuite/g++.dg/ext/pr85329.C:/* { dg-require-ifunc "" } */
>> ...
>> gcc/testsuite/g++.dg/ext/mv*.C
> 
> You cannot move C++ tests to gcc.target/

Which is why I said g++.target...

R.

> 
>> I'll prepare patch for it.
>> Martin
>>

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-08 11:14           ` Richard Earnshaw (lists)
@ 2018-10-08 11:29             ` Martin Liška
  2018-10-08 11:33               ` Jakub Jelinek
  0 siblings, 1 reply; 26+ messages in thread
From: Martin Liška @ 2018-10-08 11:29 UTC (permalink / raw)
  To: Richard Earnshaw (lists), Richard Biener
  Cc: renlin.li, GCC Patches, Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 148 bytes --]

Hi.

I'm suggesting following patch that comes up with new g++.target subfolder.
I moved there i386 multiversioning tests.

Ready for trunk?
Martin

[-- Attachment #2: 0001-Come-up-with-gcc-testsuite-g-.dg-and-move-there-some.patch --]
[-- Type: text/x-patch, Size: 54845 bytes --]

From 152e66a766b69019ef6632276579d9fa9f14f4c4 Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Mon, 8 Oct 2018 13:13:23 +0200
Subject: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.

gcc/testsuite/ChangeLog:

2018-10-08  Martin Liska  <mliska@suse.cz>

	* gcc.target/i386/i386.exp: Include lib/i386.exp.
	* g++.target/i386/i386.exp: New file.
	* gcc.target/i386/mv*.C: Move here tests and remove
	target filter in these tests.
	* lib/i386.exp: New file.
---
 gcc/testsuite/g++.target/i386/i386.exp        |  44 ++
 .../{g++.dg/ext => g++.target/i386}/mv1.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv10.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv11.C    |   2 +-
 .../ext => g++.target/i386}/mv12-aux.cc       |   0
 .../{g++.dg/ext => g++.target/i386}/mv12.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv12.h    |   0
 .../{g++.dg/ext => g++.target/i386}/mv13.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv14.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv15.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv16.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv17.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv18.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv19.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv2.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv20.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv21.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv22.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv23.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv24.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv25.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv26.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv27.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv3.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv4.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv5.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv6.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv7.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv8.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv9.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mvc1.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mvc2.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mvc3.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mvc4.C    |   2 +-
 gcc/testsuite/gcc.target/i386/i386.exp        | 472 +----------------
 gcc/testsuite/lib/i386.exp                    | 488 ++++++++++++++++++
 36 files changed, 564 insertions(+), 502 deletions(-)
 create mode 100644 gcc/testsuite/g++.target/i386/i386.exp
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv1.C (98%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv10.C (74%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv11.C (84%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv12-aux.cc (100%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv12.C (89%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv12.h (100%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv13.C (86%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv14.C (93%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv15.C (93%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv16.C (97%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv17.C (97%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv18.C (78%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv19.C (79%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv2.C (97%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv20.C (79%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv21.C (78%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv22.C (79%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv23.C (79%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv24.C (91%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv25.C (91%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv26.C (82%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv27.C (82%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv3.C (93%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv4.C (89%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv5.C (88%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv6.C (89%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv7.C (80%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv8.C (57%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv9.C (80%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc1.C (88%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc2.C (88%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc3.C (88%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc4.C (88%)
 create mode 100644 gcc/testsuite/lib/i386.exp

diff --git a/gcc/testsuite/g++.target/i386/i386.exp b/gcc/testsuite/g++.target/i386/i386.exp
new file mode 100644
index 00000000000..39188cc5097
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/i386.exp
@@ -0,0 +1,44 @@
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't a x86 target.
+if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then {
+  return
+}
+
+# Load support procs.
+load_lib g++-dg.exp
+load_lib clearcap.exp
+load_lib i386.exp
+
+global DEFAULT_CXXFLAGS
+if ![info exists DEFAULT_CXXFLAGS] then {
+    set DEFAULT_CXXFLAGS " -pedantic-errors"
+}
+
+# Initialize `dg'.
+dg-init
+clearcap-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \
+        "" $DEFAULT_CXXFLAGS
+
+# All done.
+clearcap-finish
+dg-finish
diff --git a/gcc/testsuite/g++.dg/ext/mv1.C b/gcc/testsuite/g++.target/i386/mv1.C
similarity index 98%
rename from gcc/testsuite/g++.dg/ext/mv1.C
rename to gcc/testsuite/g++.target/i386/mv1.C
index 4eedbff7b23..fc713477c1e 100644
--- a/gcc/testsuite/g++.dg/ext/mv1.C
+++ b/gcc/testsuite/g++.target/i386/mv1.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2 -fPIC" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv10.C b/gcc/testsuite/g++.target/i386/mv10.C
similarity index 74%
rename from gcc/testsuite/g++.dg/ext/mv10.C
rename to gcc/testsuite/g++.target/i386/mv10.C
index 5dfe36372cb..07fbd0e9fd9 100644
--- a/gcc/testsuite/g++.dg/ext/mv10.C
+++ b/gcc/testsuite/g++.target/i386/mv10.C
@@ -1,4 +1,4 @@
-// { dg-do assemble { target i?86-*-* x86_64-*-* } }
+// { dg-do assemble }
 // { dg-options "" }
 
 __attribute__((target ("popcnt"), used))
diff --git a/gcc/testsuite/g++.dg/ext/mv11.C b/gcc/testsuite/g++.target/i386/mv11.C
similarity index 84%
rename from gcc/testsuite/g++.dg/ext/mv11.C
rename to gcc/testsuite/g++.target/i386/mv11.C
index 1f5c576f0a7..58aaf50eb36 100644
--- a/gcc/testsuite/g++.dg/ext/mv11.C
+++ b/gcc/testsuite/g++.target/i386/mv11.C
@@ -1,4 +1,4 @@
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile }
 // { dg-options "-msse2" }
 
 int foo () __attribute__ ((target("default")));
diff --git a/gcc/testsuite/g++.dg/ext/mv12-aux.cc b/gcc/testsuite/g++.target/i386/mv12-aux.cc
similarity index 100%
rename from gcc/testsuite/g++.dg/ext/mv12-aux.cc
rename to gcc/testsuite/g++.target/i386/mv12-aux.cc
diff --git a/gcc/testsuite/g++.dg/ext/mv12.C b/gcc/testsuite/g++.target/i386/mv12.C
similarity index 89%
rename from gcc/testsuite/g++.dg/ext/mv12.C
rename to gcc/testsuite/g++.target/i386/mv12.C
index 8b2e423404d..21569627250 100644
--- a/gcc/testsuite/g++.dg/ext/mv12.C
+++ b/gcc/testsuite/g++.target/i386/mv12.C
@@ -1,7 +1,7 @@
 // Test case to check if multiversioning works as expected when the versions
 // are defined in different files.
 
-// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-do run }
 // { dg-require-ifunc "" }
 // { dg-options "-O2" }
 // { dg-additional-sources "mv12-aux.cc" }
diff --git a/gcc/testsuite/g++.dg/ext/mv12.h b/gcc/testsuite/g++.target/i386/mv12.h
similarity index 100%
rename from gcc/testsuite/g++.dg/ext/mv12.h
rename to gcc/testsuite/g++.target/i386/mv12.h
diff --git a/gcc/testsuite/g++.dg/ext/mv13.C b/gcc/testsuite/g++.target/i386/mv13.C
similarity index 86%
rename from gcc/testsuite/g++.dg/ext/mv13.C
rename to gcc/testsuite/g++.target/i386/mv13.C
index 5674d19c974..39d05c71bda 100644
--- a/gcc/testsuite/g++.dg/ext/mv13.C
+++ b/gcc/testsuite/g++.target/i386/mv13.C
@@ -1,7 +1,7 @@
 // Test case to check if multiversioning functions that are extern "C"
 // generates errors.
 
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile }
 
 extern "C"
 __attribute__ ((target ("default")))
diff --git a/gcc/testsuite/g++.dg/ext/mv14.C b/gcc/testsuite/g++.target/i386/mv14.C
similarity index 93%
rename from gcc/testsuite/g++.dg/ext/mv14.C
rename to gcc/testsuite/g++.target/i386/mv14.C
index 1e7a1619698..ccebb3371fe 100644
--- a/gcc/testsuite/g++.dg/ext/mv14.C
+++ b/gcc/testsuite/g++.target/i386/mv14.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2 -fPIC -march=x86-64" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv15.C b/gcc/testsuite/g++.target/i386/mv15.C
similarity index 93%
rename from gcc/testsuite/g++.dg/ext/mv15.C
rename to gcc/testsuite/g++.target/i386/mv15.C
index c0beadf16ea..4e867f28a5a 100644
--- a/gcc/testsuite/g++.dg/ext/mv15.C
+++ b/gcc/testsuite/g++.target/i386/mv15.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2 -fPIC -march=x86-64" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv16.C b/gcc/testsuite/g++.target/i386/mv16.C
similarity index 97%
rename from gcc/testsuite/g++.dg/ext/mv16.C
rename to gcc/testsuite/g++.target/i386/mv16.C
index 3e7c228a7f1..1091868a29c 100644
--- a/gcc/testsuite/g++.dg/ext/mv16.C
+++ b/gcc/testsuite/g++.target/i386/mv16.C
@@ -2,7 +2,7 @@
 // for Intel CPUs with the same internal GCC processor id
 // but slighly different sets of x86 extensions.
 
-// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-do run }
 // { dg-require-ifunc "" }
 // { dg-options "-O2" }
 
diff --git a/gcc/testsuite/g++.dg/ext/mv17.C b/gcc/testsuite/g++.target/i386/mv17.C
similarity index 97%
rename from gcc/testsuite/g++.dg/ext/mv17.C
rename to gcc/testsuite/g++.target/i386/mv17.C
index 87c13246ed2..fefbfaac6ff 100644
--- a/gcc/testsuite/g++.dg/ext/mv17.C
+++ b/gcc/testsuite/g++.target/i386/mv17.C
@@ -1,6 +1,6 @@
 // Test case to check if Multiversioning works for BMI and BMI2.
 
-// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-do run }
 // { dg-require-ifunc "" }
 // { dg-options "-O2" }
 
diff --git a/gcc/testsuite/g++.dg/ext/mv18.C b/gcc/testsuite/g++.target/i386/mv18.C
similarity index 78%
rename from gcc/testsuite/g++.dg/ext/mv18.C
rename to gcc/testsuite/g++.target/i386/mv18.C
index 1f024de9b95..b62bc363d98 100644
--- a/gcc/testsuite/g++.dg/ext/mv18.C
+++ b/gcc/testsuite/g++.target/i386/mv18.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target pie } */
 /* { dg-options "-O2 -fPIE -pie" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv19.C b/gcc/testsuite/g++.target/i386/mv19.C
similarity index 79%
rename from gcc/testsuite/g++.dg/ext/mv19.C
rename to gcc/testsuite/g++.target/i386/mv19.C
index d1ea788745f..b014c2e730d 100644
--- a/gcc/testsuite/g++.dg/ext/mv19.C
+++ b/gcc/testsuite/g++.target/i386/mv19.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target pie } */
 /* { dg-options "-O2 -fPIE -pie -march=x86-64" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv2.C b/gcc/testsuite/g++.target/i386/mv2.C
similarity index 97%
rename from gcc/testsuite/g++.dg/ext/mv2.C
rename to gcc/testsuite/g++.target/i386/mv2.C
index d4f1f92c611..3013a2f6374 100644
--- a/gcc/testsuite/g++.dg/ext/mv2.C
+++ b/gcc/testsuite/g++.target/i386/mv2.C
@@ -1,6 +1,6 @@
 /* Test case to check if Multiversioning chooses the correct
    dispatching order when versions are for various ISAs.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv20.C b/gcc/testsuite/g++.target/i386/mv20.C
similarity index 79%
rename from gcc/testsuite/g++.dg/ext/mv20.C
rename to gcc/testsuite/g++.target/i386/mv20.C
index 98f7408e1fc..ed8607e1432 100644
--- a/gcc/testsuite/g++.dg/ext/mv20.C
+++ b/gcc/testsuite/g++.target/i386/mv20.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target pie } */
 /* { dg-options "-O2 -fPIE -pie -march=x86-64" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv21.C b/gcc/testsuite/g++.target/i386/mv21.C
similarity index 78%
rename from gcc/testsuite/g++.dg/ext/mv21.C
rename to gcc/testsuite/g++.target/i386/mv21.C
index 9708ad95019..a99805f2868 100644
--- a/gcc/testsuite/g++.dg/ext/mv21.C
+++ b/gcc/testsuite/g++.target/i386/mv21.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target static } */
 /* { dg-options "-O2 -static" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv22.C b/gcc/testsuite/g++.target/i386/mv22.C
similarity index 79%
rename from gcc/testsuite/g++.dg/ext/mv22.C
rename to gcc/testsuite/g++.target/i386/mv22.C
index 2550136fdac..5e43de712c9 100644
--- a/gcc/testsuite/g++.dg/ext/mv22.C
+++ b/gcc/testsuite/g++.target/i386/mv22.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target static } */
 /* { dg-options "-O2 -static -march=x86-64" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv23.C b/gcc/testsuite/g++.target/i386/mv23.C
similarity index 79%
rename from gcc/testsuite/g++.dg/ext/mv23.C
rename to gcc/testsuite/g++.target/i386/mv23.C
index f00afb01f15..674a0ff4a61 100644
--- a/gcc/testsuite/g++.dg/ext/mv23.C
+++ b/gcc/testsuite/g++.target/i386/mv23.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target static } */
 /* { dg-options "-O2 -static -march=x86-64" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv24.C b/gcc/testsuite/g++.target/i386/mv24.C
similarity index 91%
rename from gcc/testsuite/g++.dg/ext/mv24.C
rename to gcc/testsuite/g++.target/i386/mv24.C
index 58292a83392..f8736ccc9ab 100644
--- a/gcc/testsuite/g++.dg/ext/mv24.C
+++ b/gcc/testsuite/g++.target/i386/mv24.C
@@ -1,6 +1,6 @@
 // Test case to check if Multiversioning works for AES
 
-// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-do run }
 // { dg-require-ifunc "" }
 // { dg-options "-O2" }
 
diff --git a/gcc/testsuite/g++.dg/ext/mv25.C b/gcc/testsuite/g++.target/i386/mv25.C
similarity index 91%
rename from gcc/testsuite/g++.dg/ext/mv25.C
rename to gcc/testsuite/g++.target/i386/mv25.C
index fd40eca59a5..2e2fcc38e50 100644
--- a/gcc/testsuite/g++.dg/ext/mv25.C
+++ b/gcc/testsuite/g++.target/i386/mv25.C
@@ -1,6 +1,6 @@
 // Test case to check if Multiversioning works for PCLMUL
 
-// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-do run }
 // { dg-require-ifunc "" }
 // { dg-options "-O2" }
 
diff --git a/gcc/testsuite/g++.dg/ext/mv26.C b/gcc/testsuite/g++.target/i386/mv26.C
similarity index 82%
rename from gcc/testsuite/g++.dg/ext/mv26.C
rename to gcc/testsuite/g++.target/i386/mv26.C
index 1b455130e46..6693ca1f81a 100644
--- a/gcc/testsuite/g++.dg/ext/mv26.C
+++ b/gcc/testsuite/g++.target/i386/mv26.C
@@ -1,5 +1,5 @@
 // PR c++/84059
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile }
 // { dg-require-ifunc "" }
 
 template <typename> struct a
diff --git a/gcc/testsuite/g++.dg/ext/mv27.C b/gcc/testsuite/g++.target/i386/mv27.C
similarity index 82%
rename from gcc/testsuite/g++.dg/ext/mv27.C
rename to gcc/testsuite/g++.target/i386/mv27.C
index 443a54be765..60fa8ca7f8c 100644
--- a/gcc/testsuite/g++.dg/ext/mv27.C
+++ b/gcc/testsuite/g++.target/i386/mv27.C
@@ -1,5 +1,5 @@
 // PR c++/83911
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile }
 // { dg-require-ifunc "" }
 
 class SimdFloat
diff --git a/gcc/testsuite/g++.dg/ext/mv3.C b/gcc/testsuite/g++.target/i386/mv3.C
similarity index 93%
rename from gcc/testsuite/g++.dg/ext/mv3.C
rename to gcc/testsuite/g++.target/i386/mv3.C
index ec2aa1ffec2..4a57a523015 100644
--- a/gcc/testsuite/g++.dg/ext/mv3.C
+++ b/gcc/testsuite/g++.target/i386/mv3.C
@@ -9,7 +9,7 @@
    with a direct call to the popcnt version of foo.  Hence, this
    test should pass.  */
 
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-options "-O2" } */
 
 
diff --git a/gcc/testsuite/g++.dg/ext/mv4.C b/gcc/testsuite/g++.target/i386/mv4.C
similarity index 89%
rename from gcc/testsuite/g++.dg/ext/mv4.C
rename to gcc/testsuite/g++.target/i386/mv4.C
index ff1cc2f63f4..c4c4d68c4e4 100644
--- a/gcc/testsuite/g++.dg/ext/mv4.C
+++ b/gcc/testsuite/g++.target/i386/mv4.C
@@ -2,7 +2,7 @@
    when the default version of a multiversioned function is absent
    and its pointer is taken.  */
 
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv5.C b/gcc/testsuite/g++.target/i386/mv5.C
similarity index 88%
rename from gcc/testsuite/g++.dg/ext/mv5.C
rename to gcc/testsuite/g++.target/i386/mv5.C
index fd62eee0155..6690a02a47f 100644
--- a/gcc/testsuite/g++.dg/ext/mv5.C
+++ b/gcc/testsuite/g++.target/i386/mv5.C
@@ -1,7 +1,7 @@
 /* Test case to check if multiversioned functions are still generated if they are
    marked comdat with inline keyword.  */
 
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv6.C b/gcc/testsuite/g++.target/i386/mv6.C
similarity index 89%
rename from gcc/testsuite/g++.dg/ext/mv6.C
rename to gcc/testsuite/g++.target/i386/mv6.C
index 2273065996b..766b6de39f8 100644
--- a/gcc/testsuite/g++.dg/ext/mv6.C
+++ b/gcc/testsuite/g++.target/i386/mv6.C
@@ -1,6 +1,6 @@
 /* Test to check if member version multiversioning works correctly.  */
 
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-march=x86-64" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv7.C b/gcc/testsuite/g++.target/i386/mv7.C
similarity index 80%
rename from gcc/testsuite/g++.dg/ext/mv7.C
rename to gcc/testsuite/g++.target/i386/mv7.C
index 64c04fac60f..2a7ce659cdb 100644
--- a/gcc/testsuite/g++.dg/ext/mv7.C
+++ b/gcc/testsuite/g++.target/i386/mv7.C
@@ -1,4 +1,4 @@
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile }
 // { dg-options "" }
 
 __attribute__((target ("default")))
diff --git a/gcc/testsuite/g++.dg/ext/mv8.C b/gcc/testsuite/g++.target/i386/mv8.C
similarity index 57%
rename from gcc/testsuite/g++.dg/ext/mv8.C
rename to gcc/testsuite/g++.target/i386/mv8.C
index b49ef84f392..f25399d8a5f 100644
--- a/gcc/testsuite/g++.dg/ext/mv8.C
+++ b/gcc/testsuite/g++.target/i386/mv8.C
@@ -1,4 +1,4 @@
-// { dg-do compile { target i?86-*-* x86_64-*-* powerpc*-*-* aarch64*-*-* } }
+// { dg-do compile }
 // { dg-options "" }
 
 __attribute__((target (11,12)))
diff --git a/gcc/testsuite/g++.dg/ext/mv9.C b/gcc/testsuite/g++.target/i386/mv9.C
similarity index 80%
rename from gcc/testsuite/g++.dg/ext/mv9.C
rename to gcc/testsuite/g++.target/i386/mv9.C
index c59651e102a..876a7362220 100644
--- a/gcc/testsuite/g++.dg/ext/mv9.C
+++ b/gcc/testsuite/g++.target/i386/mv9.C
@@ -1,4 +1,4 @@
-// { dg-do compile { target i?86-*-* x86_64-*-* } }    
+// { dg-do compile }
 // { dg-options "" }   
 
 void foo ();
diff --git a/gcc/testsuite/g++.dg/ext/mvc1.C b/gcc/testsuite/g++.target/i386/mvc1.C
similarity index 88%
rename from gcc/testsuite/g++.dg/ext/mvc1.C
rename to gcc/testsuite/g++.target/i386/mvc1.C
index ff37238a4e0..b307d01ace6 100644
--- a/gcc/testsuite/g++.dg/ext/mvc1.C
+++ b/gcc/testsuite/g++.target/i386/mvc1.C
@@ -1,4 +1,4 @@
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run} */
 /* { dg-require-ifunc "" } */
 
 __attribute__((target_clones("avx","arch=slm","arch=core-avx2","default")))
diff --git a/gcc/testsuite/g++.dg/ext/mvc2.C b/gcc/testsuite/g++.target/i386/mvc2.C
similarity index 88%
rename from gcc/testsuite/g++.dg/ext/mvc2.C
rename to gcc/testsuite/g++.target/i386/mvc2.C
index 1b8c6f4d6e9..7c1fb6518d0 100644
--- a/gcc/testsuite/g++.dg/ext/mvc2.C
+++ b/gcc/testsuite/g++.target/i386/mvc2.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 
 __attribute__((target_clones("avx","arch=slm","default")))
diff --git a/gcc/testsuite/g++.dg/ext/mvc3.C b/gcc/testsuite/g++.target/i386/mvc3.C
similarity index 88%
rename from gcc/testsuite/g++.dg/ext/mvc3.C
rename to gcc/testsuite/g++.target/i386/mvc3.C
index d32b2c93aa0..5d634fd7ea6 100644
--- a/gcc/testsuite/g++.dg/ext/mvc3.C
+++ b/gcc/testsuite/g++.target/i386/mvc3.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 
 __attribute__((target("avx")))
diff --git a/gcc/testsuite/g++.dg/ext/mvc4.C b/gcc/testsuite/g++.target/i386/mvc4.C
similarity index 88%
rename from gcc/testsuite/g++.dg/ext/mvc4.C
rename to gcc/testsuite/g++.target/i386/mvc4.C
index 6e18e560476..68df5e3e4d0 100644
--- a/gcc/testsuite/g++.dg/ext/mvc4.C
+++ b/gcc/testsuite/g++.target/i386/mvc4.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 /* { dg-options "-mavx" } */
 
diff --git a/gcc/testsuite/gcc.target/i386/i386.exp b/gcc/testsuite/gcc.target/i386/i386.exp
index 91fa2a61af2..040eaba0a93 100644
--- a/gcc/testsuite/gcc.target/i386/i386.exp
+++ b/gcc/testsuite/gcc.target/i386/i386.exp
@@ -24,477 +24,7 @@ if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then {
 # Load support procs.
 load_lib gcc-dg.exp
 load_lib clearcap.exp
-
-# Return 1 if attribute ms_hook_prologue is supported.
-proc check_effective_target_ms_hook_prologue { } {
-    if { [check_no_compiler_messages ms_hook_prologue object {
-	     void __attribute__ ((__ms_hook_prologue__)) foo ();
-	 } ""] } {
-	return 1
-    } else {
-	return 0
-    }
-}
-
-# Return 1 if 3dnow instructions can be compiled.
-proc check_effective_target_3dnow { } {
-    return [check_no_compiler_messages 3dnow object {
-	typedef int __m64 __attribute__ ((__vector_size__ (8)));
-	typedef float __v2sf __attribute__ ((__vector_size__ (8)));
-
-	__m64 _m_pfadd (__m64 __A, __m64 __B)
-	{
-	    return (__m64) __builtin_ia32_pfadd ((__v2sf)__A, (__v2sf)__B);
-	}
-    } "-O2 -m3dnow" ]
-}
-
-# Return 1 if sse3 instructions can be compiled.
-proc check_effective_target_sse3 { } {
-    return [check_no_compiler_messages sse3 object {
-	typedef double __m128d __attribute__ ((__vector_size__ (16)));
-	typedef double __v2df __attribute__ ((__vector_size__ (16)));
-
-	__m128d _mm_addsub_pd (__m128d __X, __m128d __Y)
-	{
-	    return (__m128d) __builtin_ia32_addsubpd ((__v2df)__X, (__v2df)__Y);
-	}
-    } "-O2 -msse3" ]
-}
-
-# Return 1 if ssse3 instructions can be compiled.
-proc check_effective_target_ssse3 { } {
-    return [check_no_compiler_messages ssse3 object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef int __v4si __attribute__ ((__vector_size__ (16)));
-
-	__m128i _mm_abs_epi32 (__m128i __X)
-	{
-	    return (__m128i) __builtin_ia32_pabsd128 ((__v4si)__X);
-	}
-    } "-O2 -mssse3" ]
-}
-
-# Return 1 if aes instructions can be compiled.
-proc check_effective_target_aes { } {
-    return [check_no_compiler_messages aes object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
-
-	__m128i _mm_aesimc_si128 (__m128i __X)
-	{
-	    return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X);
-	}
-    } "-O2 -maes" ]
-}
-
-# Return 1 if vaes instructions can be compiled.
-proc check_effective_target_vaes { } {
-    return [check_no_compiler_messages vaes object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
-
-	__m128i _mm_aesimc_si128 (__m128i __X)
-	{
-	    return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X);
-	}
-    } "-O2 -maes -mavx" ]
-}
-
-# Return 1 if pclmul instructions can be compiled.
-proc check_effective_target_pclmul { } {
-    return [check_no_compiler_messages pclmul object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
-
-	__m128i pclmulqdq_test (__m128i __X, __m128i __Y)
-	{
-	    return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X,
-							  (__v2di)__Y,
-							  1);
-	}
-    } "-O2 -mpclmul" ]
-}
-
-# Return 1 if vpclmul instructions can be compiled.
-proc check_effective_target_vpclmul { } {
-    return [check_no_compiler_messages vpclmul object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
-
-	__m128i pclmulqdq_test (__m128i __X, __m128i __Y)
-	{
-	    return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X,
-							  (__v2di)__Y,
-							  1);
-	}
-    } "-O2 -mpclmul -mavx" ]
-}
-
-# Return 1 if sse4a instructions can be compiled.
-proc check_effective_target_sse4a { } {
-    return [check_no_compiler_messages sse4a object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
-
-	__m128i _mm_insert_si64 (__m128i __X,__m128i __Y)
-	{
-	    return (__m128i) __builtin_ia32_insertq ((__v2di)__X, (__v2di)__Y);
-	}
-    } "-O2 -msse4a" ]
-}
-
-# Return 1 if fma4 instructions can be compiled.
-proc check_effective_target_fma4 { } {
-    return [check_no_compiler_messages fma4 object {
-        typedef float __m128 __attribute__ ((__vector_size__ (16)));
-	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
-	__m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
-	{
-	    return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A,
-						     (__v4sf)__B,
-						     (__v4sf)__C);
-	}
-    } "-O2 -mfma4" ]
-}
-
-# Return 1 if fma instructions can be compiled.
-proc check_effective_target_fma { } {
-    return [check_no_compiler_messages fma object {
-        typedef float __m128 __attribute__ ((__vector_size__ (16)));
-	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
-	__m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
-	{
-	    return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A,
-						     (__v4sf)__B,
-						     (__v4sf)__C);
-	}
-    } "-O2 -mfma" ]
-}
-
-# Return 1 if xop instructions can be compiled.
-proc check_effective_target_xop { } {
-    return [check_no_compiler_messages xop object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef short __v8hi __attribute__ ((__vector_size__ (16)));
-	__m128i _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)
-	{
-	    return (__m128i) __builtin_ia32_vpmacssww ((__v8hi)__A,
-						       (__v8hi)__B,
-						       (__v8hi)__C);
-	}
-    } "-O2 -mxop" ]
-}
-
-# Return 1 if lzcnt instruction can be compiled.
-proc check_effective_target_lzcnt { } {
-    return [check_no_compiler_messages lzcnt object {
-	unsigned short _lzcnt (unsigned short __X)
-	{
-	   return __builtin_clzs (__X);
-	}
-    } "-mlzcnt" ]
-}
-
-# Return 1 if bmi instructions can be compiled.
-proc check_effective_target_bmi { } {
-    return [check_no_compiler_messages bmi object {
-	unsigned int __bextr_u32 (unsigned int __X, unsigned int __Y)
-	{
-	  return __builtin_ia32_bextr_u32 (__X, __Y);
-	}
-    } "-mbmi" ]
-}
-
-# Return 1 if ADX instructions can be compiled.
-proc check_effective_target_adx { } {
-    return [check_no_compiler_messages adx object {
-	unsigned char
-	_adxcarry_u32 (unsigned char __CF, unsigned int __X,
-		   unsigned int __Y, unsigned int *__P)
-	{
-	    return __builtin_ia32_addcarryx_u32 (__CF, __X, __Y, __P);
-	}
-    } "-madx" ]
-}
-
-# Return 1 if rtm instructions can be compiled.
-proc check_effective_target_rtm { } {
-    return [check_no_compiler_messages rtm object {
-	void
-	_rtm_xend (void)
-	{
-	    return __builtin_ia32_xend ();
-	}
-    } "-mrtm" ]
-}
-
-# Return 1 if avx512vl instructions can be compiled.
-proc check_effective_target_avx512vl { } {
-    return [check_no_compiler_messages avx512vl object {
-	typedef long long __v4di __attribute__ ((__vector_size__ (32)));
-	__v4di
-	mm256_and_epi64  (__v4di __X, __v4di __Y)
-	{
-            __v4di __W;
-            return __builtin_ia32_pandq256_mask (__X, __Y, __W, -1);
-	}
-    } "-mavx512vl" ]
-}
-
-# Return 1 if avx512cd instructions can be compiled.
-proc check_effective_target_avx512cd { } {
-    return [check_no_compiler_messages avx512cd_trans object {
-	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
-	__v8di
-	_mm512_conflict_epi64 (__v8di __W, __v8di __A)
-	{
-	  return (__v8di) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
-								 (__v8di) __W,
-								 -1);
-	}
-   } "-Wno-psabi -mavx512cd" ]
-}
-
-# Return 1 if avx512er instructions can be compiled.
-proc check_effective_target_avx512er { } {
-    return [check_no_compiler_messages avx512er_trans object {
-	typedef float __v16sf __attribute__ ((__vector_size__ (64)));
-	__v16sf
-	mm512_exp2a23_ps  (__v16sf __X)
-	{
-	    return __builtin_ia32_exp2ps_mask (__X, __X, -1, 4);
-	}
-   } "-Wno-psabi -mavx512er" ]
-}
-
-# Return 1 if sha instructions can be compiled.
-proc check_effective_target_sha { } {
-    return [check_no_compiler_messages sha object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef int __v4si __attribute__ ((__vector_size__ (16)));
-
-	__m128i _mm_sha1msg1_epu32 (__m128i __X, __m128i __Y)
-	{
-            return (__m128i) __builtin_ia32_sha1msg1 ((__v4si)__X,
-						      (__v4si)__Y);
-	}
-    } "-O2 -msha" ]
-}
-
-# Return 1 if avx512dq instructions can be compiled.
-proc check_effective_target_avx512dq { } {
-    return [check_no_compiler_messages avx512dq object {
-	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
-	__v8di
-	_mm512_mask_mullo_epi64 (__v8di __W, __v8di __A, __v8di __B)
-	{
-	    return (__v8di) __builtin_ia32_pmullq512_mask ((__v8di) __A,
-							    (__v8di) __B,
-							    (__v8di) __W,
-							    -1);
-	}
-    } "-mavx512dq" ]
-}
-
-# Return 1 if avx512bw instructions can be compiled.
-proc check_effective_target_avx512bw { } {
-    return [check_no_compiler_messages avx512bw object {
-	typedef short __v32hi __attribute__ ((__vector_size__ (64)));
-	__v32hi
-	_mm512_mask_mulhrs_epi16 (__v32hi __W, __v32hi __A, __v32hi __B)
-	{
-	    return (__v32hi) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A,
-							    (__v32hi) __B,
-							    (__v32hi) __W,
-							    -1);
-	}
-    } "-mavx512bw" ]
-}
-
-# Return 1 if avx512ifma instructions can be compiled.
-proc check_effective_target_avx512ifma { } {
-    return [check_no_compiler_messages avx512ifma object {
-	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
-	__v8di
-	_mm512_madd52lo_epu64 (__v8di __X, __v8di __Y, __v8di __Z)
-	{
-	  return (__v8di) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __X,
-							       (__v8di) __Y,
-						               (__v8di) __Z,
-						               -1);
-	}
-    } "-mavx512ifma" ]
-}
-
-# Return 1 if avx512vbmi instructions can be compiled.
-proc check_effective_target_avx512vbmi { } {
-    return [check_no_compiler_messages avx512vbmi object {
-	typedef char __v64qi __attribute__ ((__vector_size__ (64)));
-	__v64qi
-	_mm512_multishift_epi64_epi8 (__v64qi __X, __v64qi __Y)
-	{
-	  return (__v64qi) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
-								 (__v64qi) __Y,
-								 (__v64qi) __Y,
-								 -1);
-	}
-    } "-mavx512vbmi" ]
-}
-
-# Return 1 if avx512_4fmaps instructions can be compiled.
-proc check_effective_target_avx5124fmaps { } {
-    return [check_no_compiler_messages avx5124fmaps object {
-	typedef float __v16sf __attribute__ ((__vector_size__ (64)));
-	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
-
-	__v16sf
-	_mm512_mask_4fmadd_ps (__v16sf __DEST, __v16sf __A, __v16sf __B, __v16sf __C,
-			       __v16sf __D, __v16sf __E, __v4sf *__F)
-	{
-	    return (__v16sf) __builtin_ia32_4fmaddps_mask ((__v16sf) __A,
-							  (__v16sf) __B,
-							  (__v16sf) __C,
-							  (__v16sf) __D,
-							  (__v16sf) __E,
-							  (const __v4sf *) __F,
-							  (__v16sf) __DEST,
-							  0xffff);
-	}
-    } "-mavx5124fmaps" ]
-}
-
-# Return 1 if avx512_4vnniw instructions can be compiled.
-proc check_effective_target_avx5124vnniw { } {
-    return [check_no_compiler_messages avx5124vnniw object {
-	typedef int __v16si __attribute__ ((__vector_size__ (64)));
-	typedef int __v4si __attribute__ ((__vector_size__ (16)));
-
-	__v16si
-	_mm512_4dpwssd_epi32 (__v16si __A, __v16si __B, __v16si __C,
-			      __v16si __D, __v16si __E, __v4si *__F)
-	{
-	    return (__v16si) __builtin_ia32_vp4dpwssd ((__v16si) __B,
-						       (__v16si) __C,
-						       (__v16si) __D,
-						       (__v16si) __E,
-						       (__v16si) __A,
-						       (const __v4si *) __F);
-	}
-    } "-mavx5124vnniw" ]
-}
-
-# Return 1 if avx512_vpopcntdq instructions can be compiled.
-proc check_effective_target_avx512vpopcntdq { } {
-    return [check_no_compiler_messages avx512vpopcntdq object {
-        typedef int __v16si __attribute__ ((__vector_size__ (64)));
-
-        __v16si
-        _mm512_popcnt_epi32 (__v16si __A)
-        {
-            return (__v16si) __builtin_ia32_vpopcountd_v16si ((__v16si) __A);
-        }
-    } "-mavx512vpopcntdq" ]
-}
-
-# Return 1 if 128 or 256-bit avx512_vpopcntdq instructions can be compiled.
-proc check_effective_target_avx512vpopcntdqvl { } {
-    return [check_no_compiler_messages avx512vpopcntdqvl object {
-        typedef int __v8si __attribute__ ((__vector_size__ (32)));
-
-        __v8si
-        _mm256_popcnt_epi32 (__v8si __A)
-        {
-            return (__v8si) __builtin_ia32_vpopcountd_v8si ((__v8si) __A);
-        }
-    } "-mavx512vpopcntdq -mavx512vl" ]
-}
-
-# Return 1 if gfni instructions can be compiled.
-proc check_effective_target_gfni { } {
-    return [check_no_compiler_messages gfni object {
-        typedef char __v16qi __attribute__ ((__vector_size__ (16)));
-
-        __v16qi
-        _mm_gf2p8affineinv_epi64_epi8 (__v16qi __A, __v16qi __B, const int __C)
-        {
-            return (__v16qi) __builtin_ia32_vgf2p8affineinvqb_v16qi ((__v16qi) __A,
-								     (__v16qi) __B,
-								      0);
-        }
-    } "-mgfni" ]
-}
-
-# Return 1 if avx512vbmi2 instructions can be compiled.
-proc check_effective_target_avx512vbmi2 { } {
-    return [check_no_compiler_messages avx512vbmi2 object {
-        typedef char __v16qi __attribute__ ((__vector_size__ (16)));
-	typedef unsigned long long __mmask16;
-
-	__v16qi
-	_mm_mask_compress_epi8 (__v16qi __A, __mmask16 __B, __v16qi __C)
-	{
-  		return (__v16qi) __builtin_ia32_compressqi128_mask((__v16qi)__C,
-								   (__v16qi)__A,
-								   (__mmask16)__B);
-	}
-    } "-mavx512vbmi2 -mavx512vl" ]
-}
-
-# Return 1 if avx512vbmi2 instructions can be compiled.
-proc check_effective_target_avx512vnni { } {
-    return [check_no_compiler_messages avx512vnni object {
-        typedef int __v16si __attribute__ ((__vector_size__ (64)));
-
-	__v16si
-	_mm_mask_compress_epi8 (__v16si __A, __v16si __B, __v16si __C)
-	{
-  		return (__v16si) __builtin_ia32_vpdpbusd_v16si ((__v16si)__A,
-								(__v16si)__B,
-								(__v16si)__C);
-	}
-    } "-mavx512vnni -mavx512f" ]
-}
-
-# Return 1 if vaes instructions can be compiled.
-proc check_effective_target_avx512vaes { } {
-    return [check_no_compiler_messages avx512vaes object {
-
-        typedef int __v16si __attribute__ ((__vector_size__ (64)));
-
-	__v32qi
-	_mm256_aesdec_epi128 (__v32qi __A, __v32qi __B)
-	{
-	  return (__v32qi)__builtin_ia32_vaesdec_v32qi ((__v32qi) __A, (__v32qi) __B);
-	}
-    } "-mvaes" ]
-}
-
-# Return 1 if vpclmulqdq instructions can be compiled.
-proc check_effective_target_vpclmulqdq { } {
-    return [check_no_compiler_messages vpclmulqdq object {
-        typedef long long __v4di __attribute__ ((__vector_size__ (32)));
-
-        __v4di
-        _mm256_clmulepi64_epi128 (__v4di __A, __v4di __B)
-        {
-            return (__v4di) __builtin_ia32_vpclmulqdq_v4di (__A, __B, 0);
-        }
-    } "-mvpclmulqdq -mavx512vl" ]
-}
-
-# Return 1 if avx512_bitalg instructions can be compiled.
-proc check_effective_target_avx512bitalg { } {
-    return [check_no_compiler_messages avx512bitalg object {
-        typedef short int __v32hi __attribute__ ((__vector_size__ (64)));
-
-        __v32hi
-        _mm512_popcnt_epi16 (__v32hi __A)
-        {
-            return (__v32hi) __builtin_ia32_vpopcountw_v32hi ((__v32hi) __A);
-        }
-    } "-mavx512bitalg" ]
-}
+load_lib i386.exp
 
 # If a testcase doesn't have special options, use these.
 global DEFAULT_CFLAGS
diff --git a/gcc/testsuite/lib/i386.exp b/gcc/testsuite/lib/i386.exp
new file mode 100644
index 00000000000..52dca941f0d
--- /dev/null
+++ b/gcc/testsuite/lib/i386.exp
@@ -0,0 +1,488 @@
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite libs related to i386 target.
+
+# Return 1 if attribute ms_hook_prologue is supported.
+proc check_effective_target_ms_hook_prologue { } {
+    if { [check_no_compiler_messages ms_hook_prologue object {
+	     void __attribute__ ((__ms_hook_prologue__)) foo ();
+	 } ""] } {
+	return 1
+    } else {
+	return 0
+    }
+}
+
+# Return 1 if 3dnow instructions can be compiled.
+proc check_effective_target_3dnow { } {
+    return [check_no_compiler_messages 3dnow object {
+	typedef int __m64 __attribute__ ((__vector_size__ (8)));
+	typedef float __v2sf __attribute__ ((__vector_size__ (8)));
+
+	__m64 _m_pfadd (__m64 __A, __m64 __B)
+	{
+	    return (__m64) __builtin_ia32_pfadd ((__v2sf)__A, (__v2sf)__B);
+	}
+    } "-O2 -m3dnow" ]
+}
+
+# Return 1 if sse3 instructions can be compiled.
+proc check_effective_target_sse3 { } {
+    return [check_no_compiler_messages sse3 object {
+	typedef double __m128d __attribute__ ((__vector_size__ (16)));
+	typedef double __v2df __attribute__ ((__vector_size__ (16)));
+
+	__m128d _mm_addsub_pd (__m128d __X, __m128d __Y)
+	{
+	    return (__m128d) __builtin_ia32_addsubpd ((__v2df)__X, (__v2df)__Y);
+	}
+    } "-O2 -msse3" ]
+}
+
+# Return 1 if ssse3 instructions can be compiled.
+proc check_effective_target_ssse3 { } {
+    return [check_no_compiler_messages ssse3 object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+	__m128i _mm_abs_epi32 (__m128i __X)
+	{
+	    return (__m128i) __builtin_ia32_pabsd128 ((__v4si)__X);
+	}
+    } "-O2 -mssse3" ]
+}
+
+# Return 1 if aes instructions can be compiled.
+proc check_effective_target_aes { } {
+    return [check_no_compiler_messages aes object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
+
+	__m128i _mm_aesimc_si128 (__m128i __X)
+	{
+	    return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X);
+	}
+    } "-O2 -maes" ]
+}
+
+# Return 1 if vaes instructions can be compiled.
+proc check_effective_target_vaes { } {
+    return [check_no_compiler_messages vaes object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
+
+	__m128i _mm_aesimc_si128 (__m128i __X)
+	{
+	    return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X);
+	}
+    } "-O2 -maes -mavx" ]
+}
+
+# Return 1 if pclmul instructions can be compiled.
+proc check_effective_target_pclmul { } {
+    return [check_no_compiler_messages pclmul object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
+
+	__m128i pclmulqdq_test (__m128i __X, __m128i __Y)
+	{
+	    return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X,
+							  (__v2di)__Y,
+							  1);
+	}
+    } "-O2 -mpclmul" ]
+}
+
+# Return 1 if vpclmul instructions can be compiled.
+proc check_effective_target_vpclmul { } {
+    return [check_no_compiler_messages vpclmul object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
+
+	__m128i pclmulqdq_test (__m128i __X, __m128i __Y)
+	{
+	    return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X,
+							  (__v2di)__Y,
+							  1);
+	}
+    } "-O2 -mpclmul -mavx" ]
+}
+
+# Return 1 if sse4a instructions can be compiled.
+proc check_effective_target_sse4a { } {
+    return [check_no_compiler_messages sse4a object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
+
+	__m128i _mm_insert_si64 (__m128i __X,__m128i __Y)
+	{
+	    return (__m128i) __builtin_ia32_insertq ((__v2di)__X, (__v2di)__Y);
+	}
+    } "-O2 -msse4a" ]
+}
+
+# Return 1 if fma4 instructions can be compiled.
+proc check_effective_target_fma4 { } {
+    return [check_no_compiler_messages fma4 object {
+        typedef float __m128 __attribute__ ((__vector_size__ (16)));
+	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
+	__m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
+	{
+	    return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A,
+						     (__v4sf)__B,
+						     (__v4sf)__C);
+	}
+    } "-O2 -mfma4" ]
+}
+
+# Return 1 if fma instructions can be compiled.
+proc check_effective_target_fma { } {
+    return [check_no_compiler_messages fma object {
+        typedef float __m128 __attribute__ ((__vector_size__ (16)));
+	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
+	__m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
+	{
+	    return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A,
+						     (__v4sf)__B,
+						     (__v4sf)__C);
+	}
+    } "-O2 -mfma" ]
+}
+
+# Return 1 if xop instructions can be compiled.
+proc check_effective_target_xop { } {
+    return [check_no_compiler_messages xop object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef short __v8hi __attribute__ ((__vector_size__ (16)));
+	__m128i _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)
+	{
+	    return (__m128i) __builtin_ia32_vpmacssww ((__v8hi)__A,
+						       (__v8hi)__B,
+						       (__v8hi)__C);
+	}
+    } "-O2 -mxop" ]
+}
+
+# Return 1 if lzcnt instruction can be compiled.
+proc check_effective_target_lzcnt { } {
+    return [check_no_compiler_messages lzcnt object {
+	unsigned short _lzcnt (unsigned short __X)
+	{
+	   return __builtin_clzs (__X);
+	}
+    } "-mlzcnt" ]
+}
+
+# Return 1 if bmi instructions can be compiled.
+proc check_effective_target_bmi { } {
+    return [check_no_compiler_messages bmi object {
+	unsigned int __bextr_u32 (unsigned int __X, unsigned int __Y)
+	{
+	  return __builtin_ia32_bextr_u32 (__X, __Y);
+	}
+    } "-mbmi" ]
+}
+
+# Return 1 if ADX instructions can be compiled.
+proc check_effective_target_adx { } {
+    return [check_no_compiler_messages adx object {
+	unsigned char
+	_adxcarry_u32 (unsigned char __CF, unsigned int __X,
+		   unsigned int __Y, unsigned int *__P)
+	{
+	    return __builtin_ia32_addcarryx_u32 (__CF, __X, __Y, __P);
+	}
+    } "-madx" ]
+}
+
+# Return 1 if rtm instructions can be compiled.
+proc check_effective_target_rtm { } {
+    return [check_no_compiler_messages rtm object {
+	void
+	_rtm_xend (void)
+	{
+	    return __builtin_ia32_xend ();
+	}
+    } "-mrtm" ]
+}
+
+# Return 1 if avx512vl instructions can be compiled.
+proc check_effective_target_avx512vl { } {
+    return [check_no_compiler_messages avx512vl object {
+	typedef long long __v4di __attribute__ ((__vector_size__ (32)));
+	__v4di
+	mm256_and_epi64  (__v4di __X, __v4di __Y)
+	{
+            __v4di __W;
+            return __builtin_ia32_pandq256_mask (__X, __Y, __W, -1);
+	}
+    } "-mavx512vl" ]
+}
+
+# Return 1 if avx512cd instructions can be compiled.
+proc check_effective_target_avx512cd { } {
+    return [check_no_compiler_messages avx512cd_trans object {
+	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
+	__v8di
+	_mm512_conflict_epi64 (__v8di __W, __v8di __A)
+	{
+	  return (__v8di) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
+								 (__v8di) __W,
+								 -1);
+	}
+   } "-Wno-psabi -mavx512cd" ]
+}
+
+# Return 1 if avx512er instructions can be compiled.
+proc check_effective_target_avx512er { } {
+    return [check_no_compiler_messages avx512er_trans object {
+	typedef float __v16sf __attribute__ ((__vector_size__ (64)));
+	__v16sf
+	mm512_exp2a23_ps  (__v16sf __X)
+	{
+	    return __builtin_ia32_exp2ps_mask (__X, __X, -1, 4);
+	}
+   } "-Wno-psabi -mavx512er" ]
+}
+
+# Return 1 if sha instructions can be compiled.
+proc check_effective_target_sha { } {
+    return [check_no_compiler_messages sha object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+	__m128i _mm_sha1msg1_epu32 (__m128i __X, __m128i __Y)
+	{
+            return (__m128i) __builtin_ia32_sha1msg1 ((__v4si)__X,
+						      (__v4si)__Y);
+	}
+    } "-O2 -msha" ]
+}
+
+# Return 1 if avx512dq instructions can be compiled.
+proc check_effective_target_avx512dq { } {
+    return [check_no_compiler_messages avx512dq object {
+	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
+	__v8di
+	_mm512_mask_mullo_epi64 (__v8di __W, __v8di __A, __v8di __B)
+	{
+	    return (__v8di) __builtin_ia32_pmullq512_mask ((__v8di) __A,
+							    (__v8di) __B,
+							    (__v8di) __W,
+							    -1);
+	}
+    } "-mavx512dq" ]
+}
+
+# Return 1 if avx512bw instructions can be compiled.
+proc check_effective_target_avx512bw { } {
+    return [check_no_compiler_messages avx512bw object {
+	typedef short __v32hi __attribute__ ((__vector_size__ (64)));
+	__v32hi
+	_mm512_mask_mulhrs_epi16 (__v32hi __W, __v32hi __A, __v32hi __B)
+	{
+	    return (__v32hi) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A,
+							    (__v32hi) __B,
+							    (__v32hi) __W,
+							    -1);
+	}
+    } "-mavx512bw" ]
+}
+
+# Return 1 if avx512ifma instructions can be compiled.
+proc check_effective_target_avx512ifma { } {
+    return [check_no_compiler_messages avx512ifma object {
+	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
+	__v8di
+	_mm512_madd52lo_epu64 (__v8di __X, __v8di __Y, __v8di __Z)
+	{
+	  return (__v8di) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __X,
+							       (__v8di) __Y,
+						               (__v8di) __Z,
+						               -1);
+	}
+    } "-mavx512ifma" ]
+}
+
+# Return 1 if avx512vbmi instructions can be compiled.
+proc check_effective_target_avx512vbmi { } {
+    return [check_no_compiler_messages avx512vbmi object {
+	typedef char __v64qi __attribute__ ((__vector_size__ (64)));
+	__v64qi
+	_mm512_multishift_epi64_epi8 (__v64qi __X, __v64qi __Y)
+	{
+	  return (__v64qi) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
+								 (__v64qi) __Y,
+								 (__v64qi) __Y,
+								 -1);
+	}
+    } "-mavx512vbmi" ]
+}
+
+# Return 1 if avx512_4fmaps instructions can be compiled.
+proc check_effective_target_avx5124fmaps { } {
+    return [check_no_compiler_messages avx5124fmaps object {
+	typedef float __v16sf __attribute__ ((__vector_size__ (64)));
+	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
+
+	__v16sf
+	_mm512_mask_4fmadd_ps (__v16sf __DEST, __v16sf __A, __v16sf __B, __v16sf __C,
+			       __v16sf __D, __v16sf __E, __v4sf *__F)
+	{
+	    return (__v16sf) __builtin_ia32_4fmaddps_mask ((__v16sf) __A,
+							  (__v16sf) __B,
+							  (__v16sf) __C,
+							  (__v16sf) __D,
+							  (__v16sf) __E,
+							  (const __v4sf *) __F,
+							  (__v16sf) __DEST,
+							  0xffff);
+	}
+    } "-mavx5124fmaps" ]
+}
+
+# Return 1 if avx512_4vnniw instructions can be compiled.
+proc check_effective_target_avx5124vnniw { } {
+    return [check_no_compiler_messages avx5124vnniw object {
+	typedef int __v16si __attribute__ ((__vector_size__ (64)));
+	typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+	__v16si
+	_mm512_4dpwssd_epi32 (__v16si __A, __v16si __B, __v16si __C,
+			      __v16si __D, __v16si __E, __v4si *__F)
+	{
+	    return (__v16si) __builtin_ia32_vp4dpwssd ((__v16si) __B,
+						       (__v16si) __C,
+						       (__v16si) __D,
+						       (__v16si) __E,
+						       (__v16si) __A,
+						       (const __v4si *) __F);
+	}
+    } "-mavx5124vnniw" ]
+}
+
+# Return 1 if avx512_vpopcntdq instructions can be compiled.
+proc check_effective_target_avx512vpopcntdq { } {
+    return [check_no_compiler_messages avx512vpopcntdq object {
+        typedef int __v16si __attribute__ ((__vector_size__ (64)));
+
+        __v16si
+        _mm512_popcnt_epi32 (__v16si __A)
+        {
+            return (__v16si) __builtin_ia32_vpopcountd_v16si ((__v16si) __A);
+        }
+    } "-mavx512vpopcntdq" ]
+}
+
+# Return 1 if 128 or 256-bit avx512_vpopcntdq instructions can be compiled.
+proc check_effective_target_avx512vpopcntdqvl { } {
+    return [check_no_compiler_messages avx512vpopcntdqvl object {
+        typedef int __v8si __attribute__ ((__vector_size__ (32)));
+
+        __v8si
+        _mm256_popcnt_epi32 (__v8si __A)
+        {
+            return (__v8si) __builtin_ia32_vpopcountd_v8si ((__v8si) __A);
+        }
+    } "-mavx512vpopcntdq -mavx512vl" ]
+}
+
+# Return 1 if gfni instructions can be compiled.
+proc check_effective_target_gfni { } {
+    return [check_no_compiler_messages gfni object {
+        typedef char __v16qi __attribute__ ((__vector_size__ (16)));
+
+        __v16qi
+        _mm_gf2p8affineinv_epi64_epi8 (__v16qi __A, __v16qi __B, const int __C)
+        {
+            return (__v16qi) __builtin_ia32_vgf2p8affineinvqb_v16qi ((__v16qi) __A,
+								     (__v16qi) __B,
+								      0);
+        }
+    } "-mgfni" ]
+}
+
+# Return 1 if avx512vbmi2 instructions can be compiled.
+proc check_effective_target_avx512vbmi2 { } {
+    return [check_no_compiler_messages avx512vbmi2 object {
+        typedef char __v16qi __attribute__ ((__vector_size__ (16)));
+	typedef unsigned long long __mmask16;
+
+	__v16qi
+	_mm_mask_compress_epi8 (__v16qi __A, __mmask16 __B, __v16qi __C)
+	{
+  		return (__v16qi) __builtin_ia32_compressqi128_mask((__v16qi)__C,
+								   (__v16qi)__A,
+								   (__mmask16)__B);
+	}
+    } "-mavx512vbmi2 -mavx512vl" ]
+}
+
+# Return 1 if avx512vbmi2 instructions can be compiled.
+proc check_effective_target_avx512vnni { } {
+    return [check_no_compiler_messages avx512vnni object {
+        typedef int __v16si __attribute__ ((__vector_size__ (64)));
+
+	__v16si
+	_mm_mask_compress_epi8 (__v16si __A, __v16si __B, __v16si __C)
+	{
+  		return (__v16si) __builtin_ia32_vpdpbusd_v16si ((__v16si)__A,
+								(__v16si)__B,
+								(__v16si)__C);
+	}
+    } "-mavx512vnni -mavx512f" ]
+}
+
+# Return 1 if vaes instructions can be compiled.
+proc check_effective_target_avx512vaes { } {
+    return [check_no_compiler_messages avx512vaes object {
+
+        typedef int __v16si __attribute__ ((__vector_size__ (64)));
+
+	__v32qi
+	_mm256_aesdec_epi128 (__v32qi __A, __v32qi __B)
+	{
+	  return (__v32qi)__builtin_ia32_vaesdec_v32qi ((__v32qi) __A, (__v32qi) __B);
+	}
+    } "-mvaes" ]
+}
+
+# Return 1 if vpclmulqdq instructions can be compiled.
+proc check_effective_target_vpclmulqdq { } {
+    return [check_no_compiler_messages vpclmulqdq object {
+        typedef long long __v4di __attribute__ ((__vector_size__ (32)));
+
+        __v4di
+        _mm256_clmulepi64_epi128 (__v4di __A, __v4di __B)
+        {
+            return (__v4di) __builtin_ia32_vpclmulqdq_v4di (__A, __B, 0);
+        }
+    } "-mvpclmulqdq -mavx512vl" ]
+}
+
+# Return 1 if avx512_bitalg instructions can be compiled.
+proc check_effective_target_avx512bitalg { } {
+    return [check_no_compiler_messages avx512bitalg object {
+        typedef short int __v32hi __attribute__ ((__vector_size__ (64)));
+
+        __v32hi
+        _mm512_popcnt_epi16 (__v32hi __A)
+        {
+            return (__v32hi) __builtin_ia32_vpopcountw_v32hi ((__v32hi) __A);
+        }
+    } "-mavx512bitalg" ]
+}
-- 
2.19.0


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-08 11:29             ` [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests Martin Liška
@ 2018-10-08 11:33               ` Jakub Jelinek
  2018-10-08 11:47                 ` Uros Bizjak
  0 siblings, 1 reply; 26+ messages in thread
From: Jakub Jelinek @ 2018-10-08 11:33 UTC (permalink / raw)
  To: Martin Liška, Uros Bizjak
  Cc: Richard Earnshaw (lists), Richard Biener, renlin.li, GCC Patches

On Mon, Oct 08, 2018 at 01:17:14PM +0200, Martin Liška wrote:
> I'm suggesting following patch that comes up with new g++.target subfolder.
> I moved there i386 multiversioning tests.

I think you want Uros to review and decide this one.

> 2018-10-08  Martin Liska  <mliska@suse.cz>
> 
> 	* gcc.target/i386/i386.exp: Include lib/i386.exp.
> 	* g++.target/i386/i386.exp: New file.
> 	* gcc.target/i386/mv*.C: Move here tests and remove
> 	target filter in these tests.
> 	* lib/i386.exp: New file.

My preference would be to move all that content to
lib/target-supports.exp, next to all the other i386 specific effective
targets, rather than a new file.  That way it can be used in other
testsuites too (lib*, gfortran.dg, etc.).

	Jakub

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-08 11:33               ` Jakub Jelinek
@ 2018-10-08 11:47                 ` Uros Bizjak
  2018-10-08 12:49                   ` Martin Liška
  0 siblings, 1 reply; 26+ messages in thread
From: Uros Bizjak @ 2018-10-08 11:47 UTC (permalink / raw)
  To: Jakub Jelinek
  Cc: Martin Liska, Richard Earnshaw, Richard Guenther, renlin.li, gcc-patches

On Mon, Oct 8, 2018 at 1:21 PM Jakub Jelinek <jakub@redhat.com> wrote:
>
> On Mon, Oct 08, 2018 at 01:17:14PM +0200, Martin Liška wrote:
> > I'm suggesting following patch that comes up with new g++.target subfolder.
> > I moved there i386 multiversioning tests.
>
> I think you want Uros to review and decide this one.
>
> > 2018-10-08  Martin Liska  <mliska@suse.cz>
> >
> >       * gcc.target/i386/i386.exp: Include lib/i386.exp.
> >       * g++.target/i386/i386.exp: New file.
> >       * gcc.target/i386/mv*.C: Move here tests and remove
> >       target filter in these tests.
> >       * lib/i386.exp: New file.
>
> My preference would be to move all that content to
> lib/target-supports.exp, next to all the other i386 specific effective
> targets, rather than a new file.  That way it can be used in other
> testsuites too (lib*, gfortran.dg, etc.).

I agree with the above reasoning. These tests were put in i386.exp
with the idea that they will be used only in the gcc.target/i386
directory. This is obviously not the case anymore, and as Jakub
mentioned, their usage will spread to other directories in the future.
So, please simply copy all tests from gcc.target/i386/i386.exp to
target-supports.exp to share them with the new g++.target directory.

Thanks,
Uros.
>         Jakub

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-08 11:47                 ` Uros Bizjak
@ 2018-10-08 12:49                   ` Martin Liška
  2018-10-08 13:21                     ` Uros Bizjak
  0 siblings, 1 reply; 26+ messages in thread
From: Martin Liška @ 2018-10-08 12:49 UTC (permalink / raw)
  To: Uros Bizjak, Jakub Jelinek
  Cc: Richard Earnshaw, Richard Guenther, renlin.li, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1410 bytes --]

On 10/8/18 1:29 PM, Uros Bizjak wrote:
> On Mon, Oct 8, 2018 at 1:21 PM Jakub Jelinek <jakub@redhat.com> wrote:
>>
>> On Mon, Oct 08, 2018 at 01:17:14PM +0200, Martin Liška wrote:
>>> I'm suggesting following patch that comes up with new g++.target subfolder.
>>> I moved there i386 multiversioning tests.
>>
>> I think you want Uros to review and decide this one.
>>
>>> 2018-10-08  Martin Liska  <mliska@suse.cz>
>>>
>>>       * gcc.target/i386/i386.exp: Include lib/i386.exp.
>>>       * g++.target/i386/i386.exp: New file.
>>>       * gcc.target/i386/mv*.C: Move here tests and remove
>>>       target filter in these tests.
>>>       * lib/i386.exp: New file.
>>
>> My preference would be to move all that content to
>> lib/target-supports.exp, next to all the other i386 specific effective
>> targets, rather than a new file.  That way it can be used in other
>> testsuites too (lib*, gfortran.dg, etc.).
> 
> I agree with the above reasoning. These tests were put in i386.exp
> with the idea that they will be used only in the gcc.target/i386
> directory. This is obviously not the case anymore, and as Jakub
> mentioned, their usage will spread to other directories in the future.
> So, please simply copy all tests from gcc.target/i386/i386.exp to
> target-supports.exp to share them with the new g++.target directory.
> 
> Thanks,
> Uros.
>>         Jakub

Ok, it's done in updated patch.

Martin

[-- Attachment #2: 0001-Come-up-with-gcc-testsuite-g-.target-i386-i386.dg-an.patch --]
[-- Type: text/x-patch, Size: 54184 bytes --]

From f5b46864168f9807c6c19becec10ff17c19fd699 Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Mon, 8 Oct 2018 13:13:23 +0200
Subject: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move
 there some tests.

gcc/testsuite/ChangeLog:

2018-10-08  Martin Liska  <mliska@suse.cz>

	* gcc.target/i386/i386.exp: Move procedures to
	target-supports.exp.
	* g++.target/i386/i386.exp: New file.
	* gcc.target/i386/mv*.C: Move here tests and remove
	target filter in these tests.
---
 gcc/testsuite/g++.target/i386/i386.exp        |  43 ++
 .../{g++.dg/ext => g++.target/i386}/mv1.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv10.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv11.C    |   2 +-
 .../ext => g++.target/i386}/mv12-aux.cc       |   0
 .../{g++.dg/ext => g++.target/i386}/mv12.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv12.h    |   0
 .../{g++.dg/ext => g++.target/i386}/mv13.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv14.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv15.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv16.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv17.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv18.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv19.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv2.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv20.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv21.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv22.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv23.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv24.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv25.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv26.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv27.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv3.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv4.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv5.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv6.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv7.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv8.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mv9.C     |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mvc1.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mvc2.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mvc3.C    |   2 +-
 .../{g++.dg/ext => g++.target/i386}/mvc4.C    |   2 +-
 gcc/testsuite/gcc.target/i386/i386.exp        | 471 ------------------
 gcc/testsuite/lib/target-supports.exp         | 470 +++++++++++++++++
 36 files changed, 544 insertions(+), 502 deletions(-)
 create mode 100644 gcc/testsuite/g++.target/i386/i386.exp
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv1.C (98%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv10.C (74%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv11.C (84%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv12-aux.cc (100%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv12.C (89%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv12.h (100%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv13.C (86%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv14.C (93%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv15.C (93%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv16.C (97%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv17.C (97%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv18.C (78%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv19.C (79%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv2.C (97%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv20.C (79%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv21.C (78%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv22.C (79%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv23.C (79%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv24.C (91%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv25.C (91%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv26.C (82%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv27.C (82%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv3.C (93%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv4.C (89%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv5.C (88%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv6.C (89%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv7.C (80%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv8.C (57%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mv9.C (80%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc1.C (88%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc2.C (88%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc3.C (88%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/mvc4.C (88%)

diff --git a/gcc/testsuite/g++.target/i386/i386.exp b/gcc/testsuite/g++.target/i386/i386.exp
new file mode 100644
index 00000000000..76a7e536f10
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/i386.exp
@@ -0,0 +1,43 @@
+# Copyright (C) 2018 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `g++.exp' driver.
+
+# Exit immediately if this isn't a x86 target.
+if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then {
+  return
+}
+
+# Load support procs.
+load_lib g++-dg.exp
+load_lib clearcap.exp
+
+global DEFAULT_CXXFLAGS
+if ![info exists DEFAULT_CXXFLAGS] then {
+    set DEFAULT_CXXFLAGS " -pedantic-errors"
+}
+
+# Initialize `dg'.
+dg-init
+clearcap-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \
+        "" $DEFAULT_CXXFLAGS
+
+# All done.
+clearcap-finish
+dg-finish
diff --git a/gcc/testsuite/g++.dg/ext/mv1.C b/gcc/testsuite/g++.target/i386/mv1.C
similarity index 98%
rename from gcc/testsuite/g++.dg/ext/mv1.C
rename to gcc/testsuite/g++.target/i386/mv1.C
index 4eedbff7b23..fc713477c1e 100644
--- a/gcc/testsuite/g++.dg/ext/mv1.C
+++ b/gcc/testsuite/g++.target/i386/mv1.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2 -fPIC" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv10.C b/gcc/testsuite/g++.target/i386/mv10.C
similarity index 74%
rename from gcc/testsuite/g++.dg/ext/mv10.C
rename to gcc/testsuite/g++.target/i386/mv10.C
index 5dfe36372cb..07fbd0e9fd9 100644
--- a/gcc/testsuite/g++.dg/ext/mv10.C
+++ b/gcc/testsuite/g++.target/i386/mv10.C
@@ -1,4 +1,4 @@
-// { dg-do assemble { target i?86-*-* x86_64-*-* } }
+// { dg-do assemble }
 // { dg-options "" }
 
 __attribute__((target ("popcnt"), used))
diff --git a/gcc/testsuite/g++.dg/ext/mv11.C b/gcc/testsuite/g++.target/i386/mv11.C
similarity index 84%
rename from gcc/testsuite/g++.dg/ext/mv11.C
rename to gcc/testsuite/g++.target/i386/mv11.C
index 1f5c576f0a7..58aaf50eb36 100644
--- a/gcc/testsuite/g++.dg/ext/mv11.C
+++ b/gcc/testsuite/g++.target/i386/mv11.C
@@ -1,4 +1,4 @@
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile }
 // { dg-options "-msse2" }
 
 int foo () __attribute__ ((target("default")));
diff --git a/gcc/testsuite/g++.dg/ext/mv12-aux.cc b/gcc/testsuite/g++.target/i386/mv12-aux.cc
similarity index 100%
rename from gcc/testsuite/g++.dg/ext/mv12-aux.cc
rename to gcc/testsuite/g++.target/i386/mv12-aux.cc
diff --git a/gcc/testsuite/g++.dg/ext/mv12.C b/gcc/testsuite/g++.target/i386/mv12.C
similarity index 89%
rename from gcc/testsuite/g++.dg/ext/mv12.C
rename to gcc/testsuite/g++.target/i386/mv12.C
index 8b2e423404d..21569627250 100644
--- a/gcc/testsuite/g++.dg/ext/mv12.C
+++ b/gcc/testsuite/g++.target/i386/mv12.C
@@ -1,7 +1,7 @@
 // Test case to check if multiversioning works as expected when the versions
 // are defined in different files.
 
-// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-do run }
 // { dg-require-ifunc "" }
 // { dg-options "-O2" }
 // { dg-additional-sources "mv12-aux.cc" }
diff --git a/gcc/testsuite/g++.dg/ext/mv12.h b/gcc/testsuite/g++.target/i386/mv12.h
similarity index 100%
rename from gcc/testsuite/g++.dg/ext/mv12.h
rename to gcc/testsuite/g++.target/i386/mv12.h
diff --git a/gcc/testsuite/g++.dg/ext/mv13.C b/gcc/testsuite/g++.target/i386/mv13.C
similarity index 86%
rename from gcc/testsuite/g++.dg/ext/mv13.C
rename to gcc/testsuite/g++.target/i386/mv13.C
index 5674d19c974..39d05c71bda 100644
--- a/gcc/testsuite/g++.dg/ext/mv13.C
+++ b/gcc/testsuite/g++.target/i386/mv13.C
@@ -1,7 +1,7 @@
 // Test case to check if multiversioning functions that are extern "C"
 // generates errors.
 
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile }
 
 extern "C"
 __attribute__ ((target ("default")))
diff --git a/gcc/testsuite/g++.dg/ext/mv14.C b/gcc/testsuite/g++.target/i386/mv14.C
similarity index 93%
rename from gcc/testsuite/g++.dg/ext/mv14.C
rename to gcc/testsuite/g++.target/i386/mv14.C
index 1e7a1619698..ccebb3371fe 100644
--- a/gcc/testsuite/g++.dg/ext/mv14.C
+++ b/gcc/testsuite/g++.target/i386/mv14.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2 -fPIC -march=x86-64" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv15.C b/gcc/testsuite/g++.target/i386/mv15.C
similarity index 93%
rename from gcc/testsuite/g++.dg/ext/mv15.C
rename to gcc/testsuite/g++.target/i386/mv15.C
index c0beadf16ea..4e867f28a5a 100644
--- a/gcc/testsuite/g++.dg/ext/mv15.C
+++ b/gcc/testsuite/g++.target/i386/mv15.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2 -fPIC -march=x86-64" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv16.C b/gcc/testsuite/g++.target/i386/mv16.C
similarity index 97%
rename from gcc/testsuite/g++.dg/ext/mv16.C
rename to gcc/testsuite/g++.target/i386/mv16.C
index 3e7c228a7f1..1091868a29c 100644
--- a/gcc/testsuite/g++.dg/ext/mv16.C
+++ b/gcc/testsuite/g++.target/i386/mv16.C
@@ -2,7 +2,7 @@
 // for Intel CPUs with the same internal GCC processor id
 // but slighly different sets of x86 extensions.
 
-// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-do run }
 // { dg-require-ifunc "" }
 // { dg-options "-O2" }
 
diff --git a/gcc/testsuite/g++.dg/ext/mv17.C b/gcc/testsuite/g++.target/i386/mv17.C
similarity index 97%
rename from gcc/testsuite/g++.dg/ext/mv17.C
rename to gcc/testsuite/g++.target/i386/mv17.C
index 87c13246ed2..fefbfaac6ff 100644
--- a/gcc/testsuite/g++.dg/ext/mv17.C
+++ b/gcc/testsuite/g++.target/i386/mv17.C
@@ -1,6 +1,6 @@
 // Test case to check if Multiversioning works for BMI and BMI2.
 
-// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-do run }
 // { dg-require-ifunc "" }
 // { dg-options "-O2" }
 
diff --git a/gcc/testsuite/g++.dg/ext/mv18.C b/gcc/testsuite/g++.target/i386/mv18.C
similarity index 78%
rename from gcc/testsuite/g++.dg/ext/mv18.C
rename to gcc/testsuite/g++.target/i386/mv18.C
index 1f024de9b95..b62bc363d98 100644
--- a/gcc/testsuite/g++.dg/ext/mv18.C
+++ b/gcc/testsuite/g++.target/i386/mv18.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target pie } */
 /* { dg-options "-O2 -fPIE -pie" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv19.C b/gcc/testsuite/g++.target/i386/mv19.C
similarity index 79%
rename from gcc/testsuite/g++.dg/ext/mv19.C
rename to gcc/testsuite/g++.target/i386/mv19.C
index d1ea788745f..b014c2e730d 100644
--- a/gcc/testsuite/g++.dg/ext/mv19.C
+++ b/gcc/testsuite/g++.target/i386/mv19.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target pie } */
 /* { dg-options "-O2 -fPIE -pie -march=x86-64" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv2.C b/gcc/testsuite/g++.target/i386/mv2.C
similarity index 97%
rename from gcc/testsuite/g++.dg/ext/mv2.C
rename to gcc/testsuite/g++.target/i386/mv2.C
index d4f1f92c611..3013a2f6374 100644
--- a/gcc/testsuite/g++.dg/ext/mv2.C
+++ b/gcc/testsuite/g++.target/i386/mv2.C
@@ -1,6 +1,6 @@
 /* Test case to check if Multiversioning chooses the correct
    dispatching order when versions are for various ISAs.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv20.C b/gcc/testsuite/g++.target/i386/mv20.C
similarity index 79%
rename from gcc/testsuite/g++.dg/ext/mv20.C
rename to gcc/testsuite/g++.target/i386/mv20.C
index 98f7408e1fc..ed8607e1432 100644
--- a/gcc/testsuite/g++.dg/ext/mv20.C
+++ b/gcc/testsuite/g++.target/i386/mv20.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target pie } */
 /* { dg-options "-O2 -fPIE -pie -march=x86-64" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv21.C b/gcc/testsuite/g++.target/i386/mv21.C
similarity index 78%
rename from gcc/testsuite/g++.dg/ext/mv21.C
rename to gcc/testsuite/g++.target/i386/mv21.C
index 9708ad95019..a99805f2868 100644
--- a/gcc/testsuite/g++.dg/ext/mv21.C
+++ b/gcc/testsuite/g++.target/i386/mv21.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target static } */
 /* { dg-options "-O2 -static" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv22.C b/gcc/testsuite/g++.target/i386/mv22.C
similarity index 79%
rename from gcc/testsuite/g++.dg/ext/mv22.C
rename to gcc/testsuite/g++.target/i386/mv22.C
index 2550136fdac..5e43de712c9 100644
--- a/gcc/testsuite/g++.dg/ext/mv22.C
+++ b/gcc/testsuite/g++.target/i386/mv22.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target static } */
 /* { dg-options "-O2 -static -march=x86-64" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv23.C b/gcc/testsuite/g++.target/i386/mv23.C
similarity index 79%
rename from gcc/testsuite/g++.dg/ext/mv23.C
rename to gcc/testsuite/g++.target/i386/mv23.C
index f00afb01f15..674a0ff4a61 100644
--- a/gcc/testsuite/g++.dg/ext/mv23.C
+++ b/gcc/testsuite/g++.target/i386/mv23.C
@@ -1,5 +1,5 @@
 /* Test case to check if Multiversioning works.  */
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-require-effective-target static } */
 /* { dg-options "-O2 -static -march=x86-64" } */
diff --git a/gcc/testsuite/g++.dg/ext/mv24.C b/gcc/testsuite/g++.target/i386/mv24.C
similarity index 91%
rename from gcc/testsuite/g++.dg/ext/mv24.C
rename to gcc/testsuite/g++.target/i386/mv24.C
index 58292a83392..f8736ccc9ab 100644
--- a/gcc/testsuite/g++.dg/ext/mv24.C
+++ b/gcc/testsuite/g++.target/i386/mv24.C
@@ -1,6 +1,6 @@
 // Test case to check if Multiversioning works for AES
 
-// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-do run }
 // { dg-require-ifunc "" }
 // { dg-options "-O2" }
 
diff --git a/gcc/testsuite/g++.dg/ext/mv25.C b/gcc/testsuite/g++.target/i386/mv25.C
similarity index 91%
rename from gcc/testsuite/g++.dg/ext/mv25.C
rename to gcc/testsuite/g++.target/i386/mv25.C
index fd40eca59a5..2e2fcc38e50 100644
--- a/gcc/testsuite/g++.dg/ext/mv25.C
+++ b/gcc/testsuite/g++.target/i386/mv25.C
@@ -1,6 +1,6 @@
 // Test case to check if Multiversioning works for PCLMUL
 
-// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-do run }
 // { dg-require-ifunc "" }
 // { dg-options "-O2" }
 
diff --git a/gcc/testsuite/g++.dg/ext/mv26.C b/gcc/testsuite/g++.target/i386/mv26.C
similarity index 82%
rename from gcc/testsuite/g++.dg/ext/mv26.C
rename to gcc/testsuite/g++.target/i386/mv26.C
index 1b455130e46..6693ca1f81a 100644
--- a/gcc/testsuite/g++.dg/ext/mv26.C
+++ b/gcc/testsuite/g++.target/i386/mv26.C
@@ -1,5 +1,5 @@
 // PR c++/84059
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile }
 // { dg-require-ifunc "" }
 
 template <typename> struct a
diff --git a/gcc/testsuite/g++.dg/ext/mv27.C b/gcc/testsuite/g++.target/i386/mv27.C
similarity index 82%
rename from gcc/testsuite/g++.dg/ext/mv27.C
rename to gcc/testsuite/g++.target/i386/mv27.C
index 443a54be765..60fa8ca7f8c 100644
--- a/gcc/testsuite/g++.dg/ext/mv27.C
+++ b/gcc/testsuite/g++.target/i386/mv27.C
@@ -1,5 +1,5 @@
 // PR c++/83911
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile }
 // { dg-require-ifunc "" }
 
 class SimdFloat
diff --git a/gcc/testsuite/g++.dg/ext/mv3.C b/gcc/testsuite/g++.target/i386/mv3.C
similarity index 93%
rename from gcc/testsuite/g++.dg/ext/mv3.C
rename to gcc/testsuite/g++.target/i386/mv3.C
index ec2aa1ffec2..4a57a523015 100644
--- a/gcc/testsuite/g++.dg/ext/mv3.C
+++ b/gcc/testsuite/g++.target/i386/mv3.C
@@ -9,7 +9,7 @@
    with a direct call to the popcnt version of foo.  Hence, this
    test should pass.  */
 
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-options "-O2" } */
 
 
diff --git a/gcc/testsuite/g++.dg/ext/mv4.C b/gcc/testsuite/g++.target/i386/mv4.C
similarity index 89%
rename from gcc/testsuite/g++.dg/ext/mv4.C
rename to gcc/testsuite/g++.target/i386/mv4.C
index ff1cc2f63f4..c4c4d68c4e4 100644
--- a/gcc/testsuite/g++.dg/ext/mv4.C
+++ b/gcc/testsuite/g++.target/i386/mv4.C
@@ -2,7 +2,7 @@
    when the default version of a multiversioned function is absent
    and its pointer is taken.  */
 
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv5.C b/gcc/testsuite/g++.target/i386/mv5.C
similarity index 88%
rename from gcc/testsuite/g++.dg/ext/mv5.C
rename to gcc/testsuite/g++.target/i386/mv5.C
index fd62eee0155..6690a02a47f 100644
--- a/gcc/testsuite/g++.dg/ext/mv5.C
+++ b/gcc/testsuite/g++.target/i386/mv5.C
@@ -1,7 +1,7 @@
 /* Test case to check if multiversioned functions are still generated if they are
    marked comdat with inline keyword.  */
 
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-O2" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv6.C b/gcc/testsuite/g++.target/i386/mv6.C
similarity index 89%
rename from gcc/testsuite/g++.dg/ext/mv6.C
rename to gcc/testsuite/g++.target/i386/mv6.C
index 2273065996b..766b6de39f8 100644
--- a/gcc/testsuite/g++.dg/ext/mv6.C
+++ b/gcc/testsuite/g++.target/i386/mv6.C
@@ -1,6 +1,6 @@
 /* Test to check if member version multiversioning works correctly.  */
 
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run } */
 /* { dg-require-ifunc "" }  */
 /* { dg-options "-march=x86-64" } */
 
diff --git a/gcc/testsuite/g++.dg/ext/mv7.C b/gcc/testsuite/g++.target/i386/mv7.C
similarity index 80%
rename from gcc/testsuite/g++.dg/ext/mv7.C
rename to gcc/testsuite/g++.target/i386/mv7.C
index 64c04fac60f..2a7ce659cdb 100644
--- a/gcc/testsuite/g++.dg/ext/mv7.C
+++ b/gcc/testsuite/g++.target/i386/mv7.C
@@ -1,4 +1,4 @@
-// { dg-do compile { target i?86-*-* x86_64-*-* } }
+// { dg-do compile }
 // { dg-options "" }
 
 __attribute__((target ("default")))
diff --git a/gcc/testsuite/g++.dg/ext/mv8.C b/gcc/testsuite/g++.target/i386/mv8.C
similarity index 57%
rename from gcc/testsuite/g++.dg/ext/mv8.C
rename to gcc/testsuite/g++.target/i386/mv8.C
index b49ef84f392..f25399d8a5f 100644
--- a/gcc/testsuite/g++.dg/ext/mv8.C
+++ b/gcc/testsuite/g++.target/i386/mv8.C
@@ -1,4 +1,4 @@
-// { dg-do compile { target i?86-*-* x86_64-*-* powerpc*-*-* aarch64*-*-* } }
+// { dg-do compile }
 // { dg-options "" }
 
 __attribute__((target (11,12)))
diff --git a/gcc/testsuite/g++.dg/ext/mv9.C b/gcc/testsuite/g++.target/i386/mv9.C
similarity index 80%
rename from gcc/testsuite/g++.dg/ext/mv9.C
rename to gcc/testsuite/g++.target/i386/mv9.C
index c59651e102a..876a7362220 100644
--- a/gcc/testsuite/g++.dg/ext/mv9.C
+++ b/gcc/testsuite/g++.target/i386/mv9.C
@@ -1,4 +1,4 @@
-// { dg-do compile { target i?86-*-* x86_64-*-* } }    
+// { dg-do compile }
 // { dg-options "" }   
 
 void foo ();
diff --git a/gcc/testsuite/g++.dg/ext/mvc1.C b/gcc/testsuite/g++.target/i386/mvc1.C
similarity index 88%
rename from gcc/testsuite/g++.dg/ext/mvc1.C
rename to gcc/testsuite/g++.target/i386/mvc1.C
index ff37238a4e0..b307d01ace6 100644
--- a/gcc/testsuite/g++.dg/ext/mvc1.C
+++ b/gcc/testsuite/g++.target/i386/mvc1.C
@@ -1,4 +1,4 @@
-/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-do run} */
 /* { dg-require-ifunc "" } */
 
 __attribute__((target_clones("avx","arch=slm","arch=core-avx2","default")))
diff --git a/gcc/testsuite/g++.dg/ext/mvc2.C b/gcc/testsuite/g++.target/i386/mvc2.C
similarity index 88%
rename from gcc/testsuite/g++.dg/ext/mvc2.C
rename to gcc/testsuite/g++.target/i386/mvc2.C
index 1b8c6f4d6e9..7c1fb6518d0 100644
--- a/gcc/testsuite/g++.dg/ext/mvc2.C
+++ b/gcc/testsuite/g++.target/i386/mvc2.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 
 __attribute__((target_clones("avx","arch=slm","default")))
diff --git a/gcc/testsuite/g++.dg/ext/mvc3.C b/gcc/testsuite/g++.target/i386/mvc3.C
similarity index 88%
rename from gcc/testsuite/g++.dg/ext/mvc3.C
rename to gcc/testsuite/g++.target/i386/mvc3.C
index d32b2c93aa0..5d634fd7ea6 100644
--- a/gcc/testsuite/g++.dg/ext/mvc3.C
+++ b/gcc/testsuite/g++.target/i386/mvc3.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 
 __attribute__((target("avx")))
diff --git a/gcc/testsuite/g++.dg/ext/mvc4.C b/gcc/testsuite/g++.target/i386/mvc4.C
similarity index 88%
rename from gcc/testsuite/g++.dg/ext/mvc4.C
rename to gcc/testsuite/g++.target/i386/mvc4.C
index 6e18e560476..68df5e3e4d0 100644
--- a/gcc/testsuite/g++.dg/ext/mvc4.C
+++ b/gcc/testsuite/g++.target/i386/mvc4.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 /* { dg-options "-mavx" } */
 
diff --git a/gcc/testsuite/gcc.target/i386/i386.exp b/gcc/testsuite/gcc.target/i386/i386.exp
index 91fa2a61af2..42bb7e693c1 100644
--- a/gcc/testsuite/gcc.target/i386/i386.exp
+++ b/gcc/testsuite/gcc.target/i386/i386.exp
@@ -25,477 +25,6 @@ if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then {
 load_lib gcc-dg.exp
 load_lib clearcap.exp
 
-# Return 1 if attribute ms_hook_prologue is supported.
-proc check_effective_target_ms_hook_prologue { } {
-    if { [check_no_compiler_messages ms_hook_prologue object {
-	     void __attribute__ ((__ms_hook_prologue__)) foo ();
-	 } ""] } {
-	return 1
-    } else {
-	return 0
-    }
-}
-
-# Return 1 if 3dnow instructions can be compiled.
-proc check_effective_target_3dnow { } {
-    return [check_no_compiler_messages 3dnow object {
-	typedef int __m64 __attribute__ ((__vector_size__ (8)));
-	typedef float __v2sf __attribute__ ((__vector_size__ (8)));
-
-	__m64 _m_pfadd (__m64 __A, __m64 __B)
-	{
-	    return (__m64) __builtin_ia32_pfadd ((__v2sf)__A, (__v2sf)__B);
-	}
-    } "-O2 -m3dnow" ]
-}
-
-# Return 1 if sse3 instructions can be compiled.
-proc check_effective_target_sse3 { } {
-    return [check_no_compiler_messages sse3 object {
-	typedef double __m128d __attribute__ ((__vector_size__ (16)));
-	typedef double __v2df __attribute__ ((__vector_size__ (16)));
-
-	__m128d _mm_addsub_pd (__m128d __X, __m128d __Y)
-	{
-	    return (__m128d) __builtin_ia32_addsubpd ((__v2df)__X, (__v2df)__Y);
-	}
-    } "-O2 -msse3" ]
-}
-
-# Return 1 if ssse3 instructions can be compiled.
-proc check_effective_target_ssse3 { } {
-    return [check_no_compiler_messages ssse3 object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef int __v4si __attribute__ ((__vector_size__ (16)));
-
-	__m128i _mm_abs_epi32 (__m128i __X)
-	{
-	    return (__m128i) __builtin_ia32_pabsd128 ((__v4si)__X);
-	}
-    } "-O2 -mssse3" ]
-}
-
-# Return 1 if aes instructions can be compiled.
-proc check_effective_target_aes { } {
-    return [check_no_compiler_messages aes object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
-
-	__m128i _mm_aesimc_si128 (__m128i __X)
-	{
-	    return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X);
-	}
-    } "-O2 -maes" ]
-}
-
-# Return 1 if vaes instructions can be compiled.
-proc check_effective_target_vaes { } {
-    return [check_no_compiler_messages vaes object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
-
-	__m128i _mm_aesimc_si128 (__m128i __X)
-	{
-	    return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X);
-	}
-    } "-O2 -maes -mavx" ]
-}
-
-# Return 1 if pclmul instructions can be compiled.
-proc check_effective_target_pclmul { } {
-    return [check_no_compiler_messages pclmul object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
-
-	__m128i pclmulqdq_test (__m128i __X, __m128i __Y)
-	{
-	    return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X,
-							  (__v2di)__Y,
-							  1);
-	}
-    } "-O2 -mpclmul" ]
-}
-
-# Return 1 if vpclmul instructions can be compiled.
-proc check_effective_target_vpclmul { } {
-    return [check_no_compiler_messages vpclmul object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
-
-	__m128i pclmulqdq_test (__m128i __X, __m128i __Y)
-	{
-	    return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X,
-							  (__v2di)__Y,
-							  1);
-	}
-    } "-O2 -mpclmul -mavx" ]
-}
-
-# Return 1 if sse4a instructions can be compiled.
-proc check_effective_target_sse4a { } {
-    return [check_no_compiler_messages sse4a object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
-
-	__m128i _mm_insert_si64 (__m128i __X,__m128i __Y)
-	{
-	    return (__m128i) __builtin_ia32_insertq ((__v2di)__X, (__v2di)__Y);
-	}
-    } "-O2 -msse4a" ]
-}
-
-# Return 1 if fma4 instructions can be compiled.
-proc check_effective_target_fma4 { } {
-    return [check_no_compiler_messages fma4 object {
-        typedef float __m128 __attribute__ ((__vector_size__ (16)));
-	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
-	__m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
-	{
-	    return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A,
-						     (__v4sf)__B,
-						     (__v4sf)__C);
-	}
-    } "-O2 -mfma4" ]
-}
-
-# Return 1 if fma instructions can be compiled.
-proc check_effective_target_fma { } {
-    return [check_no_compiler_messages fma object {
-        typedef float __m128 __attribute__ ((__vector_size__ (16)));
-	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
-	__m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
-	{
-	    return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A,
-						     (__v4sf)__B,
-						     (__v4sf)__C);
-	}
-    } "-O2 -mfma" ]
-}
-
-# Return 1 if xop instructions can be compiled.
-proc check_effective_target_xop { } {
-    return [check_no_compiler_messages xop object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef short __v8hi __attribute__ ((__vector_size__ (16)));
-	__m128i _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)
-	{
-	    return (__m128i) __builtin_ia32_vpmacssww ((__v8hi)__A,
-						       (__v8hi)__B,
-						       (__v8hi)__C);
-	}
-    } "-O2 -mxop" ]
-}
-
-# Return 1 if lzcnt instruction can be compiled.
-proc check_effective_target_lzcnt { } {
-    return [check_no_compiler_messages lzcnt object {
-	unsigned short _lzcnt (unsigned short __X)
-	{
-	   return __builtin_clzs (__X);
-	}
-    } "-mlzcnt" ]
-}
-
-# Return 1 if bmi instructions can be compiled.
-proc check_effective_target_bmi { } {
-    return [check_no_compiler_messages bmi object {
-	unsigned int __bextr_u32 (unsigned int __X, unsigned int __Y)
-	{
-	  return __builtin_ia32_bextr_u32 (__X, __Y);
-	}
-    } "-mbmi" ]
-}
-
-# Return 1 if ADX instructions can be compiled.
-proc check_effective_target_adx { } {
-    return [check_no_compiler_messages adx object {
-	unsigned char
-	_adxcarry_u32 (unsigned char __CF, unsigned int __X,
-		   unsigned int __Y, unsigned int *__P)
-	{
-	    return __builtin_ia32_addcarryx_u32 (__CF, __X, __Y, __P);
-	}
-    } "-madx" ]
-}
-
-# Return 1 if rtm instructions can be compiled.
-proc check_effective_target_rtm { } {
-    return [check_no_compiler_messages rtm object {
-	void
-	_rtm_xend (void)
-	{
-	    return __builtin_ia32_xend ();
-	}
-    } "-mrtm" ]
-}
-
-# Return 1 if avx512vl instructions can be compiled.
-proc check_effective_target_avx512vl { } {
-    return [check_no_compiler_messages avx512vl object {
-	typedef long long __v4di __attribute__ ((__vector_size__ (32)));
-	__v4di
-	mm256_and_epi64  (__v4di __X, __v4di __Y)
-	{
-            __v4di __W;
-            return __builtin_ia32_pandq256_mask (__X, __Y, __W, -1);
-	}
-    } "-mavx512vl" ]
-}
-
-# Return 1 if avx512cd instructions can be compiled.
-proc check_effective_target_avx512cd { } {
-    return [check_no_compiler_messages avx512cd_trans object {
-	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
-	__v8di
-	_mm512_conflict_epi64 (__v8di __W, __v8di __A)
-	{
-	  return (__v8di) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
-								 (__v8di) __W,
-								 -1);
-	}
-   } "-Wno-psabi -mavx512cd" ]
-}
-
-# Return 1 if avx512er instructions can be compiled.
-proc check_effective_target_avx512er { } {
-    return [check_no_compiler_messages avx512er_trans object {
-	typedef float __v16sf __attribute__ ((__vector_size__ (64)));
-	__v16sf
-	mm512_exp2a23_ps  (__v16sf __X)
-	{
-	    return __builtin_ia32_exp2ps_mask (__X, __X, -1, 4);
-	}
-   } "-Wno-psabi -mavx512er" ]
-}
-
-# Return 1 if sha instructions can be compiled.
-proc check_effective_target_sha { } {
-    return [check_no_compiler_messages sha object {
-	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
-	typedef int __v4si __attribute__ ((__vector_size__ (16)));
-
-	__m128i _mm_sha1msg1_epu32 (__m128i __X, __m128i __Y)
-	{
-            return (__m128i) __builtin_ia32_sha1msg1 ((__v4si)__X,
-						      (__v4si)__Y);
-	}
-    } "-O2 -msha" ]
-}
-
-# Return 1 if avx512dq instructions can be compiled.
-proc check_effective_target_avx512dq { } {
-    return [check_no_compiler_messages avx512dq object {
-	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
-	__v8di
-	_mm512_mask_mullo_epi64 (__v8di __W, __v8di __A, __v8di __B)
-	{
-	    return (__v8di) __builtin_ia32_pmullq512_mask ((__v8di) __A,
-							    (__v8di) __B,
-							    (__v8di) __W,
-							    -1);
-	}
-    } "-mavx512dq" ]
-}
-
-# Return 1 if avx512bw instructions can be compiled.
-proc check_effective_target_avx512bw { } {
-    return [check_no_compiler_messages avx512bw object {
-	typedef short __v32hi __attribute__ ((__vector_size__ (64)));
-	__v32hi
-	_mm512_mask_mulhrs_epi16 (__v32hi __W, __v32hi __A, __v32hi __B)
-	{
-	    return (__v32hi) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A,
-							    (__v32hi) __B,
-							    (__v32hi) __W,
-							    -1);
-	}
-    } "-mavx512bw" ]
-}
-
-# Return 1 if avx512ifma instructions can be compiled.
-proc check_effective_target_avx512ifma { } {
-    return [check_no_compiler_messages avx512ifma object {
-	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
-	__v8di
-	_mm512_madd52lo_epu64 (__v8di __X, __v8di __Y, __v8di __Z)
-	{
-	  return (__v8di) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __X,
-							       (__v8di) __Y,
-						               (__v8di) __Z,
-						               -1);
-	}
-    } "-mavx512ifma" ]
-}
-
-# Return 1 if avx512vbmi instructions can be compiled.
-proc check_effective_target_avx512vbmi { } {
-    return [check_no_compiler_messages avx512vbmi object {
-	typedef char __v64qi __attribute__ ((__vector_size__ (64)));
-	__v64qi
-	_mm512_multishift_epi64_epi8 (__v64qi __X, __v64qi __Y)
-	{
-	  return (__v64qi) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
-								 (__v64qi) __Y,
-								 (__v64qi) __Y,
-								 -1);
-	}
-    } "-mavx512vbmi" ]
-}
-
-# Return 1 if avx512_4fmaps instructions can be compiled.
-proc check_effective_target_avx5124fmaps { } {
-    return [check_no_compiler_messages avx5124fmaps object {
-	typedef float __v16sf __attribute__ ((__vector_size__ (64)));
-	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
-
-	__v16sf
-	_mm512_mask_4fmadd_ps (__v16sf __DEST, __v16sf __A, __v16sf __B, __v16sf __C,
-			       __v16sf __D, __v16sf __E, __v4sf *__F)
-	{
-	    return (__v16sf) __builtin_ia32_4fmaddps_mask ((__v16sf) __A,
-							  (__v16sf) __B,
-							  (__v16sf) __C,
-							  (__v16sf) __D,
-							  (__v16sf) __E,
-							  (const __v4sf *) __F,
-							  (__v16sf) __DEST,
-							  0xffff);
-	}
-    } "-mavx5124fmaps" ]
-}
-
-# Return 1 if avx512_4vnniw instructions can be compiled.
-proc check_effective_target_avx5124vnniw { } {
-    return [check_no_compiler_messages avx5124vnniw object {
-	typedef int __v16si __attribute__ ((__vector_size__ (64)));
-	typedef int __v4si __attribute__ ((__vector_size__ (16)));
-
-	__v16si
-	_mm512_4dpwssd_epi32 (__v16si __A, __v16si __B, __v16si __C,
-			      __v16si __D, __v16si __E, __v4si *__F)
-	{
-	    return (__v16si) __builtin_ia32_vp4dpwssd ((__v16si) __B,
-						       (__v16si) __C,
-						       (__v16si) __D,
-						       (__v16si) __E,
-						       (__v16si) __A,
-						       (const __v4si *) __F);
-	}
-    } "-mavx5124vnniw" ]
-}
-
-# Return 1 if avx512_vpopcntdq instructions can be compiled.
-proc check_effective_target_avx512vpopcntdq { } {
-    return [check_no_compiler_messages avx512vpopcntdq object {
-        typedef int __v16si __attribute__ ((__vector_size__ (64)));
-
-        __v16si
-        _mm512_popcnt_epi32 (__v16si __A)
-        {
-            return (__v16si) __builtin_ia32_vpopcountd_v16si ((__v16si) __A);
-        }
-    } "-mavx512vpopcntdq" ]
-}
-
-# Return 1 if 128 or 256-bit avx512_vpopcntdq instructions can be compiled.
-proc check_effective_target_avx512vpopcntdqvl { } {
-    return [check_no_compiler_messages avx512vpopcntdqvl object {
-        typedef int __v8si __attribute__ ((__vector_size__ (32)));
-
-        __v8si
-        _mm256_popcnt_epi32 (__v8si __A)
-        {
-            return (__v8si) __builtin_ia32_vpopcountd_v8si ((__v8si) __A);
-        }
-    } "-mavx512vpopcntdq -mavx512vl" ]
-}
-
-# Return 1 if gfni instructions can be compiled.
-proc check_effective_target_gfni { } {
-    return [check_no_compiler_messages gfni object {
-        typedef char __v16qi __attribute__ ((__vector_size__ (16)));
-
-        __v16qi
-        _mm_gf2p8affineinv_epi64_epi8 (__v16qi __A, __v16qi __B, const int __C)
-        {
-            return (__v16qi) __builtin_ia32_vgf2p8affineinvqb_v16qi ((__v16qi) __A,
-								     (__v16qi) __B,
-								      0);
-        }
-    } "-mgfni" ]
-}
-
-# Return 1 if avx512vbmi2 instructions can be compiled.
-proc check_effective_target_avx512vbmi2 { } {
-    return [check_no_compiler_messages avx512vbmi2 object {
-        typedef char __v16qi __attribute__ ((__vector_size__ (16)));
-	typedef unsigned long long __mmask16;
-
-	__v16qi
-	_mm_mask_compress_epi8 (__v16qi __A, __mmask16 __B, __v16qi __C)
-	{
-  		return (__v16qi) __builtin_ia32_compressqi128_mask((__v16qi)__C,
-								   (__v16qi)__A,
-								   (__mmask16)__B);
-	}
-    } "-mavx512vbmi2 -mavx512vl" ]
-}
-
-# Return 1 if avx512vbmi2 instructions can be compiled.
-proc check_effective_target_avx512vnni { } {
-    return [check_no_compiler_messages avx512vnni object {
-        typedef int __v16si __attribute__ ((__vector_size__ (64)));
-
-	__v16si
-	_mm_mask_compress_epi8 (__v16si __A, __v16si __B, __v16si __C)
-	{
-  		return (__v16si) __builtin_ia32_vpdpbusd_v16si ((__v16si)__A,
-								(__v16si)__B,
-								(__v16si)__C);
-	}
-    } "-mavx512vnni -mavx512f" ]
-}
-
-# Return 1 if vaes instructions can be compiled.
-proc check_effective_target_avx512vaes { } {
-    return [check_no_compiler_messages avx512vaes object {
-
-        typedef int __v16si __attribute__ ((__vector_size__ (64)));
-
-	__v32qi
-	_mm256_aesdec_epi128 (__v32qi __A, __v32qi __B)
-	{
-	  return (__v32qi)__builtin_ia32_vaesdec_v32qi ((__v32qi) __A, (__v32qi) __B);
-	}
-    } "-mvaes" ]
-}
-
-# Return 1 if vpclmulqdq instructions can be compiled.
-proc check_effective_target_vpclmulqdq { } {
-    return [check_no_compiler_messages vpclmulqdq object {
-        typedef long long __v4di __attribute__ ((__vector_size__ (32)));
-
-        __v4di
-        _mm256_clmulepi64_epi128 (__v4di __A, __v4di __B)
-        {
-            return (__v4di) __builtin_ia32_vpclmulqdq_v4di (__A, __B, 0);
-        }
-    } "-mvpclmulqdq -mavx512vl" ]
-}
-
-# Return 1 if avx512_bitalg instructions can be compiled.
-proc check_effective_target_avx512bitalg { } {
-    return [check_no_compiler_messages avx512bitalg object {
-        typedef short int __v32hi __attribute__ ((__vector_size__ (64)));
-
-        __v32hi
-        _mm512_popcnt_epi16 (__v32hi __A)
-        {
-            return (__v32hi) __builtin_ia32_vpopcountw_v32hi ((__v32hi) __A);
-        }
-    } "-mavx512bitalg" ]
-}
-
 # If a testcase doesn't have special options, use these.
 global DEFAULT_CFLAGS
 if ![info exists DEFAULT_CFLAGS] then {
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index b82c332ca8b..fd74c04d092 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -7296,6 +7296,476 @@ proc check_effective_target_f16c { } {
     } "-O2 -mf16c" ]
 }
 
+proc check_effective_target_ms_hook_prologue { } {
+    if { [check_no_compiler_messages ms_hook_prologue object {
+	     void __attribute__ ((__ms_hook_prologue__)) foo ();
+	 } ""] } {
+	return 1
+    } else {
+	return 0
+    }
+}
+
+# Return 1 if 3dnow instructions can be compiled.
+proc check_effective_target_3dnow { } {
+    return [check_no_compiler_messages 3dnow object {
+	typedef int __m64 __attribute__ ((__vector_size__ (8)));
+	typedef float __v2sf __attribute__ ((__vector_size__ (8)));
+
+	__m64 _m_pfadd (__m64 __A, __m64 __B)
+	{
+	    return (__m64) __builtin_ia32_pfadd ((__v2sf)__A, (__v2sf)__B);
+	}
+    } "-O2 -m3dnow" ]
+}
+
+# Return 1 if sse3 instructions can be compiled.
+proc check_effective_target_sse3 { } {
+    return [check_no_compiler_messages sse3 object {
+	typedef double __m128d __attribute__ ((__vector_size__ (16)));
+	typedef double __v2df __attribute__ ((__vector_size__ (16)));
+
+	__m128d _mm_addsub_pd (__m128d __X, __m128d __Y)
+	{
+	    return (__m128d) __builtin_ia32_addsubpd ((__v2df)__X, (__v2df)__Y);
+	}
+    } "-O2 -msse3" ]
+}
+
+# Return 1 if ssse3 instructions can be compiled.
+proc check_effective_target_ssse3 { } {
+    return [check_no_compiler_messages ssse3 object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+	__m128i _mm_abs_epi32 (__m128i __X)
+	{
+	    return (__m128i) __builtin_ia32_pabsd128 ((__v4si)__X);
+	}
+    } "-O2 -mssse3" ]
+}
+
+# Return 1 if aes instructions can be compiled.
+proc check_effective_target_aes { } {
+    return [check_no_compiler_messages aes object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
+
+	__m128i _mm_aesimc_si128 (__m128i __X)
+	{
+	    return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X);
+	}
+    } "-O2 -maes" ]
+}
+
+# Return 1 if vaes instructions can be compiled.
+proc check_effective_target_vaes { } {
+    return [check_no_compiler_messages vaes object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
+
+	__m128i _mm_aesimc_si128 (__m128i __X)
+	{
+	    return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X);
+	}
+    } "-O2 -maes -mavx" ]
+}
+
+# Return 1 if pclmul instructions can be compiled.
+proc check_effective_target_pclmul { } {
+    return [check_no_compiler_messages pclmul object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
+
+	__m128i pclmulqdq_test (__m128i __X, __m128i __Y)
+	{
+	    return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X,
+							  (__v2di)__Y,
+							  1);
+	}
+    } "-O2 -mpclmul" ]
+}
+
+# Return 1 if vpclmul instructions can be compiled.
+proc check_effective_target_vpclmul { } {
+    return [check_no_compiler_messages vpclmul object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
+
+	__m128i pclmulqdq_test (__m128i __X, __m128i __Y)
+	{
+	    return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X,
+							  (__v2di)__Y,
+							  1);
+	}
+    } "-O2 -mpclmul -mavx" ]
+}
+
+# Return 1 if sse4a instructions can be compiled.
+proc check_effective_target_sse4a { } {
+    return [check_no_compiler_messages sse4a object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef long long __v2di __attribute__ ((__vector_size__ (16)));
+
+	__m128i _mm_insert_si64 (__m128i __X,__m128i __Y)
+	{
+	    return (__m128i) __builtin_ia32_insertq ((__v2di)__X, (__v2di)__Y);
+	}
+    } "-O2 -msse4a" ]
+}
+
+# Return 1 if fma4 instructions can be compiled.
+proc check_effective_target_fma4 { } {
+    return [check_no_compiler_messages fma4 object {
+        typedef float __m128 __attribute__ ((__vector_size__ (16)));
+	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
+	__m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
+	{
+	    return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A,
+						     (__v4sf)__B,
+						     (__v4sf)__C);
+	}
+    } "-O2 -mfma4" ]
+}
+
+# Return 1 if fma instructions can be compiled.
+proc check_effective_target_fma { } {
+    return [check_no_compiler_messages fma object {
+        typedef float __m128 __attribute__ ((__vector_size__ (16)));
+	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
+	__m128 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
+	{
+	    return (__m128) __builtin_ia32_vfmaddps ((__v4sf)__A,
+						     (__v4sf)__B,
+						     (__v4sf)__C);
+	}
+    } "-O2 -mfma" ]
+}
+
+# Return 1 if xop instructions can be compiled.
+proc check_effective_target_xop { } {
+    return [check_no_compiler_messages xop object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef short __v8hi __attribute__ ((__vector_size__ (16)));
+	__m128i _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)
+	{
+	    return (__m128i) __builtin_ia32_vpmacssww ((__v8hi)__A,
+						       (__v8hi)__B,
+						       (__v8hi)__C);
+	}
+    } "-O2 -mxop" ]
+}
+
+# Return 1 if lzcnt instruction can be compiled.
+proc check_effective_target_lzcnt { } {
+    return [check_no_compiler_messages lzcnt object {
+	unsigned short _lzcnt (unsigned short __X)
+	{
+	   return __builtin_clzs (__X);
+	}
+    } "-mlzcnt" ]
+}
+
+# Return 1 if bmi instructions can be compiled.
+proc check_effective_target_bmi { } {
+    return [check_no_compiler_messages bmi object {
+	unsigned int __bextr_u32 (unsigned int __X, unsigned int __Y)
+	{
+	  return __builtin_ia32_bextr_u32 (__X, __Y);
+	}
+    } "-mbmi" ]
+}
+
+# Return 1 if ADX instructions can be compiled.
+proc check_effective_target_adx { } {
+    return [check_no_compiler_messages adx object {
+	unsigned char
+	_adxcarry_u32 (unsigned char __CF, unsigned int __X,
+		   unsigned int __Y, unsigned int *__P)
+	{
+	    return __builtin_ia32_addcarryx_u32 (__CF, __X, __Y, __P);
+	}
+    } "-madx" ]
+}
+
+# Return 1 if rtm instructions can be compiled.
+proc check_effective_target_rtm { } {
+    return [check_no_compiler_messages rtm object {
+	void
+	_rtm_xend (void)
+	{
+	    return __builtin_ia32_xend ();
+	}
+    } "-mrtm" ]
+}
+
+# Return 1 if avx512vl instructions can be compiled.
+proc check_effective_target_avx512vl { } {
+    return [check_no_compiler_messages avx512vl object {
+	typedef long long __v4di __attribute__ ((__vector_size__ (32)));
+	__v4di
+	mm256_and_epi64  (__v4di __X, __v4di __Y)
+	{
+            __v4di __W;
+            return __builtin_ia32_pandq256_mask (__X, __Y, __W, -1);
+	}
+    } "-mavx512vl" ]
+}
+
+# Return 1 if avx512cd instructions can be compiled.
+proc check_effective_target_avx512cd { } {
+    return [check_no_compiler_messages avx512cd_trans object {
+	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
+	__v8di
+	_mm512_conflict_epi64 (__v8di __W, __v8di __A)
+	{
+	  return (__v8di) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
+								 (__v8di) __W,
+								 -1);
+	}
+   } "-Wno-psabi -mavx512cd" ]
+}
+
+# Return 1 if avx512er instructions can be compiled.
+proc check_effective_target_avx512er { } {
+    return [check_no_compiler_messages avx512er_trans object {
+	typedef float __v16sf __attribute__ ((__vector_size__ (64)));
+	__v16sf
+	mm512_exp2a23_ps  (__v16sf __X)
+	{
+	    return __builtin_ia32_exp2ps_mask (__X, __X, -1, 4);
+	}
+   } "-Wno-psabi -mavx512er" ]
+}
+
+# Return 1 if sha instructions can be compiled.
+proc check_effective_target_sha { } {
+    return [check_no_compiler_messages sha object {
+	typedef long long __m128i __attribute__ ((__vector_size__ (16)));
+	typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+	__m128i _mm_sha1msg1_epu32 (__m128i __X, __m128i __Y)
+	{
+            return (__m128i) __builtin_ia32_sha1msg1 ((__v4si)__X,
+						      (__v4si)__Y);
+	}
+    } "-O2 -msha" ]
+}
+
+# Return 1 if avx512dq instructions can be compiled.
+proc check_effective_target_avx512dq { } {
+    return [check_no_compiler_messages avx512dq object {
+	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
+	__v8di
+	_mm512_mask_mullo_epi64 (__v8di __W, __v8di __A, __v8di __B)
+	{
+	    return (__v8di) __builtin_ia32_pmullq512_mask ((__v8di) __A,
+							    (__v8di) __B,
+							    (__v8di) __W,
+							    -1);
+	}
+    } "-mavx512dq" ]
+}
+
+# Return 1 if avx512bw instructions can be compiled.
+proc check_effective_target_avx512bw { } {
+    return [check_no_compiler_messages avx512bw object {
+	typedef short __v32hi __attribute__ ((__vector_size__ (64)));
+	__v32hi
+	_mm512_mask_mulhrs_epi16 (__v32hi __W, __v32hi __A, __v32hi __B)
+	{
+	    return (__v32hi) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A,
+							    (__v32hi) __B,
+							    (__v32hi) __W,
+							    -1);
+	}
+    } "-mavx512bw" ]
+}
+
+# Return 1 if avx512ifma instructions can be compiled.
+proc check_effective_target_avx512ifma { } {
+    return [check_no_compiler_messages avx512ifma object {
+	typedef long long __v8di __attribute__ ((__vector_size__ (64)));
+	__v8di
+	_mm512_madd52lo_epu64 (__v8di __X, __v8di __Y, __v8di __Z)
+	{
+	  return (__v8di) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __X,
+							       (__v8di) __Y,
+						               (__v8di) __Z,
+						               -1);
+	}
+    } "-mavx512ifma" ]
+}
+
+# Return 1 if avx512vbmi instructions can be compiled.
+proc check_effective_target_avx512vbmi { } {
+    return [check_no_compiler_messages avx512vbmi object {
+	typedef char __v64qi __attribute__ ((__vector_size__ (64)));
+	__v64qi
+	_mm512_multishift_epi64_epi8 (__v64qi __X, __v64qi __Y)
+	{
+	  return (__v64qi) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
+								 (__v64qi) __Y,
+								 (__v64qi) __Y,
+								 -1);
+	}
+    } "-mavx512vbmi" ]
+}
+
+# Return 1 if avx512_4fmaps instructions can be compiled.
+proc check_effective_target_avx5124fmaps { } {
+    return [check_no_compiler_messages avx5124fmaps object {
+	typedef float __v16sf __attribute__ ((__vector_size__ (64)));
+	typedef float __v4sf __attribute__ ((__vector_size__ (16)));
+
+	__v16sf
+	_mm512_mask_4fmadd_ps (__v16sf __DEST, __v16sf __A, __v16sf __B, __v16sf __C,
+			       __v16sf __D, __v16sf __E, __v4sf *__F)
+	{
+	    return (__v16sf) __builtin_ia32_4fmaddps_mask ((__v16sf) __A,
+							  (__v16sf) __B,
+							  (__v16sf) __C,
+							  (__v16sf) __D,
+							  (__v16sf) __E,
+							  (const __v4sf *) __F,
+							  (__v16sf) __DEST,
+							  0xffff);
+	}
+    } "-mavx5124fmaps" ]
+}
+
+# Return 1 if avx512_4vnniw instructions can be compiled.
+proc check_effective_target_avx5124vnniw { } {
+    return [check_no_compiler_messages avx5124vnniw object {
+	typedef int __v16si __attribute__ ((__vector_size__ (64)));
+	typedef int __v4si __attribute__ ((__vector_size__ (16)));
+
+	__v16si
+	_mm512_4dpwssd_epi32 (__v16si __A, __v16si __B, __v16si __C,
+			      __v16si __D, __v16si __E, __v4si *__F)
+	{
+	    return (__v16si) __builtin_ia32_vp4dpwssd ((__v16si) __B,
+						       (__v16si) __C,
+						       (__v16si) __D,
+						       (__v16si) __E,
+						       (__v16si) __A,
+						       (const __v4si *) __F);
+	}
+    } "-mavx5124vnniw" ]
+}
+
+# Return 1 if avx512_vpopcntdq instructions can be compiled.
+proc check_effective_target_avx512vpopcntdq { } {
+    return [check_no_compiler_messages avx512vpopcntdq object {
+        typedef int __v16si __attribute__ ((__vector_size__ (64)));
+
+        __v16si
+        _mm512_popcnt_epi32 (__v16si __A)
+        {
+            return (__v16si) __builtin_ia32_vpopcountd_v16si ((__v16si) __A);
+        }
+    } "-mavx512vpopcntdq" ]
+}
+
+# Return 1 if 128 or 256-bit avx512_vpopcntdq instructions can be compiled.
+proc check_effective_target_avx512vpopcntdqvl { } {
+    return [check_no_compiler_messages avx512vpopcntdqvl object {
+        typedef int __v8si __attribute__ ((__vector_size__ (32)));
+
+        __v8si
+        _mm256_popcnt_epi32 (__v8si __A)
+        {
+            return (__v8si) __builtin_ia32_vpopcountd_v8si ((__v8si) __A);
+        }
+    } "-mavx512vpopcntdq -mavx512vl" ]
+}
+
+# Return 1 if gfni instructions can be compiled.
+proc check_effective_target_gfni { } {
+    return [check_no_compiler_messages gfni object {
+        typedef char __v16qi __attribute__ ((__vector_size__ (16)));
+
+        __v16qi
+        _mm_gf2p8affineinv_epi64_epi8 (__v16qi __A, __v16qi __B, const int __C)
+        {
+            return (__v16qi) __builtin_ia32_vgf2p8affineinvqb_v16qi ((__v16qi) __A,
+								     (__v16qi) __B,
+								      0);
+        }
+    } "-mgfni" ]
+}
+
+# Return 1 if avx512vbmi2 instructions can be compiled.
+proc check_effective_target_avx512vbmi2 { } {
+    return [check_no_compiler_messages avx512vbmi2 object {
+        typedef char __v16qi __attribute__ ((__vector_size__ (16)));
+	typedef unsigned long long __mmask16;
+
+	__v16qi
+	_mm_mask_compress_epi8 (__v16qi __A, __mmask16 __B, __v16qi __C)
+	{
+  		return (__v16qi) __builtin_ia32_compressqi128_mask((__v16qi)__C,
+								   (__v16qi)__A,
+								   (__mmask16)__B);
+	}
+    } "-mavx512vbmi2 -mavx512vl" ]
+}
+
+# Return 1 if avx512vbmi2 instructions can be compiled.
+proc check_effective_target_avx512vnni { } {
+    return [check_no_compiler_messages avx512vnni object {
+        typedef int __v16si __attribute__ ((__vector_size__ (64)));
+
+	__v16si
+	_mm_mask_compress_epi8 (__v16si __A, __v16si __B, __v16si __C)
+	{
+  		return (__v16si) __builtin_ia32_vpdpbusd_v16si ((__v16si)__A,
+								(__v16si)__B,
+								(__v16si)__C);
+	}
+    } "-mavx512vnni -mavx512f" ]
+}
+
+# Return 1 if vaes instructions can be compiled.
+proc check_effective_target_avx512vaes { } {
+    return [check_no_compiler_messages avx512vaes object {
+
+        typedef int __v16si __attribute__ ((__vector_size__ (64)));
+
+	__v32qi
+	_mm256_aesdec_epi128 (__v32qi __A, __v32qi __B)
+	{
+	  return (__v32qi)__builtin_ia32_vaesdec_v32qi ((__v32qi) __A, (__v32qi) __B);
+	}
+    } "-mvaes" ]
+}
+
+# Return 1 if vpclmulqdq instructions can be compiled.
+proc check_effective_target_vpclmulqdq { } {
+    return [check_no_compiler_messages vpclmulqdq object {
+        typedef long long __v4di __attribute__ ((__vector_size__ (32)));
+
+        __v4di
+        _mm256_clmulepi64_epi128 (__v4di __A, __v4di __B)
+        {
+            return (__v4di) __builtin_ia32_vpclmulqdq_v4di (__A, __B, 0);
+        }
+    } "-mvpclmulqdq -mavx512vl" ]
+}
+
+# Return 1 if avx512_bitalg instructions can be compiled.
+proc check_effective_target_avx512bitalg { } {
+    return [check_no_compiler_messages avx512bitalg object {
+        typedef short int __v32hi __attribute__ ((__vector_size__ (64)));
+
+        __v32hi
+        _mm512_popcnt_epi16 (__v32hi __A)
+        {
+            return (__v32hi) __builtin_ia32_vpopcountw_v32hi ((__v32hi) __A);
+        }
+    } "-mavx512bitalg" ]
+}
+
 # Return 1 if C wchar_t type is compatible with char16_t.
 
 proc check_effective_target_wchar_t_char16_t_compatible { } {
-- 
2.19.0


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-08 12:49                   ` Martin Liška
@ 2018-10-08 13:21                     ` Uros Bizjak
  2018-10-09  9:52                       ` Martin Liška
  0 siblings, 1 reply; 26+ messages in thread
From: Uros Bizjak @ 2018-10-08 13:21 UTC (permalink / raw)
  To: Martin Liska
  Cc: Jakub Jelinek, Richard Earnshaw, Richard Guenther, renlin.li,
	gcc-patches

On Mon, Oct 8, 2018 at 2:20 PM Martin Liška <mliska@suse.cz> wrote:
>
> On 10/8/18 1:29 PM, Uros Bizjak wrote:
> > On Mon, Oct 8, 2018 at 1:21 PM Jakub Jelinek <jakub@redhat.com> wrote:
> >>
> >> On Mon, Oct 08, 2018 at 01:17:14PM +0200, Martin Liška wrote:
> >>> I'm suggesting following patch that comes up with new g++.target subfolder.
> >>> I moved there i386 multiversioning tests.
> >>
> >> I think you want Uros to review and decide this one.
> >>
> >>> 2018-10-08  Martin Liska  <mliska@suse.cz>
> >>>
> >>>       * gcc.target/i386/i386.exp: Include lib/i386.exp.
> >>>       * g++.target/i386/i386.exp: New file.
> >>>       * gcc.target/i386/mv*.C: Move here tests and remove
> >>>       target filter in these tests.
> >>>       * lib/i386.exp: New file.
> >>
> >> My preference would be to move all that content to
> >> lib/target-supports.exp, next to all the other i386 specific effective
> >> targets, rather than a new file.  That way it can be used in other
> >> testsuites too (lib*, gfortran.dg, etc.).
> >
> > I agree with the above reasoning. These tests were put in i386.exp
> > with the idea that they will be used only in the gcc.target/i386
> > directory. This is obviously not the case anymore, and as Jakub
> > mentioned, their usage will spread to other directories in the future.
> > So, please simply copy all tests from gcc.target/i386/i386.exp to
> > target-supports.exp to share them with the new g++.target directory.
> >
> > Thanks,
> > Uros.
> >>         Jakub
>
> Ok, it's done in updated patch.

OK.

Thanks,
Uros.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-08 13:21                     ` Uros Bizjak
@ 2018-10-09  9:52                       ` Martin Liška
  2018-10-09 10:06                         ` Rainer Orth
  0 siblings, 1 reply; 26+ messages in thread
From: Martin Liška @ 2018-10-09  9:52 UTC (permalink / raw)
  To: Uros Bizjak
  Cc: Jakub Jelinek, Richard Earnshaw, Richard Guenther, renlin.li,
	gcc-patches

[-- Attachment #1: Type: text/plain, Size: 224 bytes --]

Hi.

There's another move of C++ tests, this time these that have dg-require-ifunc.
Key question is whether we want to make subfolders for i386 tests (ext, other, ..)?

Survives make check -k RUNTESTFLAGS="i386.exp"

Martin

[-- Attachment #2: 0001-Move-some-i386-C-tests-into-g-.target-i386.patch --]
[-- Type: text/x-patch, Size: 4521 bytes --]

From d36db4d5b8306dcbe2d63762bc8596e05132e46a Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Tue, 9 Oct 2018 10:43:35 +0200
Subject: [PATCH] Move some i386 C++ tests into g++.target/i386.

testsuite/ChangeLog:

2018-10-09  Martin Liska  <mliska@suse.cz>

	* pr57362.C: Move to g++.target/i386 folder.
	* pr57548.C: Likewise.
	* pr59492.C: Likewise.
	* pr82625.C: Likewise.
	* pr85329-2.C: Likewise.
	* pr85329.C: Likewise.
---
 gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr57362.C   | 2 +-
 gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr57548.C   | 2 +-
 gcc/testsuite/{g++.dg/other => g++.target/i386}/pr59492.C | 2 +-
 gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr82625.C   | 2 +-
 gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr85329-2.C | 2 +-
 gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr85329.C   | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr57362.C (99%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr57548.C (93%)
 rename gcc/testsuite/{g++.dg/other => g++.target/i386}/pr59492.C (87%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr82625.C (93%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr85329-2.C (81%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr85329.C (80%)

diff --git a/gcc/testsuite/g++.dg/ext/pr57362.C b/gcc/testsuite/g++.target/i386/pr57362.C
similarity index 99%
rename from gcc/testsuite/g++.dg/ext/pr57362.C
rename to gcc/testsuite/g++.target/i386/pr57362.C
index 07270946d55..8c07e857525 100644
--- a/gcc/testsuite/g++.dg/ext/pr57362.C
+++ b/gcc/testsuite/g++.target/i386/pr57362.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" }  */
 
 __attribute__((target("default")))
diff --git a/gcc/testsuite/g++.dg/ext/pr57548.C b/gcc/testsuite/g++.target/i386/pr57548.C
similarity index 93%
rename from gcc/testsuite/g++.dg/ext/pr57548.C
rename to gcc/testsuite/g++.target/i386/pr57548.C
index 1cc728d294c..e027f7d432f 100644
--- a/gcc/testsuite/g++.dg/ext/pr57548.C
+++ b/gcc/testsuite/g++.target/i386/pr57548.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" }  */
 
 int fum (); // Extra declaration that is merged with the second one.
diff --git a/gcc/testsuite/g++.dg/other/pr59492.C b/gcc/testsuite/g++.target/i386/pr59492.C
similarity index 87%
rename from gcc/testsuite/g++.dg/other/pr59492.C
rename to gcc/testsuite/g++.target/i386/pr59492.C
index 92694ae6dde..25393d7a3c2 100644
--- a/gcc/testsuite/g++.dg/other/pr59492.C
+++ b/gcc/testsuite/g++.target/i386/pr59492.C
@@ -1,4 +1,4 @@
-// { dg-do assemble { target { { i?86-*-* x86_64-*-* } && fpic } } }
+// { dg-do assemble { target { fpic } } }
 // { dg-options "-mx32 -fPIC" }
 // { dg-require-ifunc "" }
 // { dg-require-effective-target maybe_x32 }
diff --git a/gcc/testsuite/g++.dg/ext/pr82625.C b/gcc/testsuite/g++.target/i386/pr82625.C
similarity index 93%
rename from gcc/testsuite/g++.dg/ext/pr82625.C
rename to gcc/testsuite/g++.target/i386/pr82625.C
index 59b174f8c51..0eb70baed5e 100644
--- a/gcc/testsuite/g++.dg/ext/pr82625.C
+++ b/gcc/testsuite/g++.target/i386/pr82625.C
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 /* { dg-options "-O2 -fdump-tree-optimized" } */
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 
 __attribute__ ((target ("default")))
 static unsigned foo(const char *buf, unsigned size) {
diff --git a/gcc/testsuite/g++.dg/ext/pr85329-2.C b/gcc/testsuite/g++.target/i386/pr85329-2.C
similarity index 81%
rename from gcc/testsuite/g++.dg/ext/pr85329-2.C
rename to gcc/testsuite/g++.target/i386/pr85329-2.C
index 24622d404f7..e58ab4c5955 100644
--- a/gcc/testsuite/g++.dg/ext/pr85329-2.C
+++ b/gcc/testsuite/g++.target/i386/pr85329-2.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 
 class b
diff --git a/gcc/testsuite/g++.dg/ext/pr85329.C b/gcc/testsuite/g++.target/i386/pr85329.C
similarity index 80%
rename from gcc/testsuite/g++.dg/ext/pr85329.C
rename to gcc/testsuite/g++.target/i386/pr85329.C
index fb77e42cd78..4a0ebf29c07 100644
--- a/gcc/testsuite/g++.dg/ext/pr85329.C
+++ b/gcc/testsuite/g++.target/i386/pr85329.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 
 struct a
-- 
2.19.0


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-09  9:52                       ` Martin Liška
@ 2018-10-09 10:06                         ` Rainer Orth
  2018-10-09 11:44                           ` Martin Liška
  0 siblings, 1 reply; 26+ messages in thread
From: Rainer Orth @ 2018-10-09 10:06 UTC (permalink / raw)
  To: Martin Liška
  Cc: Uros Bizjak, Jakub Jelinek, Richard Earnshaw, Richard Guenther,
	renlin.li, gcc-patches

Hi Martin,

> rename from gcc/testsuite/g++.dg/ext/pr82625.C
> rename to gcc/testsuite/g++.target/i386/pr82625.C
> index 59b174f8c51..0eb70baed5e 100644
> --- a/gcc/testsuite/g++.dg/ext/pr82625.C
> +++ b/gcc/testsuite/g++.target/i386/pr82625.C
> @@ -1,7 +1,7 @@
>  /* { dg-do compile } */
>  /* { dg-require-ifunc "" } */
>  /* { dg-options "-O2 -fdump-tree-optimized" } */
> -/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
> +/* { dg-do compile } */

this is wrong: two instances of dg-do and dg-do after target selections
don't play well with one another.  When you added it yesterday, you
badly broke the test on all x86 targets without ifunc support (probably
everything non-Linux):

+UNRESOLVED: g++.dg/ext/pr82625.C  -std=gnu++11  scan-tree-dump-times optimized "return 4096;" 1
+UNRESOLVED: g++.dg/ext/pr82625.C  -std=gnu++11  scan-tree-dump-times optimized "return 8192;" 1
+FAIL: g++.dg/ext/pr82625.C  -std=gnu++11 (test for excess errors)

Excess errors:
/vol/gcc/src/hg/trunk/local/gcc/testsuite/g++.dg/ext/pr82625.C:7:17: error: multiversioning needs ifunc which is not supported on this target
/vol/gcc/src/hg/trunk/local/gcc/testsuite/g++.dg/ext/pr82625.C:24:1: error: use of multiversioned function without a default

Just remove the second dg-do line.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-09 10:06                         ` Rainer Orth
@ 2018-10-09 11:44                           ` Martin Liška
  2018-10-12  9:27                             ` Rainer Orth
  0 siblings, 1 reply; 26+ messages in thread
From: Martin Liška @ 2018-10-09 11:44 UTC (permalink / raw)
  To: Rainer Orth
  Cc: Uros Bizjak, Jakub Jelinek, Richard Earnshaw, Richard Guenther,
	renlin.li, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1451 bytes --]

On 10/9/18 11:03 AM, Rainer Orth wrote:
> Hi Martin,
> 
>> rename from gcc/testsuite/g++.dg/ext/pr82625.C
>> rename to gcc/testsuite/g++.target/i386/pr82625.C
>> index 59b174f8c51..0eb70baed5e 100644
>> --- a/gcc/testsuite/g++.dg/ext/pr82625.C
>> +++ b/gcc/testsuite/g++.target/i386/pr82625.C
>> @@ -1,7 +1,7 @@
>>  /* { dg-do compile } */
>>  /* { dg-require-ifunc "" } */
>>  /* { dg-options "-O2 -fdump-tree-optimized" } */
>> -/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
>> +/* { dg-do compile } */
> 
> this is wrong: two instances of dg-do and dg-do after target selections
> don't play well with one another.  When you added it yesterday, you
> badly broke the test on all x86 targets without ifunc support (probably
> everything non-Linux):
> 
> +UNRESOLVED: g++.dg/ext/pr82625.C  -std=gnu++11  scan-tree-dump-times optimized "return 4096;" 1
> +UNRESOLVED: g++.dg/ext/pr82625.C  -std=gnu++11  scan-tree-dump-times optimized "return 8192;" 1
> +FAIL: g++.dg/ext/pr82625.C  -std=gnu++11 (test for excess errors)
> 
> Excess errors:
> /vol/gcc/src/hg/trunk/local/gcc/testsuite/g++.dg/ext/pr82625.C:7:17: error: multiversioning needs ifunc which is not supported on this target
> /vol/gcc/src/hg/trunk/local/gcc/testsuite/g++.dg/ext/pr82625.C:24:1: error: use of multiversioned function without a default
> 
> Just remove the second dg-do line.

Thanks for testing!

I'm sending updated version of the patch.

Martin

> 
> 	Rainer
> 


[-- Attachment #2: 0001-Move-some-i386-C-tests-into-g-.target-i386.patch --]
[-- Type: text/x-patch, Size: 4495 bytes --]

From 7e53582805ace4399a77b6dfa1350708ceba06e1 Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Tue, 9 Oct 2018 10:43:35 +0200
Subject: [PATCH] Move some i386 C++ tests into g++.target/i386.

testsuite/ChangeLog:

2018-10-09  Martin Liska  <mliska@suse.cz>

	* pr57362.C: Move to g++.target/i386 folder.
	* pr57548.C: Likewise.
	* pr59492.C: Likewise.
	* pr82625.C: Likewise.
	* pr85329-2.C: Likewise.
	* pr85329.C: Likewise.
---
 gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr57362.C   | 2 +-
 gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr57548.C   | 2 +-
 gcc/testsuite/{g++.dg/other => g++.target/i386}/pr59492.C | 2 +-
 gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr82625.C   | 1 -
 gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr85329-2.C | 2 +-
 gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr85329.C   | 2 +-
 6 files changed, 5 insertions(+), 6 deletions(-)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr57362.C (99%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr57548.C (93%)
 rename gcc/testsuite/{g++.dg/other => g++.target/i386}/pr59492.C (87%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr82625.C (93%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr85329-2.C (81%)
 rename gcc/testsuite/{g++.dg/ext => g++.target/i386}/pr85329.C (80%)

diff --git a/gcc/testsuite/g++.dg/ext/pr57362.C b/gcc/testsuite/g++.target/i386/pr57362.C
similarity index 99%
rename from gcc/testsuite/g++.dg/ext/pr57362.C
rename to gcc/testsuite/g++.target/i386/pr57362.C
index 07270946d55..8c07e857525 100644
--- a/gcc/testsuite/g++.dg/ext/pr57362.C
+++ b/gcc/testsuite/g++.target/i386/pr57362.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" }  */
 
 __attribute__((target("default")))
diff --git a/gcc/testsuite/g++.dg/ext/pr57548.C b/gcc/testsuite/g++.target/i386/pr57548.C
similarity index 93%
rename from gcc/testsuite/g++.dg/ext/pr57548.C
rename to gcc/testsuite/g++.target/i386/pr57548.C
index 1cc728d294c..e027f7d432f 100644
--- a/gcc/testsuite/g++.dg/ext/pr57548.C
+++ b/gcc/testsuite/g++.target/i386/pr57548.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" }  */
 
 int fum (); // Extra declaration that is merged with the second one.
diff --git a/gcc/testsuite/g++.dg/other/pr59492.C b/gcc/testsuite/g++.target/i386/pr59492.C
similarity index 87%
rename from gcc/testsuite/g++.dg/other/pr59492.C
rename to gcc/testsuite/g++.target/i386/pr59492.C
index 92694ae6dde..25393d7a3c2 100644
--- a/gcc/testsuite/g++.dg/other/pr59492.C
+++ b/gcc/testsuite/g++.target/i386/pr59492.C
@@ -1,4 +1,4 @@
-// { dg-do assemble { target { { i?86-*-* x86_64-*-* } && fpic } } }
+// { dg-do assemble { target { fpic } } }
 // { dg-options "-mx32 -fPIC" }
 // { dg-require-ifunc "" }
 // { dg-require-effective-target maybe_x32 }
diff --git a/gcc/testsuite/g++.dg/ext/pr82625.C b/gcc/testsuite/g++.target/i386/pr82625.C
similarity index 93%
rename from gcc/testsuite/g++.dg/ext/pr82625.C
rename to gcc/testsuite/g++.target/i386/pr82625.C
index 59b174f8c51..47bd2df1104 100644
--- a/gcc/testsuite/g++.dg/ext/pr82625.C
+++ b/gcc/testsuite/g++.target/i386/pr82625.C
@@ -1,7 +1,6 @@
 /* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 /* { dg-options "-O2 -fdump-tree-optimized" } */
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
 
 __attribute__ ((target ("default")))
 static unsigned foo(const char *buf, unsigned size) {
diff --git a/gcc/testsuite/g++.dg/ext/pr85329-2.C b/gcc/testsuite/g++.target/i386/pr85329-2.C
similarity index 81%
rename from gcc/testsuite/g++.dg/ext/pr85329-2.C
rename to gcc/testsuite/g++.target/i386/pr85329-2.C
index 24622d404f7..e58ab4c5955 100644
--- a/gcc/testsuite/g++.dg/ext/pr85329-2.C
+++ b/gcc/testsuite/g++.target/i386/pr85329-2.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 
 class b
diff --git a/gcc/testsuite/g++.dg/ext/pr85329.C b/gcc/testsuite/g++.target/i386/pr85329.C
similarity index 80%
rename from gcc/testsuite/g++.dg/ext/pr85329.C
rename to gcc/testsuite/g++.target/i386/pr85329.C
index fb77e42cd78..4a0ebf29c07 100644
--- a/gcc/testsuite/g++.dg/ext/pr85329.C
+++ b/gcc/testsuite/g++.target/i386/pr85329.C
@@ -1,4 +1,4 @@
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-do compile } */
 /* { dg-require-ifunc "" } */
 
 struct a
-- 
2.19.0


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-09 11:44                           ` Martin Liška
@ 2018-10-12  9:27                             ` Rainer Orth
  2018-10-22 10:24                               ` Martin Liška
  0 siblings, 1 reply; 26+ messages in thread
From: Rainer Orth @ 2018-10-12  9:27 UTC (permalink / raw)
  To: Martin Liška
  Cc: Uros Bizjak, Jakub Jelinek, Richard Earnshaw, Richard Guenther,
	renlin.li, gcc-patches

Hi Martin,

> On 10/9/18 11:03 AM, Rainer Orth wrote:
>> Hi Martin,
>> 
>>> rename from gcc/testsuite/g++.dg/ext/pr82625.C
>>> rename to gcc/testsuite/g++.target/i386/pr82625.C
>>> index 59b174f8c51..0eb70baed5e 100644
>>> --- a/gcc/testsuite/g++.dg/ext/pr82625.C
>>> +++ b/gcc/testsuite/g++.target/i386/pr82625.C
>>> @@ -1,7 +1,7 @@
>>>  /* { dg-do compile } */
>>>  /* { dg-require-ifunc "" } */
>>>  /* { dg-options "-O2 -fdump-tree-optimized" } */
>>> -/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
>>> +/* { dg-do compile } */
>> 
>> this is wrong: two instances of dg-do and dg-do after target selections
>> don't play well with one another.  When you added it yesterday, you
>> badly broke the test on all x86 targets without ifunc support (probably
>> everything non-Linux):
>> 
>> +UNRESOLVED: g++.dg/ext/pr82625.C -std=gnu++11 scan-tree-dump-times
>> optimized "return 4096;" 1
>> +UNRESOLVED: g++.dg/ext/pr82625.C -std=gnu++11 scan-tree-dump-times
>> optimized "return 8192;" 1
>> +FAIL: g++.dg/ext/pr82625.C  -std=gnu++11 (test for excess errors)
>> 
>> Excess errors:
>> /vol/gcc/src/hg/trunk/local/gcc/testsuite/g++.dg/ext/pr82625.C:7:17:
>> error: multiversioning needs ifunc which is not supported on this target
>> /vol/gcc/src/hg/trunk/local/gcc/testsuite/g++.dg/ext/pr82625.C:24:1:
>> error: use of multiversioned function without a default
>> 
>> Just remove the second dg-do line.
>
> Thanks for testing!
>
> I'm sending updated version of the patch.

I noticed that before the tests were run with all of
-std=(c|gnu)++(98|11|14), now with no explict -std option.  I wonder if
this is an issue.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-12  9:27                             ` Rainer Orth
@ 2018-10-22 10:24                               ` Martin Liška
  2018-10-22 10:31                                 ` Jakub Jelinek
  0 siblings, 1 reply; 26+ messages in thread
From: Martin Liška @ 2018-10-22 10:24 UTC (permalink / raw)
  To: Rainer Orth
  Cc: Uros Bizjak, Jakub Jelinek, Richard Earnshaw, Richard Guenther,
	renlin.li, gcc-patches

On 10/12/18 10:20 AM, Rainer Orth wrote:
> Hi Martin,
> 
>> On 10/9/18 11:03 AM, Rainer Orth wrote:
>>> Hi Martin,
>>>
>>>> rename from gcc/testsuite/g++.dg/ext/pr82625.C
>>>> rename to gcc/testsuite/g++.target/i386/pr82625.C
>>>> index 59b174f8c51..0eb70baed5e 100644
>>>> --- a/gcc/testsuite/g++.dg/ext/pr82625.C
>>>> +++ b/gcc/testsuite/g++.target/i386/pr82625.C
>>>> @@ -1,7 +1,7 @@
>>>>  /* { dg-do compile } */
>>>>  /* { dg-require-ifunc "" } */
>>>>  /* { dg-options "-O2 -fdump-tree-optimized" } */
>>>> -/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
>>>> +/* { dg-do compile } */
>>>
>>> this is wrong: two instances of dg-do and dg-do after target selections
>>> don't play well with one another.  When you added it yesterday, you
>>> badly broke the test on all x86 targets without ifunc support (probably
>>> everything non-Linux):
>>>
>>> +UNRESOLVED: g++.dg/ext/pr82625.C -std=gnu++11 scan-tree-dump-times
>>> optimized "return 4096;" 1
>>> +UNRESOLVED: g++.dg/ext/pr82625.C -std=gnu++11 scan-tree-dump-times
>>> optimized "return 8192;" 1
>>> +FAIL: g++.dg/ext/pr82625.C  -std=gnu++11 (test for excess errors)
>>>
>>> Excess errors:
>>> /vol/gcc/src/hg/trunk/local/gcc/testsuite/g++.dg/ext/pr82625.C:7:17:
>>> error: multiversioning needs ifunc which is not supported on this target
>>> /vol/gcc/src/hg/trunk/local/gcc/testsuite/g++.dg/ext/pr82625.C:24:1:
>>> error: use of multiversioned function without a default
>>>
>>> Just remove the second dg-do line.
>>
>> Thanks for testing!
>>
>> I'm sending updated version of the patch.
> 
> I noticed that before the tests were run with all of
> -std=(c|gnu)++(98|11|14), now with no explict -std option.  I wonder if
> this is an issue.
> 
> 	Rainer
> 

Hello.

I guess that should not be a problem.

Martin

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-22 10:24                               ` Martin Liška
@ 2018-10-22 10:31                                 ` Jakub Jelinek
  2018-10-22 13:08                                   ` Martin Liška
  0 siblings, 1 reply; 26+ messages in thread
From: Jakub Jelinek @ 2018-10-22 10:31 UTC (permalink / raw)
  To: Martin Liška
  Cc: Rainer Orth, Uros Bizjak, Richard Earnshaw, Richard Guenther,
	renlin.li, gcc-patches

On Mon, Oct 22, 2018 at 12:04:23PM +0200, Martin Liška wrote:
> > I noticed that before the tests were run with all of
> > -std=(c|gnu)++(98|11|14), now with no explict -std option.  I wonder if
> > this is an issue.
> > 
> > 	Rainer
> > 
> 
> Hello.
> 
> I guess that should not be a problem.

If we want that, it is a matter of (untested):
--- gcc/testsuite/g++.target/i386/i386.exp.jj	2018-10-10 10:50:48.352235231 +0200
+++ gcc/testsuite/g++.target/i386/i386.exp	2018-10-22 12:08:56.546807996 +0200
@@ -35,8 +35,8 @@ dg-init
 clearcap-init
 
 # Main loop.
-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \
-        "" $DEFAULT_CXXFLAGS
+g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \
+	       "" $DEFAULT_CXXFLAGS
 
 # All done.
 clearcap-finish

	Jakub

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-22 10:31                                 ` Jakub Jelinek
@ 2018-10-22 13:08                                   ` Martin Liška
  2018-11-16 17:01                                     ` Renlin Li
  0 siblings, 1 reply; 26+ messages in thread
From: Martin Liška @ 2018-10-22 13:08 UTC (permalink / raw)
  To: Jakub Jelinek
  Cc: Rainer Orth, Uros Bizjak, Richard Earnshaw, Richard Guenther,
	renlin.li, gcc-patches

On 10/22/18 12:09 PM, Jakub Jelinek wrote:
> On Mon, Oct 22, 2018 at 12:04:23PM +0200, Martin Liška wrote:
>>> I noticed that before the tests were run with all of
>>> -std=(c|gnu)++(98|11|14), now with no explict -std option.  I wonder if
>>> this is an issue.
>>>
>>> 	Rainer
>>>
>>
>> Hello.
>>
>> I guess that should not be a problem.
> 
> If we want that, it is a matter of (untested):
> --- gcc/testsuite/g++.target/i386/i386.exp.jj	2018-10-10 10:50:48.352235231 +0200
> +++ gcc/testsuite/g++.target/i386/i386.exp	2018-10-22 12:08:56.546807996 +0200
> @@ -35,8 +35,8 @@ dg-init
>  clearcap-init
>  
>  # Main loop.
> -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \
> -        "" $DEFAULT_CXXFLAGS
> +g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \
> +	       "" $DEFAULT_CXXFLAGS
>  
>  # All done.
>  clearcap-finish
> 
> 	Jakub
> 

Thank you Jakub, works for me for:
$ make check -k RUNTESTFLAGS="i386.exp"

I can confirm that:
grep '^PASS' ./gcc/testsuite/g++/g++.log | wc -l


changed from 61 to 183.

I'm going to install the patch.

Martin


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-10-22 13:08                                   ` Martin Liška
@ 2018-11-16 17:01                                     ` Renlin Li
  2018-11-20 12:08                                       ` Martin Liška
  0 siblings, 1 reply; 26+ messages in thread
From: Renlin Li @ 2018-11-16 17:01 UTC (permalink / raw)
  To: Martin Liška, Jakub Jelinek
  Cc: Rainer Orth, Uros Bizjak, Richard Earnshaw, Richard Guenther,
	gcc-patches

Hi Martin,

Seems the change is not checked in yet?

Thanks,
Renlin

On 10/22/2018 01:22 PM, Martin Liška wrote:
> On 10/22/18 12:09 PM, Jakub Jelinek wrote:
>> On Mon, Oct 22, 2018 at 12:04:23PM +0200, Martin Liška wrote:
>>>> I noticed that before the tests were run with all of
>>>> -std=(c|gnu)++(98|11|14), now with no explict -std option.  I wonder if
>>>> this is an issue.
>>>>
>>>> 	Rainer
>>>>
>>>
>>> Hello.
>>>
>>> I guess that should not be a problem.
>>
>> If we want that, it is a matter of (untested):
>> --- gcc/testsuite/g++.target/i386/i386.exp.jj	2018-10-10 10:50:48.352235231 +0200
>> +++ gcc/testsuite/g++.target/i386/i386.exp	2018-10-22 12:08:56.546807996 +0200
>> @@ -35,8 +35,8 @@ dg-init
>>   clearcap-init
>>   
>>   # Main loop.
>> -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \
>> -        "" $DEFAULT_CXXFLAGS
>> +g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \
>> +	       "" $DEFAULT_CXXFLAGS
>>   
>>   # All done.
>>   clearcap-finish
>>
>> 	Jakub
>>
> 
> Thank you Jakub, works for me for:
> $ make check -k RUNTESTFLAGS="i386.exp"
> 
> I can confirm that:
> grep '^PASS' ./gcc/testsuite/g++/g++.log | wc -l
> 
> 
> changed from 61 to 183.
> 
> I'm going to install the patch.
> 
> Martin
> 
> 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests.
  2018-11-16 17:01                                     ` Renlin Li
@ 2018-11-20 12:08                                       ` Martin Liška
  0 siblings, 0 replies; 26+ messages in thread
From: Martin Liška @ 2018-11-20 12:08 UTC (permalink / raw)
  To: Renlin Li, Jakub Jelinek
  Cc: Rainer Orth, Uros Bizjak, Richard Earnshaw, Richard Guenther,
	gcc-patches

On 11/16/18 6:01 PM, Renlin Li wrote:
> Hi Martin,
> 
> Seems the change is not checked in yet?

Sorry, I've just installed the patch.

Martin

> 
> Thanks,
> Renlin
> 
> On 10/22/2018 01:22 PM, Martin Liška wrote:
>> On 10/22/18 12:09 PM, Jakub Jelinek wrote:
>>> On Mon, Oct 22, 2018 at 12:04:23PM +0200, Martin Liška wrote:
>>>>> I noticed that before the tests were run with all of
>>>>> -std=(c|gnu)++(98|11|14), now with no explict -std option.  I wonder if
>>>>> this is an issue.
>>>>>
>>>>>     Rainer
>>>>>
>>>>
>>>> Hello.
>>>>
>>>> I guess that should not be a problem.
>>>
>>> If we want that, it is a matter of (untested):
>>> --- gcc/testsuite/g++.target/i386/i386.exp.jj    2018-10-10 10:50:48.352235231 +0200
>>> +++ gcc/testsuite/g++.target/i386/i386.exp    2018-10-22 12:08:56.546807996 +0200
>>> @@ -35,8 +35,8 @@ dg-init
>>>   clearcap-init
>>>     # Main loop.
>>> -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \
>>> -        "" $DEFAULT_CXXFLAGS
>>> +g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \
>>> +           "" $DEFAULT_CXXFLAGS
>>>     # All done.
>>>   clearcap-finish
>>>
>>>     Jakub
>>>
>>
>> Thank you Jakub, works for me for:
>> $ make check -k RUNTESTFLAGS="i386.exp"
>>
>> I can confirm that:
>> grep '^PASS' ./gcc/testsuite/g++/g++.log | wc -l
>>
>>
>> changed from 61 to 183.
>>
>> I'm going to install the patch.
>>
>> Martin
>>
>>

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2018-11-20 12:08 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-04 14:12 [PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625) Martin Liška
2018-10-04 14:34 ` Jeff Law
2018-10-04 14:58   ` Martin Liška
2018-10-08  9:16 ` Renlin Li
2018-10-08 10:06   ` Martin Liška
2018-10-08 10:11     ` Richard Earnshaw (lists)
2018-10-08 10:29       ` Martin Liška
2018-10-08 10:34         ` Richard Biener
2018-10-08 10:46           ` Martin Liška
2018-10-08 10:55             ` Jakub Jelinek
2018-10-08 11:01               ` Martin Liška
2018-10-08 11:14           ` Richard Earnshaw (lists)
2018-10-08 11:29             ` [PATCH] Come up with gcc/testsuite/g++.target/i386/i386.dg and move there some tests Martin Liška
2018-10-08 11:33               ` Jakub Jelinek
2018-10-08 11:47                 ` Uros Bizjak
2018-10-08 12:49                   ` Martin Liška
2018-10-08 13:21                     ` Uros Bizjak
2018-10-09  9:52                       ` Martin Liška
2018-10-09 10:06                         ` Rainer Orth
2018-10-09 11:44                           ` Martin Liška
2018-10-12  9:27                             ` Rainer Orth
2018-10-22 10:24                               ` Martin Liška
2018-10-22 10:31                                 ` Jakub Jelinek
2018-10-22 13:08                                   ` Martin Liška
2018-11-16 17:01                                     ` Renlin Li
2018-11-20 12:08                                       ` Martin Liška

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).