[PR libgomp/65742, PR middle-end/66332] XFAIL acc_on_device compile-time evaluation (was: acc_on_device for device_type_host_nonshm)

Thomas Schwinge thomas@codesourcery.com
Tue Jun 2 12:08:00 GMT 2015


Hi!

On Thu, 7 May 2015 19:32:26 +0100, Julian Brown <julian@codesourcery.com> wrote:
> On Fri, 17 Apr 2015 15:16:19 +0200
> Jakub Jelinek <jakub@redhat.com> wrote:
> 
> > On Tue, Apr 14, 2015 at 05:43:26PM +0200, Thomas Schwinge wrote:
> > > Really, acc_on_device is implemented as a compiler builtin (which
> > > is just disabled for a few libgomp test cases, in order to test the
> > > acc_on_device library function in libgomp), and I never understood
> > > why the "fallback" implementation in libgomp (cited above) should
> > > be doing anything different from the GCC builtin.  Is the "problem"
> > > actually, that some
> > 
> > The question is if the builtin expansion isn't wrong, at least as
> > long as the host_nonshm device is meant to be supported.  The
> > #ifdef ACCEL_COMPILER
> > case is easier, at least as long as ACCEL_COMPILER compiled code is
> > not meant to be able to offload to other devices (or host again), but
> > the non-ACCEL_COMPILER case means the code is either on the host, or
> > host_nonshm, or e.g. with Intel MIC you could have some shared
> > library be compiled by the host compiler, but then actuall linked
> > into the MIC offloaded path.  In all those cases, I think it is just
> > the library that can determine the return value.
> > 
> > E.g. OpenMP omp_is_initial_device function is also only implemented
> > in the library, perhaps at some point I could expand it for #ifdef
> > ACCEL_COMPILER as builtin, but not for the host code, at least not
> > due to the host-nonshm plugin.
> 
> Here's a new version of the patch that doesn't use the open-coded
> expansion for acc_on_device for the host compiler at all. This means
> that the host and the host_nonshm plugin should DTRT without any
> special compiler options (which have thus been removed from the libgomp
> tests that set them or refer to them).
> 
> So now, for the host, acc_on_device returns:
> 
> acc_on_device (acc_device_none): true
> acc_on_device (acc_device_host): true
> otherwise: false
> 
> When the host_nonshm plugin is active, acc_on_device returns:
> 
> acc_on_device (acc_device_host_nonshm): true (except when "host
> fallback" is in effect, i.e. because of a false "if" clause).
> acc_on_device (acc_device_not_host): likewise.
> otherwise: false
> 
> In particular, the host_nonshm plugin doesn't consider itself to be
> running code "on the host".

>     PR libgomp/65742
> 
>     gcc/
>     * builtins.c (expand_builtin_acc_on_device): Don't use open-coded
>     sequence for !ACCEL_COMPILER.

As reported in <https://gcc.gnu.org/PR66332>, this caused the following
regression (C testing):

    PASS: c-c++-common/goacc/acc_on_device-2.c (test for excess errors)
    [-PASS:-]{+FAIL:+} c-c++-common/goacc/acc_on_device-2.c scan-rtl-dump-times expand "\\(call [^\\n]* acc_on_device" 0

Committed to trunk in r224028:

commit 1c2d9da9cee04516151b3894edb107e3cdf2c8b9
Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Tue Jun 2 11:48:56 2015 +0000

    [PR libgomp/65742, PR middle-end/66332] XFAIL acc_on_device compile-time evaluation
    
    The OpenACC 2.0a specification mandates differently, but we currently do get a
    library call in the host code.
    
    	PR libgomp/65742
    	PR middle-end/66332
    
    	gcc/testsuite/
    	* c-c++-common/goacc/acc_on_device-2.c: XFAIL for C, too.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@224028 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/testsuite/ChangeLog                            |  6 ++++++
 gcc/testsuite/c-c++-common/goacc/acc_on_device-2.c | 10 +++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git gcc/testsuite/ChangeLog gcc/testsuite/ChangeLog
index d91cf7c..3f51b10 100644
--- gcc/testsuite/ChangeLog
+++ gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-06-02  Thomas Schwinge  <thomas@codesourcery.com>
+
+	PR libgomp/65742
+	PR middle-end/66332
+	* c-c++-common/goacc/acc_on_device-2.c: XFAIL for C, too.
+
 2015-06-02  Uros Bizjak  <ubizjak@gmail.com>
 
 	* g++.dg/abi/mangle-regparm.C (dg-do): Fix x86_32 target selector.
diff --git gcc/testsuite/c-c++-common/goacc/acc_on_device-2.c gcc/testsuite/c-c++-common/goacc/acc_on_device-2.c
index 8db0a66..6e3d292 100644
--- gcc/testsuite/c-c++-common/goacc/acc_on_device-2.c
+++ gcc/testsuite/c-c++-common/goacc/acc_on_device-2.c
@@ -20,9 +20,17 @@ f (void)
 }
 
 /* With -fopenacc, we're expecting the builtin to be expanded, so no calls.
+
    TODO: in C++, even under extern "C", the use of enum for acc_device_t
    perturbs expansion as a builtin, which expects an int parameter.  It's fine
    when changing acc_device_t to plain int, but that's not what we're doing in
    <openacc.h>.
-   { dg-final { scan-rtl-dump-times "\\\(call \[^\\n\]* acc_on_device" 0 "expand" { xfail c++ } } } */
+
+   TODO: given that we can't expand acc_on_device in
+   gcc/builtins.c:expand_builtin_acc_on_device for in the !ACCEL_COMPILER case
+   (because at that point we don't know whether we're acc_device_host or
+   acc_device_host_nonshm), we'll (erroneously) get a library call in the host
+   code.
+
+   { dg-final { scan-rtl-dump-times "\\\(call \[^\\n\]* acc_on_device" 0 "expand" { xfail { c || c++ } } } } */
 


Grüße,
 Thomas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 472 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20150602/cba7760e/attachment.sig>


More information about the Gcc-patches mailing list