On Mon, Sep 14, 2020 at 11:47:56AM +0200, Jakub Jelinek via Gcc-patches wrote:
> On Mon, Sep 14, 2020 at 11:02:26AM +0200, Jan Hubicka wrote:
> > Especially for the new param machinery, most of streamed values are
> > probably going to be the default values.  Perhaps somehow we could
> > stream them more effectively.
> 
> Ah, that seems like a good idea, that brings further savings, the size
> goes down from 574 bytes to 273 bytes, i.e. less than half.
> Here is an updated version that does that.  Not trying to handle
> enums because the code doesn't know if (enum ...) 10 is even valid,
> similarly non-parameters because those really generally don't have large
> initializers, and params without Init (those are 0 initialized and thus
> don't need to be handled).

Here is an updated version of that on top of what has been committed.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2020-09-16  Jakub Jelinek  <ja...@redhat.com>

        * optc-save-gen.awk: Initialize var_opt_init.  In
        cl_optimization_stream_out for params with default values larger than
        10, xor the default value with the actual parameter value.  In
        cl_optimization_stream_in repeat the above xor.

--- gcc/optc-save-gen.awk.jj    2020-09-14 10:51:54.493740942 +0200
+++ gcc/optc-save-gen.awk       2020-09-14 11:39:39.441602594 +0200
@@ -1186,6 +1186,7 @@ for (i = 0; i < n_opts; i++) {
                var_opt_val_type[n_opt_val] = otype;
                var_opt_val[n_opt_val] = "x_" name;
                var_opt_hash[n_opt_val] = flag_set_p("Optimization", flags[i]);
+               var_opt_init[n_opt_val] = opt_args("Init", flags[i]);
                n_opt_val++;
        }
 }
@@ -1257,10 +1258,21 @@ for (i = 0; i < n_opt_val; i++) {
        otype = var_opt_val_type[i];
        if (otype ~ "^const char \\**$")
                print "  bp_pack_string (ob, bp, ptr->" name", true);";
-       else if (otype ~ "^unsigned")
-               print "  bp_pack_var_len_unsigned (bp, ptr->" name");";
-       else
-               print "  bp_pack_var_len_int (bp, ptr->" name");";
+       else {
+               if (otype ~ "^unsigned") {
+                       sgn = "unsigned";
+               } else {
+                       sgn = "int";
+               }
+               if (name ~ "^x_param" && !(otype ~ "^enum ") && 
var_opt_init[i]) {
+                       print "  if (" var_opt_init[i] " > (" 
var_opt_val_type[i] ") 10)";
+                       print "    bp_pack_var_len_" sgn " (bp, ptr->" name" ^ 
" var_opt_init[i] ");";
+                       print "  else";
+                       print "    bp_pack_var_len_" sgn " (bp, ptr->" name");";
+               } else {
+                       print "  bp_pack_var_len_" sgn " (bp, ptr->" name");";
+               }
+       }
 }
 print "  for (size_t i = 0; i < sizeof (ptr->explicit_mask) / sizeof 
(ptr->explicit_mask[0]); i++)";
 print "    bp_pack_value (bp, ptr->explicit_mask[i], 64);";
@@ -1281,10 +1293,18 @@ for (i = 0; i < n_opt_val; i++) {
                print "  if (ptr->" name")";
                print "    ptr->" name" = xstrdup (ptr->" name");";
        }
-       else if (otype ~ "^unsigned")
-               print "  ptr->" name" = (" var_opt_val_type[i] ") 
bp_unpack_var_len_unsigned (bp);";
-       else
-               print "  ptr->" name" = (" var_opt_val_type[i] ") 
bp_unpack_var_len_int (bp);";
+       else {
+               if (otype ~ "^unsigned") {
+                       sgn = "unsigned";
+               } else {
+                       sgn = "int";
+               }
+               print "  ptr->" name" = (" var_opt_val_type[i] ") 
bp_unpack_var_len_" sgn " (bp);";
+               if (name ~ "^x_param" && !(otype ~ "^enum ") && 
var_opt_init[i]) {
+                       print "  if (" var_opt_init[i] " > (" 
var_opt_val_type[i] ") 10)";
+                       print "    ptr->" name" ^= " var_opt_init[i] ";";
+               }
+       }
 }
 print "  for (size_t i = 0; i < sizeof (ptr->explicit_mask) / sizeof 
(ptr->explicit_mask[0]); i++)";
 print "    ptr->explicit_mask[i] = bp_unpack_value (bp, 64);";


        Jakub

Reply via email to