diff mbox

OMP builtins in offloading (was: [PATCH 1/4] Add mkoffload for Intel MIC)

Message ID 87wq5kylph.fsf@kepler.schwinge.homeip.net
State New
Headers show

Commit Message

Thomas Schwinge Dec. 22, 2014, 11:20 a.m. UTC
Hi!

On Wed, 22 Oct 2014 22:57:01 +0400, Ilya Verbin <iverbin@gmail.com> wrote:
> --- /dev/null
> +++ b/gcc/config/i386/intelmic-mkoffload.c
> @@ -0,0 +1,541 @@
> +/* Offload image generation tool for Intel MIC devices.

> +static const char *
> +prepare_target_image (const char *target_compiler, int argc, char **argv)
> +{
> +  [...]
> +  obstack_init (&argv_obstack);
> +  obstack_ptr_grow (&argv_obstack, target_compiler);
> +  obstack_ptr_grow (&argv_obstack, "-xlto");
> +  obstack_ptr_grow (&argv_obstack, "-fopenmp");
> +  obstack_ptr_grow (&argv_obstack, "-shared");
> +  obstack_ptr_grow (&argv_obstack, "-fPIC");
> +  obstack_ptr_grow (&argv_obstack, opt1);

What is the reason that you're adding -fopenmp here?  I assume it is that
otherwise you'd get tree streaming errors because of different builtins
configurations, like this?

    $ [...]/build-gcc/gcc/xgcc -B[...]/build-gcc/gcc/ [...]/source-gcc/libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/collapse-1.c -B[...]/build-gcc/x86_64-unknown-linux-gnu/./libgomp/ -B[...]/build-gcc/x86_64-unknown-linux-gnu/./libgomp/.libs -I[...]/build-gcc/x86_64-unknown-linux-gnu/./libgomp -I[...]/source-gcc/libgomp/testsuite/../../include -I[...]/source-gcc/libgomp/testsuite/.. -fmessage-length=0 -fno-diagnostics-show-caret -fdiagnostics-color=never -B[...]/install/offload-x86_64-intelmicemul-linux-gnu/libexec/gcc/x86_64-unknown-linux-gnu/5.0.0 -B[...]/install/offload-x86_64-intelmicemul-linux-gnu/bin -fopenacc -DACC_DEVICE_TYPE_host_nonshm=1 -DACC_MEM_SHARED=0 -O2 -L[...]/build-gcc/x86_64-unknown-linux-gnu/./libgomp/.libs -lm -o ./collapse-1.exe
    lto1: internal compiler error: in streamer_get_builtin_tree, at tree-streamer-in.c:1136
    0xc0b7ff streamer_get_builtin_tree(lto_input_block*, data_in*)
            [...]/source-gcc/gcc/tree-streamer-in.c:1136
    0x8f7cc4 lto_input_tree_1(lto_input_block*, data_in*, LTO_tags, unsigned int)
            [...]/source-gcc/gcc/lto-streamer-in.c:1303
    0x8f7ee0 lto_input_scc(lto_input_block*, data_in*, unsigned int*, unsigned int*)
            [...]/source-gcc/gcc/lto-streamer-in.c:1231
    0x5e9bee lto_read_decls
            [...]/source-gcc/gcc/lto/lto.c:1889
    0x5ebc5c lto_file_finalize
            [...]/source-gcc/gcc/lto/lto.c:2218
    0x5ebc5c lto_create_files_from_ids
            [...]/source-gcc/gcc/lto/lto.c:2228
    0x5ebc5c lto_file_read
            [...]/source-gcc/gcc/lto/lto.c:2269
    0x5ebc5c read_cgraph_and_symbols
            [...]/source-gcc/gcc/lto/lto.c:2969
    0x5ebc5c lto_main()
            [...]/source-gcc/gcc/lto/lto.c:3424
    [...]
    mkoffload-intelmic: fatal error: [...]/install/offload-x86_64-intelmicemul-linux-gnu/bin//x86_64-unknown-linux-gnu-accel-x86_64-intelmicemul-linux-gnu-gcc returned 1 exit status
    compilation terminated.
    lto-wrapper: fatal error: [...]/install/offload-x86_64-intelmicemul-linux-gnu/libexec/gcc/x86_64-unknown-linux-gnu/5.0.0//accel/x86_64-intelmicemul-linux-gnu/mkoffload returned 1 exit status
    compilation terminated.
    [...]/ld: lto-wrapper failed
    collect2: error: ld returned 1 exit status

If that is the "only" reason to add -fopenmp there, can we then instead
do the following?

 gcc/builtins.def                     | 8 ++++++--
 gcc/config/i386/intelmic-mkoffload.c | 1 -
 2 files changed, 6 insertions(+), 3 deletions(-)



Grüße,
 Thomas

Comments

Jakub Jelinek Dec. 22, 2014, 11:26 a.m. UTC | #1
On Mon, Dec 22, 2014 at 12:20:58PM +0100, Thomas Schwinge wrote:
> On Wed, 22 Oct 2014 22:57:01 +0400, Ilya Verbin <iverbin@gmail.com> wrote:
> > --- /dev/null
> > +++ b/gcc/config/i386/intelmic-mkoffload.c
> > @@ -0,0 +1,541 @@
> > +/* Offload image generation tool for Intel MIC devices.
> 
> > +static const char *
> > +prepare_target_image (const char *target_compiler, int argc, char **argv)
> > +{
> > +  [...]
> > +  obstack_init (&argv_obstack);
> > +  obstack_ptr_grow (&argv_obstack, target_compiler);
> > +  obstack_ptr_grow (&argv_obstack, "-xlto");
> > +  obstack_ptr_grow (&argv_obstack, "-fopenmp");
> > +  obstack_ptr_grow (&argv_obstack, "-shared");
> > +  obstack_ptr_grow (&argv_obstack, "-fPIC");
> > +  obstack_ptr_grow (&argv_obstack, opt1);
> 
> What is the reason that you're adding -fopenmp here?  I assume it is that
> otherwise you'd get tree streaming errors because of different builtins
> configurations, like this?
> 
>     $ [...]/build-gcc/gcc/xgcc -B[...]/build-gcc/gcc/ [...]/source-gcc/libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/collapse-1.c -B[...]/build-gcc/x86_64-unknown-linux-gnu/./libgomp/ -B[...]/build-gcc/x86_64-unknown-linux-gnu/./libgomp/.libs -I[...]/build-gcc/x86_64-unknown-linux-gnu/./libgomp -I[...]/source-gcc/libgomp/testsuite/../../include -I[...]/source-gcc/libgomp/testsuite/.. -fmessage-length=0 -fno-diagnostics-show-caret -fdiagnostics-color=never -B[...]/install/offload-x86_64-intelmicemul-linux-gnu/libexec/gcc/x86_64-unknown-linux-gnu/5.0.0 -B[...]/install/offload-x86_64-intelmicemul-linux-gnu/bin -fopenacc -DACC_DEVICE_TYPE_host_nonshm=1 -DACC_MEM_SHARED=0 -O2 -L[...]/build-gcc/x86_64-unknown-linux-gnu/./libgomp/.libs -lm -o ./collapse-1.exe
>     lto1: internal compiler error: in streamer_get_builtin_tree, at tree-streamer-in.c:1136
>     0xc0b7ff streamer_get_builtin_tree(lto_input_block*, data_in*)
>             [...]/source-gcc/gcc/tree-streamer-in.c:1136
>     0x8f7cc4 lto_input_tree_1(lto_input_block*, data_in*, LTO_tags, unsigned int)
>             [...]/source-gcc/gcc/lto-streamer-in.c:1303
>     0x8f7ee0 lto_input_scc(lto_input_block*, data_in*, unsigned int*, unsigned int*)
>             [...]/source-gcc/gcc/lto-streamer-in.c:1231
>     0x5e9bee lto_read_decls
>             [...]/source-gcc/gcc/lto/lto.c:1889
>     0x5ebc5c lto_file_finalize
>             [...]/source-gcc/gcc/lto/lto.c:2218
>     0x5ebc5c lto_create_files_from_ids
>             [...]/source-gcc/gcc/lto/lto.c:2228
>     0x5ebc5c lto_file_read
>             [...]/source-gcc/gcc/lto/lto.c:2269
>     0x5ebc5c read_cgraph_and_symbols
>             [...]/source-gcc/gcc/lto/lto.c:2969
>     0x5ebc5c lto_main()
>             [...]/source-gcc/gcc/lto/lto.c:3424
>     [...]
>     mkoffload-intelmic: fatal error: [...]/install/offload-x86_64-intelmicemul-linux-gnu/bin//x86_64-unknown-linux-gnu-accel-x86_64-intelmicemul-linux-gnu-gcc returned 1 exit status
>     compilation terminated.
>     lto-wrapper: fatal error: [...]/install/offload-x86_64-intelmicemul-linux-gnu/libexec/gcc/x86_64-unknown-linux-gnu/5.0.0//accel/x86_64-intelmicemul-linux-gnu/mkoffload returned 1 exit status
>     compilation terminated.
>     [...]/ld: lto-wrapper failed
>     collect2: error: ld returned 1 exit status
> 
> If that is the "only" reason to add -fopenmp there, can we then instead
> do the following?
> 
>  gcc/builtins.def                     | 8 ++++++--
>  gcc/config/i386/intelmic-mkoffload.c | 1 -
>  2 files changed, 6 insertions(+), 3 deletions(-)

If Ilya confirms that is the sole reason, I'm fine with this change.
Please write ChangeLog entry for it.

	Jakub
Ilya Verbin Dec. 26, 2014, 1:22 p.m. UTC | #2
On 22 Dec 12:26, Jakub Jelinek wrote:
> On Mon, Dec 22, 2014 at 12:20:58PM +0100, Thomas Schwinge wrote:
> > What is the reason that you're adding -fopenmp here?  I assume it is that
> > otherwise you'd get tree streaming errors because of different builtins
> > configurations, like this?
> > 
> > If that is the "only" reason to add -fopenmp there, can we then instead
> > do the following?
> > 
> >  gcc/builtins.def                     | 8 ++++++--
> >  gcc/config/i386/intelmic-mkoffload.c | 1 -
> >  2 files changed, 6 insertions(+), 3 deletions(-)
> 
> If Ilya confirms that is the sole reason, I'm fine with this change.
> Please write ChangeLog entry for it.
> 
> 	Jakub

Ok to me.

Thanks,
  -- Ilya
diff mbox

Patch

diff --git gcc/builtins.def gcc/builtins.def
index b70e8e0..08bf62e 100644
--- gcc/builtins.def
+++ gcc/builtins.def
@@ -148,10 +148,13 @@  along with GCC; see the file COPYING3.  If not see
 
 /* Builtin used by the implementation of OpenACC and OpenMP.  Few of these are
    actually implemented in the compiler; most are in libgomp.  */
+/* These builtins also need to be enabled in offloading compilers invoked from
+   mkoffload; for that purpose, we're checking the -foffload-abi flag here.  */
 #undef DEF_GOACC_BUILTIN
 #define DEF_GOACC_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
-	       false, true, true, ATTRS, false, flag_openacc)
+	       false, true, true, ATTRS, false,				\
+	       (flag_openacc || flag_offload_abi != OFFLOAD_ABI_UNSET))
 #undef DEF_GOACC_BUILTIN_COMPILER
 #define DEF_GOACC_BUILTIN_COMPILER(ENUM, NAME, TYPE, ATTRS) \
   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
@@ -160,7 +163,8 @@  along with GCC; see the file COPYING3.  If not see
 #define DEF_GOMP_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
   DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
                false, true, true, ATTRS, false, \
-	       (flag_openmp || flag_tree_parallelize_loops))
+	       (flag_openmp || flag_tree_parallelize_loops \
+		|| flag_offload_abi != OFFLOAD_ABI_UNSET))
 
 /* Builtin used by implementation of Cilk Plus.  Most of these are decomposed
    by the compiler but a few are implemented in libcilkrts.  */ 
diff --git gcc/config/i386/intelmic-mkoffload.c gcc/config/i386/intelmic-mkoffload.c
index c972f56..caf58a1 100644
--- gcc/config/i386/intelmic-mkoffload.c
+++ gcc/config/i386/intelmic-mkoffload.c
@@ -386,7 +386,6 @@  prepare_target_image (const char *target_compiler, int argc, char **argv)
   obstack_init (&argv_obstack);
   obstack_ptr_grow (&argv_obstack, target_compiler);
   obstack_ptr_grow (&argv_obstack, "-xlto");
-  obstack_ptr_grow (&argv_obstack, "-fopenmp");
   obstack_ptr_grow (&argv_obstack, "-shared");
   obstack_ptr_grow (&argv_obstack, "-fPIC");
   obstack_ptr_grow (&argv_obstack, opt1);