From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id 1A116382EA3B; Thu, 27 Oct 2022 08:42:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1A116382EA3B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1666860153; bh=/sFKoQTcT5+PaDvGYAnAu3//Y6l6T8OkSyV4v84yg8I=; h=From:To:Subject:Date:From; b=Kz4lbcNWZQyj8xugANOfNXVeWnYMq5+X1U8glt8kpQtQUCvr5nrHzC8iW4PvE6eJ+ kesuKKjqoruGLxjxi9d8qvx0UR8cnnhdOM21eqL+sPURvjFEqfzeMgkgz5eecr4n3t bZZHvn/1SybrY/HlIWB76IYI0VQKaNuNmEt6QKs8= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-3524] options: Clarify 'Init' option property usage for streaming optimization X-Act-Checkin: gcc X-Git-Author: Thomas Schwinge X-Git-Refname: refs/heads/master X-Git-Oldrev: be6c75547385c69706370f4e792b04295f708a5a X-Git-Newrev: 9119431bc1563217c7c770035b0456d1e2bc596d Message-Id: <20221027084233.1A116382EA3B@sourceware.org> Date: Thu, 27 Oct 2022 08:42:33 +0000 (GMT) List-Id: https://gcc.gnu.org/g:9119431bc1563217c7c770035b0456d1e2bc596d commit r13-3524-g9119431bc1563217c7c770035b0456d1e2bc596d Author: Thomas Schwinge Date: Thu Mar 31 12:06:29 2022 +0200 options: Clarify 'Init' option property usage for streaming optimization This clarifies commit 95db7e9afe57ca1c269d46baa2accced004e5c74 "options, lto: Optimize streaming of optimization nodes". No functional change; no change in generated files. gcc/ * optc-save-gen.awk: Clarify 'Init' option property usage for streaming optimization. Diff: --- gcc/optc-save-gen.awk | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/gcc/optc-save-gen.awk b/gcc/optc-save-gen.awk index 49065ced0b3..2b8557f41ad 100644 --- a/gcc/optc-save-gen.awk +++ b/gcc/optc-save-gen.awk @@ -1291,7 +1291,22 @@ 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]); + + # If applicable, optimize streaming for the common case that + # the current value is unchanged from the 'Init' value: + # XOR-encode it so that we stream value zero. + # Not handling non-parameters as those really generally don't + # have large initializers. + # Not handling enums as we don't know if '(enum ...) 10' is + # even valid (see synthesized 'if' conditionals below). + if (flag_set_p("Param", flags[i]) \ + && !(otype ~ "^enum ")) { + # Those without 'Init' are zero-initialized and thus + # already encoded ideally. + init = opt_args("Init", flags[i]) + var_opt_optimize_init[n_opt_val] = init; + } + n_opt_val++; } } @@ -1369,9 +1384,10 @@ for (i = 0; i < n_opt_val; i++) { } 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] ");"; + # 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)"; + print " bp_pack_var_len_" sgn " (bp, ptr->" name" ^ " var_opt_optimize_init[i] ");"; print " else"; print " bp_pack_var_len_" sgn " (bp, ptr->" name");"; } else { @@ -1405,9 +1421,10 @@ for (i = 0; i < n_opt_val; i++) { 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] ";"; + # If applicable, decode the streamed value. + if (var_opt_optimize_init[i]) { + print " if (" var_opt_optimize_init[i] " > (" var_opt_val_type[i] ") 10)"; + print " ptr->" name" ^= " var_opt_optimize_init[i] ";"; } } }