summaryrefslogtreecommitdiff
path: root/runtime/verifier/instruction_flags.h
diff options
context:
space:
mode:
author Ian Rogers <irogers@google.com> 2013-07-23 18:16:21 -0700
committer Ian Rogers <irogers@google.com> 2013-07-23 18:36:24 -0700
commitc0d120a0b1389f1f402d13e20b9e4abd9ab7cd95 (patch)
treefefb6e74d0bf3e4a48a6e0f58ca7a11ce3f0a098 /runtime/verifier/instruction_flags.h
parentdb06306be76bcea3aabab2cecfb16ae2af542801 (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.h17
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.