diff options
author | Serguei Katkov <serguei.i.katkov@intel.com> | 2014-09-05 18:37:22 +0700 |
---|---|---|
committer | Serguei Katkov <serguei.i.katkov@intel.com> | 2014-09-11 10:46:15 +0700 |
commit | 589e046c483ca0dbee6c28fb617997f43ee28b94 (patch) | |
tree | 347ba057be243341f5e5094071149a712121d1f7 /compiler/dex/quick/codegen_util.cc | |
parent | b9620f305c79914f5159cf9279a7ccd173af1186 (diff) | |
download | art-589e046c483ca0dbee6c28fb617997f43ee28b94.tar.gz art-589e046c483ca0dbee6c28fb617997f43ee28b94.tar.bz2 art-589e046c483ca0dbee6c28fb617997f43ee28b94.zip |
Slow path should break def tracking
Slow path usually results in invocation of runtime. Runtime
should be ensured that all VR on stack are up to date.
To do this we reset def tracking system at the moment of
adding slow path and as a result actual writes to stack
for all VRs will not be optimized away.
The decision is conservative to be safe however
probably not all runtime calls can potentially require VRs
to be on stack. In this case we will need insert reset def
tracking in all places where dangerous slow path is used.
Change-Id: I2cb7698a12c17354060fdbb944e1da1fb922c23b
Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
Diffstat (limited to 'compiler/dex/quick/codegen_util.cc')
-rw-r--r-- | compiler/dex/quick/codegen_util.cc | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/compiler/dex/quick/codegen_util.cc b/compiler/dex/quick/codegen_util.cc index 6d8f28849e..d90bce119a 100644 --- a/compiler/dex/quick/codegen_util.cc +++ b/compiler/dex/quick/codegen_util.cc @@ -1224,6 +1224,7 @@ LIR *Mir2Lir::OpCmpMemImmBranch(ConditionCode cond, RegStorage temp_reg, RegStor void Mir2Lir::AddSlowPath(LIRSlowPath* slowpath) { slow_paths_.Insert(slowpath); + ResetDefTracking(); } void Mir2Lir::LoadCodeAddress(const MethodReference& target_method, InvokeType type, |