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 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. Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University 2017-07-03 Rainer Orth <r...@cebitec.uni-bielefeld.de> * gcc.target/i386/mvc6.c: Require ifunc support.
# HG changeset patch # Parent 69f342cb37ffd9b438e9a09ca3ad5692c2aa1dec Require ifunc support in gcc.target/i386/mvc6.c diff --git a/gcc/testsuite/gcc.target/i386/mvc6.c b/gcc/testsuite/gcc.target/i386/mvc6.c --- a/gcc/testsuite/gcc.target/i386/mvc6.c +++ b/gcc/testsuite/gcc.target/i386/mvc6.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-ifunc "" } */ /* { dg-options "-O3" } */ /* { dg-final { scan-assembler "vpshufb" } } */ /* { dg-final { scan-assembler "punpcklbw" } } */