diff mbox

Fix removal of ifunc (PR ipa/81214).

Message ID 3c269b2c-e1cd-aee3-d3b8-64c468817141@suse.cz
State New
Headers show

Commit Message

Martin Liška July 4, 2017, 7:42 a.m. UTC
On 07/03/2017 03:44 PM, Rainer Orth wrote:
> Hi Martin,
> 
>> Following patch fixes the issue where we do not emit ifunc and resolver
>> for function that are not called in a compilation unit or and not
>> referenced.
>>
>> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.
>> i386.exp tests work on x86_64-linux-gnu.
> 
> your patch caused a testsuite regression on various targets:
> 
> FAIL: gcc.target/i386/mvc6.c (test for excess errors)
> UNRESOLVED: gcc.target/i386/mvc6.c scan-assembler punpcklbw
> UNRESOLVED: gcc.target/i386/mvc6.c scan-assembler vpshufb

Hello.

Thanks for the patch, actually I was working on the patch when you committed :)

> 
> Excess errors:
> /vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.target/i386/mvc6.c:8:1: error: the call requires ifunc, which is not supported by this target
> 
> I'm seeing it on i386-pc-solaris2.12, Dominique reported it in the PR on
> Darwin/x86, and there are also testsuite results on FreeBSD/x86.
> 
> Unlike most other __attribute__((target_clones)) tests, this one lacked
> { dg-require-ifunc "" } and didn't need it before.
> 
> The following patch fixes this.  Tested with the appropriate runtest
> invocation on i386-pc-solaris2.12 and x86_64-pc-linux-gnu, installed on
> mainline.
> 
> While I was at it, I checked the other testcases with
> __attribute__((target_clones)):
> 
> g++.dg/ext/mvc1.C		dg-require-ifunc ""
> g++.dg/ext/mvc2.C		00 (dg-warning)
> g++.dg/ext/mvc3.C		00 (dg-warning)
> g++.dg/ext/mvc4.C		dg-require-ifunc ""
> gcc.dg/tree-prof/pr66295.c	dg-require-ifunc ""
> gcc.target/i386/mvc1.c		dg-require-ifunc ""
> gcc.target/i386/mvc2.c		00
> gcc.target/i386/mvc3.c		00 (dg-error)
> gcc.target/i386/mvc4.c		dg-require-ifunc ""
> gcc.target/i386/mvc5.c		dg-require-ifunc ""
> gcc.target/i386/mvc6.c		00
> gcc.target/i386/mvc7.c		dg-require-ifunc ""
> gcc.target/i386/mvc8.c		dg-require-ifunc ""
> gcc.target/i386/mvc9.c		dg-require-ifunc ""
> gcc.target/i386/pr78419.c	dg-require-ifunc ""
> gcc.target/i386/pr80732.c	dg-require-ifunc ""
> gcc.target/i386/pr81214.c	dg-require-ifunc ""
> gcc.target/powerpc/clone1.c	powerpc*-*-linux* && lp64
> 
> Of those without dg-require-ifunc, the powerpc one is (sort of) ok since
> it's restricted to Linux, and those with dg-warning/dg-error are too
> since the warnings is emitted before the error about missing ifunc
> support.  That leaves us with gcc.target/i386/mvc2.c, which is sort of
> weird because it emits no code at all.  No idea if this intended,
> though.

I prefer to add ifunc to all these tests. I'll do it in attached patch that I'm going
to install.

Thanks and sorry for the fallout.
Martin

> 
> 	Rainer
>
diff mbox

Patch

From 8b3d6abf45c6f1fdfe6780869eb0c8e6a0380f5a Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Tue, 4 Jul 2017 09:39:10 +0200
Subject: [PATCH] Add dg-require ifunc for mvc test-cases.

gcc/testsuite/ChangeLog:

2017-07-04  Martin Liska  <mliska@suse.cz>

	PR ipa/81214
	* g++.dg/ext/mvc2.C: Add dg-require ifunc.
	* g++.dg/ext/mvc3.C: Likewise.
	* gcc.target/i386/mvc2.c: Likewise.
	* gcc.target/i386/mvc3.c: Likewise.
---
 gcc/testsuite/g++.dg/ext/mvc2.C      | 1 +
 gcc/testsuite/g++.dg/ext/mvc3.C      | 1 +
 gcc/testsuite/gcc.target/i386/mvc2.c | 1 +
 gcc/testsuite/gcc.target/i386/mvc3.c | 1 +
 4 files changed, 4 insertions(+)

diff --git a/gcc/testsuite/g++.dg/ext/mvc2.C b/gcc/testsuite/g++.dg/ext/mvc2.C
index e7abab81d95..1b8c6f4d6e9 100644
--- a/gcc/testsuite/g++.dg/ext/mvc2.C
+++ b/gcc/testsuite/g++.dg/ext/mvc2.C
@@ -1,4 +1,5 @@ 
 /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-ifunc "" } */
 
 __attribute__((target_clones("avx","arch=slm","default")))
 __attribute__((target("avx")))
diff --git a/gcc/testsuite/g++.dg/ext/mvc3.C b/gcc/testsuite/g++.dg/ext/mvc3.C
index 05bebf7d4fb..d32b2c93aa0 100644
--- a/gcc/testsuite/g++.dg/ext/mvc3.C
+++ b/gcc/testsuite/g++.dg/ext/mvc3.C
@@ -1,4 +1,5 @@ 
 /* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-require-ifunc "" } */
 
 __attribute__((target("avx")))
 __attribute__((target_clones("avx","arch=slm","default")))
diff --git a/gcc/testsuite/gcc.target/i386/mvc2.c b/gcc/testsuite/gcc.target/i386/mvc2.c
index 9635ec83fac..34a777c1d5e 100644
--- a/gcc/testsuite/gcc.target/i386/mvc2.c
+++ b/gcc/testsuite/gcc.target/i386/mvc2.c
@@ -1,4 +1,5 @@ 
 /* { dg-do compile } */
+/* { dg-require-ifunc "" } */
 
 __attribute__((target_clones("avx","arch=slm","arch=core-avx2")))
 int foo ();
diff --git a/gcc/testsuite/gcc.target/i386/mvc3.c b/gcc/testsuite/gcc.target/i386/mvc3.c
index f940cdbbf55..1c7755fabbe 100644
--- a/gcc/testsuite/gcc.target/i386/mvc3.c
+++ b/gcc/testsuite/gcc.target/i386/mvc3.c
@@ -1,4 +1,5 @@ 
 /* { dg-do compile } */
+/* { dg-require-ifunc "" } */
 
 __attribute__((target_clones("avx","arch=slm","arch=core-avx2")))
 int foo (); /* { dg-error "default target was not set" } */
-- 
2.13.2