On Tue, 21 Apr 2026 16:45:55 GMT, Matias Saavedra Silva <[email protected]> 
wrote:

> Currently, scalarized calling conventions used by the compilers are 
> recalculated each runtime even though adapters can be stored in the AOT 
> cache. This change archives `_sig_cc` and `_sig_cc_ro` to avoid recomputing 
> them even when the adapter can be restored from the AOT archive. Verified 
> with tier 1-5 tests.
> 
> ---------
> - [x] I confirm that I make this contribution in accordance with the [OpenJDK 
> Interim AI Policy](https://openjdk.org/legal/ai).

Since you are archiving SigEntry, I think it's a good time to reduce its size 
and also make its contents deterministic. It currently looks like this:


(gdb) ptype/o SigEntry
/* offset      |    size */  type = class SigEntry {
                             public:
/*      0      |       1 */    BasicType _bt;
/* XXX  3-byte hole      */
/*      4      |       4 */    int _offset;
/*      8      |       8 */    Symbol *_name;
/*     16      |       1 */    bool _null_marker;
/*     17      |       1 */    bool _vt_oop;
/* XXX  6-byte padding   */


How about:


class SigEntry {
 public:
  BasicType _bt;      // Basic type of the argument
  bool _null_marker;  // Is it a null marker? For printing
  bool _vt_oop;       // Is it a possibly null buffer
  bool _unused;       // Set to 0 for deterministic CDS contents
  int _offset;        // Offset of the field in its value class holder for 
scalarized arguments (-1 otherwise). Used for packing and unpacking.
  Symbol* _name;      // Symbol for printing

  SigEntry()
    : _bt(T_ILLEGAL), _null_marker(false), _vt_oop(false), _unused(false),  
_offset(-1), _name(nullptr){}
   ...

-------------

PR Comment: https://git.openjdk.org/valhalla/pull/2348#issuecomment-4293174848

Reply via email to