In globalDefinitions.cpp from the first day T_ADDRESS size is defined as 'int' size: int type2aelembytes[T_CONFLICT+1] = { ... T_OBJECT_aelem_bytes, // T_OBJECT = 12, T_ARRAY_aelem_bytes, // T_ARRAY = 13, 0, // T_VOID = 14, T_INT_aelem_bytes, // T_ADDRESS = 15, 0 // T_CONFLICT = 16, }; I think, this is because T_OBJECT_aelem_bytes was also 4 when it was created. T_OBJECT and T_ARRAY sizes were fixed when VM was changed to support 64 bits oops. The incorrect T_ADDRESS size in 64-bits VM produces whong size of StoreP nodes attached to Initialize: virtual int memory_size() const { return type2aelembytes[memory_type()]; } As result EA can't find stores through Initialize node. The current code which use InitializeNode::find_captured_store() may also be broken. I think, it works now because LoadP and StoreP has the same T_ADDRESS type.
|