diff options
author | Vladimir Marko <vmarko@google.com> | 2015-03-20 12:47:30 +0000 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2015-03-20 21:58:07 +0000 |
commit | 767c752fddc64e280dba507457e4f06002b5f678 (patch) | |
tree | 3c7ee2333290b6d634e3cb5e0ab49d6cbee9c096 /compiler/dex/quick/mips/codegen_mips.h | |
parent | 0b40ecf156e309aa17c72a28cd1b0237dbfb8746 (diff) | |
download | android_art-767c752fddc64e280dba507457e4f06002b5f678.tar.gz android_art-767c752fddc64e280dba507457e4f06002b5f678.tar.bz2 android_art-767c752fddc64e280dba507457e4f06002b5f678.zip |
Quick: Create GC map based on compiler data.
The Quick compiler and verifier sometimes disagree on dalvik
register types (fp/core/ref) for 0/null constants and merged
registers involving 0/null constants. Since the verifier is
more lenient it can mark a register as a reference for GC
where Quick considers it a floating point register or a dead
register (which would have a ref/fp conflict if not dead).
If the compiler used an fp register to hold the zero value,
the core register or stack location used by GC based on the
verifier data can hold an invalid value.
Previously, as a workaround we stored the fp zero value also
in the stack location or core register where GC would look
for it. This wasn't precise and may have missed some cases.
To fix this properly, we now generate GC maps based on the
compiler's notion of references if register promotion is
enabled.
Bug: https://code.google.com/p/android/issues/detail?id=147187
Change-Id: Id3a2f863b16bdb8969df7004c868773084aec421
Diffstat (limited to 'compiler/dex/quick/mips/codegen_mips.h')
0 files changed, 0 insertions, 0 deletions