Combine dead-code gencode switch clauses for smaller codegen

For messages with no required fields, SET_MEMOIZED_IS_INITIALIZED is never called, see the early returns above http://google3/third_party/java_src/protobuf/current/java/com/google/protobuf/GeneratedMessageLite.java;l=1526;rcl=684621860 if we return '1'.

So we can put whatever logic in here we want, and we can avoid codegenning the 'return null' instructions.

This should generate slightly smaller dex and oat code.

https://godbolt.org/z/bGWaf68xv

PiperOrigin-RevId: 686323338
pull/18793/head
Mark Hansen 5 months ago committed by Copybara-Service
parent 73d40a036a
commit f63b0ece75
  1. 34
      cmake/dependencies.cmake
  2. 7
      src/google/protobuf/compiler/java/lite/message.cc

@ -1,34 +0,0 @@
# Auto-generated by @//cmake:make_dependencies
#
# This file contains lists of external dependencies based on our Bazel
# config. It should be included from a hand-written CMake file that uses
# them.
#
# Changes to this file will be overwritten based on Bazel definitions.
if(${CMAKE_VERSION} VERSION_GREATER 3.10 OR ${CMAKE_VERSION} VERSION_EQUAL 3.10)
include_guard()
endif()
set(abseil-cpp-version "20230802.1")
set(bazel_skylib-version "1.7.0")
set(jsoncpp-version "1.9.5")
set(rules_cc-version "0.0.13")
set(rules_fuzzing-version "0.5.2")
set(rules_java-version "7.11.1")
set(rules_jvm_external-version "6.3")
set(rules_kotlin-version "1.9.6")
set(rules_license-version "1.0.0")
set(rules_pkg-version "1.0.1")
set(rules_python-version "0.28.0")
set(rules_rust-version "0.51.0")
set(platforms-version "0.0.8")
set(zlib-version "1.3.1")
set(bazel_features-version "1.17.0")
set(rules_shell-version "0.2.0")
set(googletest-version "1.14.0")
set(rules_buf-version "0.3.0")
set(rules_testing-version "0.6.0")
set(rules_proto-version "4.0.0")

@ -399,9 +399,10 @@ void ImmutableMessageLiteGenerator::Generate(io::Printer* printer) {
"case GET_MEMOIZED_IS_INITIALIZED: {\n"
" return (byte) 1;\n"
"}\n"
"case SET_MEMOIZED_IS_INITIALIZED: {\n"
" return null;\n"
"}\n");
"// SET_MEMOIZED_IS_INITIALIZED is never called for this message.\n"
"// So it can do anything. Combine with default case for smaller "
"codegen.\n"
"case SET_MEMOIZED_IS_INITIALIZED:\n");
}
printer->Outdent();

Loading…
Cancel
Save