diff options
author | 2013-07-23 18:16:21 -0700 | |
---|---|---|
committer | 2013-07-23 18:36:24 -0700 | |
commit | c0d120a0b1389f1f402d13e20b9e4abd9ab7cd95 (patch) | |
tree | fefb6e74d0bf3e4a48a6e0f58ca7a11ce3f0a098 /runtime/verifier/instruction_flags.h | |
parent | db06306be76bcea3aabab2cecfb16ae2af542801 (diff) |
Remove non-live vregs from GC map on return.
Mark registers going into a return as conflict/bottom so that they aren't
considered for GC maps and deoptimization.
Bug 4191345.
Change-Id: I8af6c21824b6459788852be5417849e8ef999bcb
Diffstat (limited to 'runtime/verifier/instruction_flags.h')
-rw-r--r-- | runtime/verifier/instruction_flags.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/runtime/verifier/instruction_flags.h b/runtime/verifier/instruction_flags.h index 9b2e595b9d..e50ba13932 100644 --- a/runtime/verifier/instruction_flags.h +++ b/runtime/verifier/instruction_flags.h @@ -93,6 +93,21 @@ class InstructionFlags { return IsVisited() || IsChanged(); } + void SetReturn() { + flags_ |= 1 << kReturn; + } + void ClearReturn() { + flags_ &= ~(1 << kReturn); + } + bool IsReturn() const { + return (flags_ & (1 << kReturn)) != 0; + } + + void SetCompileTimeInfoPointAndReturn() { + SetCompileTimeInfoPoint(); + SetReturn(); + } + std::string ToString() const; private: @@ -108,6 +123,8 @@ class InstructionFlags { kBranchTarget = 3, // Location of interest to the compiler for GC maps and verifier based method sharpening. kCompileTimeInfoPoint = 4, + // A return instruction. + kReturn = 5, }; // Size of instruction in code units. |