From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by sourceware.org (Postfix) with ESMTP id 08E03386101B for ; Sun, 13 Sep 2020 08:33:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 08E03386101B 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-275--9DDAioFPxOx_u88BHiyBg-1; Sun, 13 Sep 2020 04:33:34 -0400 X-MC-Unique: -9DDAioFPxOx_u88BHiyBg-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C3B6B2FD0F; Sun, 13 Sep 2020 08:33:32 +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 CB4EC27BC1; Sun, 13 Sep 2020 08:33:31 +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 08D8XS95022600; Sun, 13 Sep 2020 10:33:28 +0200 Received: (from jakub@localhost) by tucnak.zalov.cz (8.15.2/8.15.2/Submit) id 08D8XRDs022599; Sun, 13 Sep 2020 10:33:27 +0200 Date: Sun, 13 Sep 2020 10:33:27 +0200 From: Jakub Jelinek To: Richard Biener , "Joseph S. Myers" , Jan Hubicka Cc: gcc-patches@gcc.gnu.org Subject: [PATCH] options, lto: Optimize streaming of optimization nodes Message-ID: <20200913083327.GG21814@tucnak> Reply-To: Jakub Jelinek MIME-Version: 1.0 User-Agent: Mutt/1.11.3 (2019-02-01) X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 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, 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: Sun, 13 Sep 2020 08:33:38 -0000 Hi! When working on the previous patch, I've noticed that all cl_optimization fields appart from strings are streamed with bp_pack_value (..., 64); so we waste quite a lot of space, given that many of the options are just booleans or char options and there are 450-ish of them. Fixed by streaming the number of bits the corresponding fields have. While for char fields we have also range information, except for 3 it is either -128, 127 or 0, 255, so it didn't seem worth it to bother with using range-ish packing. Bootstrapped/regtested on x86_64-linux, i686-linux, armv7hl-linux-gnueabi, aarch64-linux, powerpc64le-linux and lto bootstrapped on x86_64-linux, ok for trunk? 2020-09-13 Jakub Jelinek * optc-save-gen.awk: In cl_optimization_stream_out and cl_optimization_stream_in, stream int, enum, short and char variables with corresponding HOST_BITS_PER_* rather than hardcoded 64. --- gcc/optc-save-gen.awk.jj 2020-09-11 17:38:31.524230167 +0200 +++ gcc/optc-save-gen.awk 2020-09-11 22:12:59.948580827 +0200 @@ -1252,13 +1252,23 @@ print "cl_optimization_stream_out (struc print " struct bitpack_d *bp,"; print " struct cl_optimization *ptr)"; 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 " bp_pack_string (ob, bp, ptr->" name", true);"; - else - print " bp_pack_value (bp, ptr->" name", 64);"; +for (i = 0; i < n_opt_other; i++) { + print " bp_pack_value (bp, ptr->x_" var_opt_other[i] ", HOST_BITS_PER_WIDE_INT);"; +} +for (i = 0; i < n_opt_int; i++) { + print " bp_pack_value (bp, static_cast(ptr->x_" var_opt_int[i] "), HOST_BITS_PER_INT);"; +} +for (i = 0; i < n_opt_enum; i++) { + print " bp_pack_value (bp, static_cast(ptr->x_" var_opt_enum[i] "), HOST_BITS_PER_INT);"; +} +for (i = 0; i < n_opt_short; i++) { + print " bp_pack_value (bp, static_cast(ptr->x_" var_opt_short[i] "), HOST_BITS_PER_SHORT);"; +} +for (i = 0; i < n_opt_char; i++) { + print " bp_pack_value (bp, static_cast(ptr->x_" var_opt_char[i] "), HOST_BITS_PER_CHAR);"; +} +for (i = 0; i < n_opt_string; i++) { + print " bp_pack_string (ob, bp, ptr->x_" var_opt_string[i] ", true);"; } 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);"; @@ -1271,17 +1281,26 @@ print "cl_optimization_stream_in (struct print " struct bitpack_d *bp ATTRIBUTE_UNUSED,"; print " struct cl_optimization *ptr ATTRIBUTE_UNUSED)"; 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");"; - } - else - print " ptr->" name" = (" var_opt_val_type[i] ") bp_unpack_value (bp, 64);"; +for (i = 0; i < n_opt_other; i++) { + print " ptr->x_" var_opt_other[i] " = bp_unpack_value (bp, HOST_BITS_PER_WIDE_INT);"; +} +for (i = 0; i < n_opt_int; i++) { + print " ptr->x_" var_opt_int[i] " = bp_unpack_value (bp, HOST_BITS_PER_INT);"; +} +for (i = 0; i < n_opt_enum; i++) { + print " ptr->x_" var_opt_enum[i] " = static_cast<" var_opt_enum_type[i] ">(bp_unpack_value (bp, HOST_BITS_PER_INT));"; +} +for (i = 0; i < n_opt_short; i++) { + print " ptr->x_" var_opt_short[i] " = bp_unpack_value (bp, HOST_BITS_PER_SHORT);"; +} +for (i = 0; i < n_opt_char; i++) { + print " ptr->x_" var_opt_char[i] " = bp_unpack_value (bp, HOST_BITS_PER_CHAR);"; +} +for (i = 0; i < n_opt_string; i++) { + name = var_opt_string[i]; + print " ptr->x_" name" = bp_unpack_string (data_in, bp);"; + print " if (ptr->x_" name")"; + print " ptr->x_" name" = xstrdup (ptr->x_" name");"; } 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