diff options
author | Vladimir Marko <vmarko@google.com> | 2015-05-12 22:27:21 +0100 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2015-05-12 22:42:18 +0100 |
commit | cc61340df7aa6b7a1ed2436049304b6a1604384f (patch) | |
tree | 3043ae8194230a0b6e0e50c08fe16feac9758da0 /compiler/dex | |
parent | 4dece9ca3faba8f6b15019e3d19c6328b78608b8 (diff) | |
download | art-cc61340df7aa6b7a1ed2436049304b6a1604384f.zip art-cc61340df7aa6b7a1ed2436049304b6a1604384f.tar.gz art-cc61340df7aa6b7a1ed2436049304b6a1604384f.tar.bz2 |
Quick: Fix DCE, clear high word flag in RemoveChange().
Bug: 20640451
(cherry picked from commit ade58e14582c6ab81978e9cfcbbf5e54cc23fe18)
Change-Id: I8ac7fea3d9d2a434ee79fb917e68a4dc96e5482f
Diffstat (limited to 'compiler/dex')
-rw-r--r-- | compiler/dex/gvn_dead_code_elimination.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/dex/gvn_dead_code_elimination.cc b/compiler/dex/gvn_dead_code_elimination.cc index 6e1e414..915fbcd 100644 --- a/compiler/dex/gvn_dead_code_elimination.cc +++ b/compiler/dex/gvn_dead_code_elimination.cc @@ -340,7 +340,8 @@ void GvnDeadCodeElimination::VRegChains::RemoveChange(uint16_t change) { DCHECK_EQ(vreg_high_words_.IsBitSet(v_reg), v_reg == data->vreg_def + 1); if (data->vreg_def == v_reg && data->low_def_over_high_word) { vreg_high_words_.SetBit(v_reg); - } else if (data->vreg_def != v_reg && data->high_def_over_low_word) { + } else if (data->vreg_def != v_reg && + (data->high_def_over_low_word || data->prev_value_high.value == kNoValue)) { vreg_high_words_.ClearBit(v_reg); } } else { |