Real fix for 064
The recent ssa cleanup CL surfaced a somewhat subtle bug in
live register tracking. The code generation register utilities
attempt to remember and reuse live Dalvik register values for future
use. This remembering takes place in the storeValueXX() code.
For this to work, though, storeValue may only be called once during
the compilation of any single Dalvik instruction.
However, the code generation routine for CONST_CLASS included a
somewhat complicated slow path with iternal branches and two
generated "storeValue" locations. This resulted in downstream
code expecting to find a live value in the wrong place.
This fix is to note this special case and do a "clobber" on the ssa name.
This CL also includes some sanity checking code that can detect
multiple calls to storeValue during one intruction compilation to
try to catch this situation in the future.
6 files changed