-
Seth Brenith authored
Currently, when accessing a field that doesn't have a constant offset, Torque emits code to compute each preceding indexed field's length and add them all together. This works, but such code can get super long if a class has many indexed fields, and especially if the length expressions of some indexed fields refer to other indexed fields. We'd like the output of the new C++ backend to be short enough to go in inline headers which will be included in many compilation units. This change attempts to reorganize the code so that the computation of each length expression can only be emitted exactly once. This only shortens the generated C++ code; the resulting TurboFan output should be identical. There are two main parts: 1. For each indexed field, we already generate a macro that can get a Slice referring to that field. Update these macros to not use the dot operator on that field. Using the dot operator on the predecessor field is allowed. 2. Update the dot operator for indexed fields to emit a call to the macro from step 1. This sort of reverses the dependency added by the previous change https://crrev.com/c/2429566 : rather than the slice macros depending on the dot operator, this change makes the dot operator depend on the slice macros. The overall torque_generated directory shrinks by under 1% with this change, but the runtime_macros.cc file (which should eventually become inline headers) shrinks by 24%. More to the point, this change keeps runtime_macros.cc from ballooning out of control when we add a work-in-progress Torque definition for ScopeInfo ( https://crrev.com/c/2357758 ). Bug: v8:7793 Change-Id: I989dda9c3666f1a49281fef03acb35baebb5b63a Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2432070Reviewed-by: Tobias Tebbi <tebbi@chromium.org> Commit-Queue: Seth Brenith <seth.brenith@microsoft.com> Cr-Commit-Position: refs/heads/master@{#70325}
73a8eded