From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id C782B3857800 for ; Mon, 14 Sep 2020 09:48:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org C782B3857800 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-441-nmg1F-iHO3eyW4n8BriY_w-1; Mon, 14 Sep 2020 05:48:16 -0400 X-MC-Unique: nmg1F-iHO3eyW4n8BriY_w-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 40D9F107464A; Mon, 14 Sep 2020 09:48:15 +0000 (UTC) Received: from tucnak.zalov.cz (ovpn-113-252.ams2.redhat.com [10.36.113.252]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4888061100; Mon, 14 Sep 2020 09:48:12 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.15.2/8.15.2) with ESMTP id 08E9m7c7031517; Mon, 14 Sep 2020 11:48:08 +0200 Received: (from jakub@localhost) by tucnak.zalov.cz (8.15.2/8.15.2/Submit) id 08E9luHx031515; Mon, 14 Sep 2020 11:47:56 +0200 Date: Mon, 14 Sep 2020 11:47:56 +0200 From: Jakub Jelinek To: Richard Biener , Jan Hubicka Cc: gcc-patches@gcc.gnu.org, "Joseph S. Myers" Subject: Re: [PATCH] options, lto: Optimize streaming of optimization nodes Message-ID: <20200914094756.GV21814@tucnak> Reply-To: Jakub Jelinek References: <20200913083327.GG21814@tucnak> <20200914070048.GT21814@tucnak> <20200914084810.GU21814@tucnak> <20200914090226.GA27871@kam.mff.cuni.cz> MIME-Version: 1.0 In-Reply-To: <20200914090226.GA27871@kam.mff.cuni.cz> User-Agent: Mutt/1.11.3 (2019-02-01) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0.002 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Sep 2020 09:48:22 -0000 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). 2020-09-14 Jakub Jelinek * optc-save-gen.awk: Initialize var_opt_init. In cl_optimization_stream_out use bp_pack_var_len_{int,unsigned} instead of bp_pack_value and for params with default values larger than 10, xor the default value with the actual parameter value. In cl_optimization_stream_in use bp_unpack_var_len_{int,unsigned} instead of bp_unpack_value and repeat the above xor. Formatting fix. --- 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,8 +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 - print " bp_pack_value (bp, ptr->" name", 64);"; + 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);"; @@ -1274,14 +1288,23 @@ print "{"; for (i = 0; i < n_opt_val; i++) { name = var_opt_val[i] otype = var_opt_val_type[i]; - if (otype ~ "^const char \\**$") - { - print " ptr->" name" = bp_unpack_string (data_in, bp);"; - print " if (ptr->" name")"; - print " ptr->" name" = xstrdup (ptr->" name");"; + if (otype ~ "^const char \\**$") { + print " ptr->" name" = bp_unpack_string (data_in, bp);"; + print " if (ptr->" name")"; + print " ptr->" name" = xstrdup (ptr->" name");"; + } + 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] ";"; + } } - else - print " ptr->" name" = (" var_opt_val_type[i] ") bp_unpack_value (bp, 64);"; } 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