On 13 Oct 12:19, Jakub Jelinek wrote:
> On Sat, Oct 11, 2014 at 06:49:00PM +0400, Ilya Verbin wrote:
> > It introduces 2 new options:
> > 1. -foffload=<targets>=<options>
> > By default, GCC will build offload images for all offload targets
> > specified
> > in configure, with non-target-specific options passed to host compiler.
> > This option is used to control offload targets and options for them.
> >
> > It can be used in a few ways:
> > * -foffload=disable
> > Tells GCC to disable offload support.
> > OpenMP target regions will be run in host fallback mode.
> > * -foffload=<targets>
> > Tells GCC to build offload images for <targets>.
> > They will be built with non-target-specific options passed to host
> > compiler.
> > * -foffload=<options>
> > Tells GCC to build offload images for all targets specified in configure.
> > They will be built with non-target-specific options passed to host
> > compiler
> > plus <options>.
> > * -foffload=<targets>=<options>
> > Tells GCC to build offload images for <targets>.
> > They will be built with non-target-specific options passed to host
> > compiler
> > plus <options>.
> >
> > Options specified by -foffload are appended to the end of option set, so in
> > case
> > of option conflicts they have more priority.
>
> This looks good to me.
>
> > 2. -foffload-abi=[lp64|ilp32]
> > This option is supposed to tell mkoffload (and offload compiler) which
> > ABI is
> > used in streamed GIMPLE. This option is desirable, because host and offload
> > compilers must have the same ABI. The option is generated by the host
> > compiler
> > automatically, it should not be specified by user.
>
> But I'd like to understand why is this one needed.
> Why should the compilers care? Aggregates layout and alignment of
> integral/floating types must match between host and offload compilers, sure,
> but isn't that something streamed already in the LTO bytecode?
> Or is LTO streamer not streaming some types like long_type_node?
> I'd expect if host and offload compiler disagree on long type size that
> you'd just use a different integral type with the same size as long on the
> host.
> Different sized pointers are of course a bigger problem, but can't you just
> error out on that during reading of the LTO, or even handle it (just use
> some integral type for when is the pointer stored in memory, and just
> convert to pointer after reads from memory, and convert back before storing
> to memory). Erroring out during LTO streaming in sounds just fine to me
> though.
Here is an additional check. Is the whole 'option handling' patch OK?
Thanks,
-- Ilya
diff --git a/gcc/opts.c b/gcc/opts.c
index 9b2e1af..d1a626c 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -1732,6 +1732,13 @@ common_handle_option (struct gcc_options *opts,
/* Deferred. */
break;
+#ifndef ACCEL_COMPILER
+ case OPT_foffload_abi_:
+ error_at (loc, "-foffload-abi option can be specified only for "
+ "offload compiler");
+ break;
+#endif
+
case OPT_fpack_struct_:
if (value <= 0 || (value & (value - 1)) || value > 16)
error_at (loc,