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 >
>From 8b3d6abf45c6f1fdfe6780869eb0c8e6a0380f5a Mon Sep 17 00:00:00 2001 From: marxin <mli...@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 <mli...@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