From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id A16FE3851A9E for ; Fri, 26 Aug 2022 09:53:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A16FE3851A9E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661507627; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references; bh=8/ArBUKbtxkyCokSljRnXpboneqXHKxTAUz+ZdcyZZI=; b=GbEgbxbKDgS8evv2j9G6w+134erBl13EeYlnTU7hk2+uvOGk2Lv5SgrAEDolxN6J7Jsx7j MHZibWwQeR8ivScIEPEbejMvsbrTiMDqjBFFFAK/zd8JiOiCQuRNzDa8zA1mTiWleqwAP9 Su7drOd/33FScyoJGYc1h1jFGUyuyq8= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-141-9e30z4KlORCCOqNMxVe5kQ-1; Fri, 26 Aug 2022 05:53:44 -0400 X-MC-Unique: 9e30z4KlORCCOqNMxVe5kQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 974AD85A585; Fri, 26 Aug 2022 09:53:43 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.39.192.41]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 52A56141510F; Fri, 26 Aug 2022 09:53:43 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.17.1/8.17.1) with ESMTPS id 27Q9refN223453 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 26 Aug 2022 11:53:40 +0200 Received: (from jakub@localhost) by tucnak.zalov.cz (8.17.1/8.17.1/Submit) id 27Q9rdmu223452; Fri, 26 Aug 2022 11:53:39 +0200 Date: Fri, 26 Aug 2022 11:53:39 +0200 From: Jakub Jelinek To: Tobias Burnus Cc: gcc-patches Subject: Re: [Patch] OpenMP: Support reverse offload (middle end part) Message-ID: Reply-To: Jakub Jelinek References: <1654f119-fe0e-71c5-c28d-9b8fd40b6b87@codesourcery.com> MIME-Version: 1.0 In-Reply-To: <1654f119-fe0e-71c5-c28d-9b8fd40b6b87@codesourcery.com> X-Scanned-By: MIMEDefang 2.85 on 10.11.54.7 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Thu, Jul 21, 2022 at 02:33:32PM +0200, Tobias Burnus wrote: > OpenMP: Support reverse offload (middle end part) > > gcc/ChangeLog: > > * internal-fn.cc (expand_GOMP_TARGET_REV): New. > * internal-fn.def (GOMP_TARGET_REV): New. > * lto-cgraph.cc (lto_output_node, verify_node_partition): Mark > 'omp target device_ancestor_host' as in_other_partition and don't > error if absent. > * omp-low.cc (create_omp_child_function): Mark as 'noclone'. > * omp-expand.cc (expand_omp_target): For reverse offload, remove > sorry, use device = GOMP_DEVICE_HOST_FALLBACK and create > empty-body nohost function. > * omp-offload.cc (execute_omp_device_lower): Handle > IFN_GOMP_TARGET_REV. > (pass_omp_target_link::execute): For ACCEL_COMPILER, don't > nullify fn argument for reverse offload > > libgomp/ChangeLog: > > * libgomp.texi (OpenMP 5.0): Mark 'ancestor' as implemented but > refer to 'requires'. > * testsuite/libgomp.c-c++-common/reverse-offload-1-aux.c: New test. > * testsuite/libgomp.c-c++-common/reverse-offload-1.c: New test. > * testsuite/libgomp.fortran/reverse-offload-1-aux.f90: New test. > * testsuite/libgomp.fortran/reverse-offload-1.f90: New test. > > gcc/testsuite/ChangeLog: > > * c-c++-common/gomp/reverse-offload-1.c: Remove dg-sorry. > * c-c++-common/gomp/target-device-ancestor-4.c: Likewise. > * gfortran.dg/gomp/target-device-ancestor-4.f90: Likewise. > * gfortran.dg/gomp/target-device-ancestor-5.f90: Likewise. > * c-c++-common/goacc/classify-kernels-parloops.c: Add 'noclone' to > scan-tree-dump-times. > * c-c++-common/goacc/classify-kernels-unparallelized-parloops.c: > Likewise. > * c-c++-common/goacc/classify-kernels-unparallelized.c: Likewise. > * c-c++-common/goacc/classify-kernels.c: Likewise. > * c-c++-common/goacc/classify-parallel.c: Likewise. > * c-c++-common/goacc/classify-serial.c: Likewise. > * c-c++-common/goacc/kernels-counter-vars-function-scope.c: Likewise. > * c-c++-common/goacc/kernels-loop-2.c: Likewise. > * c-c++-common/goacc/kernels-loop-3.c: Likewise. > * c-c++-common/goacc/kernels-loop-data-2.c: Likewise. > * c-c++-common/goacc/kernels-loop-data-enter-exit-2.c: Likewise. > * c-c++-common/goacc/kernels-loop-data-enter-exit.c: Likewise. > * c-c++-common/goacc/kernels-loop-data-update.c: Likewise. > * c-c++-common/goacc/kernels-loop-data.c: Likewise. > * c-c++-common/goacc/kernels-loop-g.c: Likewise. > * c-c++-common/goacc/kernels-loop-mod-not-zero.c: Likewise. > * c-c++-common/goacc/kernels-loop-n.c: Likewise. > * c-c++-common/goacc/kernels-loop-nest.c: Likewise. > * c-c++-common/goacc/kernels-loop.c: Likewise. > * c-c++-common/goacc/kernels-one-counter-var.c: Likewise. > * c-c++-common/goacc/kernels-parallel-loop-data-enter-exit.c: Likewise. > * gfortran.dg/goacc/classify-kernels-parloops.f95: Likewise. > * gfortran.dg/goacc/classify-kernels-unparallelized-parloops.f95: > Likewise. > * gfortran.dg/goacc/classify-kernels-unparallelized.f95: Likewise. > * gfortran.dg/goacc/classify-kernels.f95: Likewise. > * gfortran.dg/goacc/classify-parallel.f95: Likewise. > * gfortran.dg/goacc/classify-serial.f95: Likewise. > * gfortran.dg/goacc/kernels-loop-2.f95: Likewise. > * gfortran.dg/goacc/kernels-loop-data-2.f95: Likewise. > * gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95: Likewise. > * gfortran.dg/goacc/kernels-loop-data-enter-exit.f95: Likewise. > * gfortran.dg/goacc/kernels-loop-data-update.f95: Likewise. > * gfortran.dg/goacc/kernels-loop-data.f95: Likewise. > * gfortran.dg/goacc/kernels-loop-n.f95: Likewise. > * gfortran.dg/goacc/kernels-loop.f95: Likewise. > * gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95: Likewise. Ok for trunk, just a comment regarding the FIXME below (can be handled incrementally). > + case IFN_GOMP_TARGET_REV: > + { > +#ifndef ACCEL_COMPILER > + gimple_stmt_iterator gsi2 = gsi; > + gsi_next (&gsi2); > + gcc_assert (!gsi_end_p (gsi2)); > + gcc_assert (gimple_call_builtin_p (gsi_stmt (gsi2), > + BUILT_IN_GOMP_TARGET)); > + tree old_decl > + = TREE_OPERAND (gimple_call_arg (gsi_stmt (gsi2), 1), 0); > + tree new_decl = gimple_call_arg (gsi_stmt (gsi), 0); > + gimple_call_set_arg (gsi_stmt (gsi2), 1, new_decl); > + update_stmt (gsi_stmt (gsi2)); > + new_decl = TREE_OPERAND (new_decl, 0); > + unsigned i; > + unsigned num_funcs = vec_safe_length (offload_funcs); > + for (i = 0; i < num_funcs; i++) > + { > + if ((*offload_funcs)[i] == old_decl) > + { > + (*offload_funcs)[i] = new_decl; > + break; > + } > + else if ((*offload_funcs)[i] == new_decl) > + break; /* This can happen due to inlining. */ > + } > + gcc_assert (i < num_funcs); > +#else > + tree old_decl = TREE_OPERAND (gimple_call_arg (gsi_stmt (gsi), 0), > + 0); > +#endif > + /* FIXME: Find a way to actually prevent outputting the empty-body > + old_decl as debug symbol + function in the assembly file. */ The debug stuff ought to be through DECL_IGNORED_P on the FUNCTION_DECL. If you want it set just on one side and clear on the other side, perhaps set or clear it during lto streaming it in in offload lto1? As for emitting it, perhaps turning it into an external declaration from definition afterwards? Jakub