From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7015 invoked by alias); 2 May 2012 13:42:52 -0000 Received: (qmail 6822 invoked by uid 22791); 2 May 2012 13:42:51 -0000 X-SWARE-Spam-Status: No, hits=-4.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org Received: from mail-bk0-f47.google.com (HELO mail-bk0-f47.google.com) (209.85.214.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 02 May 2012 13:42:38 +0000 Received: by bkcjm2 with SMTP id jm2so504682bkc.20 for ; Wed, 02 May 2012 06:42:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.204.152.203 with SMTP id h11mr6727767bkw.122.1335966156787; Wed, 02 May 2012 06:42:36 -0700 (PDT) Received: by 10.204.25.133 with HTTP; Wed, 2 May 2012 06:42:36 -0700 (PDT) In-Reply-To: References: <20120307004630.A503DB21B6@azwildcat.mtv.corp.google.com> Date: Wed, 02 May 2012 13:42:00 -0000 Message-ID: Subject: Re: User directed Function Multiversioning via Function Overloading (issue5752064) From: "H.J. Lu" To: Sriraman Tallam Cc: Richard Guenther , Jan Hubicka , Uros Bizjak , reply@codereview.appspotmail.com, gcc-patches@gcc.gnu.org, David Li Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-05/txt/msg00130.txt.bz2 On Tue, May 1, 2012 at 7:45 PM, Sriraman Tallam wrote: > Hi H.J, > > =A0 Done now. Patch attached. > > Thanks, > -Sri. > > On Tue, May 1, 2012 at 5:08 PM, H.J. Lu wrote: >> On Tue, May 1, 2012 at 4:51 PM, Sriraman Tallam wr= ote: >>> Hi, >>> >>> New patch attached, updated test case and fixed bugs related to >>> __PRETTY_FUNCTION_. >>> >>> Patch also available for review here: =A0http://codereview.appspot.com/= 5752064 >> >> @@ -0,0 +1,39 @@ >> +/* Simple test case to check if Multiversioning works. =A0*/ >> +/* { dg-do run } */ >> +/* { dg-options "-O2 -fPIC" } */ >> + >> +#include >> + >> +int foo (); >> +int foo () __attribute__ ((target("arch=3Dcorei7,sse4.2,popcnt"))); >> +/* The target operands in this declaration and the definition are re-or= dered. >> + =A0 This should still work. =A0*/ >> +int foo () __attribute__ ((target("ssse3,avx2"))); >> + >> +int (*p)() =3D &foo; >> +int main () >> +{ >> + =A0return foo () + (*p)(); >> +} >> + >> +int foo () >> +{ >> + =A0return 0; >> +} >> + >> +int __attribute__ ((target("arch=3Dcorei7,sse4.2,popcnt"))) >> +foo () >> +{ >> + =A0assert (__builtin_cpu_is ("corei7") >> + =A0 =A0 =A0 =A0 && __builtin_cpu_supports ("sse4.2") >> + =A0 =A0 =A0 =A0 && __builtin_cpu_supports ("popcnt")); >> + =A0return 0; >> +} >> + >> +int __attribute__ ((target("avx2,ssse3"))) >> +foo () >> +{ >> + =A0assert (__builtin_cpu_supports ("avx2") >> + =A0 =A0 =A0 =A0 && __builtin_cpu_supports ("ssse3")); >> + =A0return 0; >> +} >> >> This test will pass if >> >> int foo () >> { >> =A0return 0; >> } >> >> is selected on processors with AVX. =A0The run-time test should >> check that the right function is selected on the target processor, >> not the selected function matches the target attribute. You can >> do it by returning different values for each foo and call cpuid >> to check if the right foo is selected. >> >> You should add a testcase for __builtin_cpu_supports to check >> all valid arguments. >> >> -- >> H.J. 2 questions: 1. Since AVX > SSE4 > SSSE3 > SSE3 > SSE2 > SSE, with foo for AVX and SSE3, on AVX processors, which foo will be selected? 2. I don't see any tests for __builtin_cpu_supports ("XXX") nor __builtin_cpu_is ("XXX"). I think you need tests for them. --=20 H.J.