Patchwork Generally link to libgomp for -ftree-parallelize-loops=* (was: [gomp4 4/9] OpenACC: The runtime library will be implemented in libgomp, too.)

login
register
mail settings
Submitter Thomas Schwinge
Date Nov. 7, 2013, 1:58 p.m.
Message ID <87wqkkia9k.fsf@schwinge.name>
Download mbox | patch
Permalink /patch/289342/
State New
Headers show

Comments

Thomas Schwinge - Nov. 7, 2013, 1:58 p.m.
Hi!

On Thu, 7 Nov 2013 09:15:45 +0100, Jakub Jelinek <jakub@redhat.com> wrote:
> On Wed, Nov 06, 2013 at 08:42:18PM +0100, thomas@codesourcery.com wrote:
> > --- gcc/config/arc/arc.h
> > +++ gcc/config/arc/arc.h
> > @@ -174,7 +174,7 @@ along with GCC; see the file COPYING3.  If not see
> >      %(linker) %l " LINK_PIE_SPEC "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
> >      %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
> >      %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
> > -    %{fopenmp:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
> > +    %{fopenacc|fopenmp:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
> 
> Perhaps add here |ftree-parallelize-loops=* too?  [...]

Like this (for trunk and gomp-4_0-branch)?

	gcc/
	* config/arc/arc.h (LINK_COMMAND_SPEC): For
	-ftree-parallelize-loops=*, link to libgomp and its dependencies.
	* config/ia64/hpux.h (LIB_SPEC): Likewise.
	* config/pa/pa-hpux11.h (LIB_SPEC): Likewise.
	* config/pa/pa64-hpux.h (LIB_SPEC): Likewise.
	* gcc.c (GOMP_SELF_SPECS): Update comment about libgomp's
	dependencies.
	libgomp/
	* libgomp.spec.in: Update comment about libgomp's dependencies.
	* configure.ac: Likewise.
	* configure: Regenerate.



Grüße,
 Thomas
Jakub Jelinek - Nov. 7, 2013, 2:38 p.m.
On Thu, Nov 07, 2013 at 02:58:31PM +0100, Thomas Schwinge wrote:
> On Thu, 7 Nov 2013 09:15:45 +0100, Jakub Jelinek <jakub@redhat.com> wrote:
> > On Wed, Nov 06, 2013 at 08:42:18PM +0100, thomas@codesourcery.com wrote:
> > > --- gcc/config/arc/arc.h
> > > +++ gcc/config/arc/arc.h
> > > @@ -174,7 +174,7 @@ along with GCC; see the file COPYING3.  If not see
> > >      %(linker) %l " LINK_PIE_SPEC "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
> > >      %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
> > >      %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
> > > -    %{fopenmp:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
> > > +    %{fopenacc|fopenmp:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
> > 
> > Perhaps add here |ftree-parallelize-loops=* too?  [...]
> 
> Like this (for trunk and gomp-4_0-branch)?
> 
> 	gcc/
> 	* config/arc/arc.h (LINK_COMMAND_SPEC): For
> 	-ftree-parallelize-loops=*, link to libgomp and its dependencies.
> 	* config/ia64/hpux.h (LIB_SPEC): Likewise.
> 	* config/pa/pa-hpux11.h (LIB_SPEC): Likewise.
> 	* config/pa/pa64-hpux.h (LIB_SPEC): Likewise.
> 	* gcc.c (GOMP_SELF_SPECS): Update comment about libgomp's
> 	dependencies.
> 	libgomp/
> 	* libgomp.spec.in: Update comment about libgomp's dependencies.
> 	* configure.ac: Likewise.
> 	* configure: Regenerate.

Yes, thanks.

	Jakub

Patch

diff --git gcc/config/arc/arc.h gcc/config/arc/arc.h
index 637f7b6..87908d4 100644
--- gcc/config/arc/arc.h
+++ gcc/config/arc/arc.h
@@ -174,7 +174,8 @@  along with GCC; see the file COPYING3.  If not see
     %(linker) %l " LINK_PIE_SPEC "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
     %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
     %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
-    %{fopenmp:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
+    %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\
+    %(mflib)\
     %{fprofile-arcs|fprofile-generate|coverage:-lgcov}\
     %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}\
     %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}"
diff --git gcc/config/ia64/hpux.h gcc/config/ia64/hpux.h
index ca592e4..517132c 100644
--- gcc/config/ia64/hpux.h
+++ gcc/config/ia64/hpux.h
@@ -92,7 +92,7 @@  do {							\
 #undef  LIB_SPEC
 #define LIB_SPEC \
   "%{!shared: \
-     %{mt|pthread:%{fopenmp:-lrt} -lpthread} \
+     %{mt|pthread:%{fopenmp|ftree-parallelize-loops=*:-lrt} -lpthread} \
      %{p:%{!mlp64:-L/usr/lib/hpux32/libp} \
 	 %{mlp64:-L/usr/lib/hpux64/libp} -lprof} \
      %{pg:%{!mlp64:-L/usr/lib/hpux32/libp} \
diff --git gcc/config/pa/pa-hpux11.h gcc/config/pa/pa-hpux11.h
index c217398..4da1b09 100644
--- gcc/config/pa/pa-hpux11.h
+++ gcc/config/pa/pa-hpux11.h
@@ -120,7 +120,8 @@  along with GCC; see the file COPYING3.  If not see
 #undef LIB_SPEC
 #define LIB_SPEC \
   "%{!shared:\
-     %{fopenmp:%{static:-a archive_shared} -lrt %{static:-a archive}}\
+     %{fopenmp|ftree-parallelize-loops=*:%{static:-a archive_shared} -lrt\
+       %{static:-a archive}}\
      %{mt|pthread:-lpthread} -lc\
      %{static:%{!nolibdld:-a archive_shared -ldld -a archive -lc}\
        %{!mt:%{!pthread:-a shared -lc -a archive}}}}\
diff --git gcc/config/pa/pa64-hpux.h gcc/config/pa/pa64-hpux.h
index a3e21d3..9efc137 100644
--- gcc/config/pa/pa64-hpux.h
+++ gcc/config/pa/pa64-hpux.h
@@ -58,19 +58,22 @@  along with GCC; see the file COPYING3.  If not see
 #if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_GNU_LD)
 #define LIB_SPEC \
   "%{!shared:\
-     %{!p:%{!pg:%{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
+     %{!p:%{!pg:%{fopenmp|ftree-parallelize-loops=*:%{static:-a shared} -lrt\
+                  %{static:-a archive}}\
 	    %{mt|pthread:-lpthread} -lc\
 	    %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
 		%{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
      %{p:%{!pg:%{static:%{!mhp-ld:-a shared}%{mhp-ld:-a archive_shared}}\
 	   -lprof %{static:-a archive}\
-	   %{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
+	   %{fopenmp|ftree-parallelize-loops=*:%{static:-a shared} -lrt\
+             %{static:-a archive}}\
 	   %{mt|pthread:-lpthread} -lc\
 	   %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
 		%{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
      %{pg:%{static:%{!mhp-ld:-a shared}%{mhp-ld:-a archive_shared}}\
        -lgprof %{static:-a archive}\
-       %{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
+       %{fopenmp|ftree-parallelize-loops=*:%{static:-a shared} -lrt\
+         %{static:-a archive}}\
        %{mt|pthread:-lpthread} -lc\
        %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
 		%{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
@@ -78,19 +81,22 @@  along with GCC; see the file COPYING3.  If not see
 #else
 #define LIB_SPEC \
   "%{!shared:\
-     %{!p:%{!pg:%{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
+     %{!p:%{!pg:%{fopenmp|ftree-parallelize-loops=*:%{static:-a shared} -lrt\
+                  %{static:-a archive}}\
 	    %{mt|pthread:-lpthread} -lc\
 	    %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
 		%{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
      %{p:%{!pg:%{static:%{mgnu-ld:-a shared}%{!mgnu-ld:-a archive_shared}}\
 	   -lprof %{static:-a archive}\
-	   %{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
+	   %{fopenmp|ftree-parallelize-loops=*:%{static:-a shared} -lrt\
+             %{static:-a archive}}\
 	   %{mt|pthread:-lpthread} -lc\
 	   %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
 		%{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
      %{pg:%{static:%{mgnu-ld:-a shared}%{!mgnu-ld:-a archive_shared}}\
        -lgprof %{static:-a archive}\
-       %{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
+       %{fopenmp|ftree-parallelize-loops=*:%{static:-a shared} -lrt\
+         %{static:-a archive}}\
        %{mt|pthread:-lpthread} -lc\
        %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
 		%{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
diff --git gcc/gcc.c gcc/gcc.c
index 83607e5..dff7477 100644
--- gcc/gcc.c
+++ gcc/gcc.c
@@ -924,7 +924,7 @@  static const char *const multilib_defaults_raw[] = MULTILIB_DEFAULTS;
 #define DRIVER_SELF_SPECS ""
 #endif
 
-/* Adding -fopenmp should imply pthreads.  This is particularly important
+/* Linking to libgomp implies pthreads.  This is particularly important
    for targets that use different start files and suchlike.  */
 #ifndef GOMP_SELF_SPECS
 #define GOMP_SELF_SPECS "%{fopenmp|ftree-parallelize-loops=*: -pthread}"
diff --git libgomp/configure.ac libgomp/configure.ac
index e7fbb31..84d250f 100644
--- libgomp/configure.ac
+++ libgomp/configure.ac
@@ -274,7 +274,7 @@  else
 fi
 
 # Set up the set of libraries that we need to link against for libgomp.
-# Note that the GOMP_SELF_SPEC in gcc.c will force -pthread for -fopenmp,
+# Note that the GOMP_SELF_SPEC in gcc.c may force -pthread,
 # which will force linkage against -lpthread (or equivalent for the system).
 # That's not 100% ideal, but about the best we can do easily.
 if test $enable_shared = yes; then
diff --git libgomp/libgomp.spec.in libgomp/libgomp.spec.in
index b7319f3..5651603 100644
--- libgomp/libgomp.spec.in
+++ libgomp/libgomp.spec.in
@@ -1,3 +1,3 @@ 
 # This spec file is read by gcc when linking.  It is used to specify the
-# standard libraries we need in order to link with -fopenmp.
+# standard libraries we need in order to link with libgomp.
 *link_gomp: @link_gomp@