[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