OSDN Git Service

Quick: Fix DCE, clear high word flag in RemoveChange().
authorVladimir Marko <vmarko@google.com>
Tue, 12 May 2015 21:27:21 +0000 (22:27 +0100)
committerVladimir Marko <vmarko@google.com>
Tue, 12 May 2015 21:42:18 +0000 (22:42 +0100)
Bug: 20640451

(cherry picked from commit ade58e14582c6ab81978e9cfcbbf5e54cc23fe18)

Change-Id: I8ac7fea3d9d2a434ee79fb917e68a4dc96e5482f

compiler/dex/gvn_dead_code_elimination.cc

index 6e1e414..915fbcd 100644 (file)
@@ -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 {