https://gcc.gnu.org/g:db2e9a2a46f64b037494e8300c46f2d90a9fa55c
commit r15-3034-gdb2e9a2a46f64b037494e8300c46f2d90a9fa55c Author: Prathamesh Kulkarni <prathame...@nvidia.com> Date: Tue Aug 20 12:54:02 2024 +0530 [optc-save-gen.awk] Fix streaming of command line options for offloading. The patch modifies optc-save-gen.awk to generate if (!lto_stream_offload_p) check before streaming out target-specific opt in cl_optimization_stream_out, when offloading is enabled. Also, it modifies cl_optimization_stream_in to issue an error during build time if accelerator backend defines a target-specific Optimization option. This restriction currently is in place to maintain consistency for streaming of Optimization options between host and accelerator. A proper fix would be to merge target-specific Optimization options for host and accelerators enabled for offloading. gcc/ChangeLog: * optc-save-gen.awk: New array var_target_opt. Use it to generate if (!lto_stream_offload_p) check in cl_optimization_stream_out, and generate a diagnostic with #error if accelerator backend uses Optimization for target-specifc options in cl_optimization_stream_in. Signed-off-by: Prathamesh Kulkarni <prathame...@nvidia.com> Diff: --- gcc/optc-save-gen.awk | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gcc/optc-save-gen.awk b/gcc/optc-save-gen.awk index a3af88e3776..b1289c281e7 100644 --- a/gcc/optc-save-gen.awk +++ b/gcc/optc-save-gen.awk @@ -1307,6 +1307,11 @@ for (i = 0; i < n_opts; i++) { var_opt_optimize_init[n_opt_val] = init; } + # Mark options that are annotated with both Optimization and + # Target so we can avoid streaming out target-specific opts when + # offloading is enabled. + if (flag_set_p("Target", flags[i])) + var_target_opt[n_opt_val] = 1; n_opt_val++; } } @@ -1384,6 +1389,10 @@ for (i = 0; i < n_opt_val; i++) { } else { sgn = "int"; } + # Do not stream out target-specific opts if offloading is + # enabled. + if (var_target_opt[i]) + print " if (!lto_stream_offload_p)" # If applicable, encode the streamed value. if (var_opt_optimize_init[i]) { print " if (" var_opt_optimize_init[i] " > (" var_opt_val_type[i] ") 10)"; @@ -1408,6 +1417,11 @@ print " struct cl_optimization *ptr ATTRIBUTE_UNUSED)" print "{"; for (i = 0; i < n_opt_val; i++) { name = var_opt_val[i] + if (var_target_opt[i]) { + print "#ifdef ACCEL_COMPILER" + print "#error accel compiler cannot define Optimization attribute for target-specific option " name; + print "#else" + } otype = var_opt_val_type[i]; if (otype ~ "^const char \\**$") { print " ptr->" name" = bp_unpack_string (data_in, bp);"; @@ -1427,6 +1441,8 @@ for (i = 0; i < n_opt_val; i++) { print " ptr->" name" ^= " var_opt_optimize_init[i] ";"; } } + if (var_target_opt[i]) + print "#endif" } print " for (size_t i = 0; i < ARRAY_SIZE (ptr->explicit_mask); i++)"; print " ptr->explicit_mask[i] = bp_unpack_value (bp, 64);";