Lines Matching refs:change

39   return (v_reg == vreg_def) ? prev_value.change : prev_value_high.change;
42 inline void GvnDeadCodeElimination::MIRData::SetPrevChange(int v_reg, uint16_t change) {
46 prev_value.change = change;
48 prev_value_high.change = change;
102 (vreg_data_[v_reg].change != kNPos)
103 ? GetMIRData(vreg_data_[v_reg].change)->vreg_def + 1 == v_reg
106 vreg_data_[v_reg].change = pos;
113 (vreg_data_[v_reg + 1].change != kNPos)
114 ? GetMIRData(vreg_data_[v_reg + 1].change)->vreg_def == v_reg + 1
117 vreg_data_[v_reg + 1].change = pos;
129 DCHECK_EQ(vreg_data_[data->vreg_def].change, NumMIRs() - 1u);
136 DCHECK_EQ(vreg_data_[data->vreg_def + 1].change, NumMIRs() - 1u);
182 uint16_t change = vreg_data_[v_reg].change;
183 if (change == kNPos) {
188 MIRData* data = &mir_data_[change];
191 if (data->prev_value.change == kNPos) {
197 change = data->prev_value.change;
199 if (data->prev_value_high.change == kNPos) {
204 change = data->prev_value_high.change;
260 return vreg_data_[v_reg].change;
271 uint16_t change = LastChange(v_reg);
272 DCHECK_LT(change, mir_data_.size());
273 DCHECK_GE(change, cutoff);
274 bool match_high_word = (mir_data_[change].vreg_def != v_reg);
276 MIRData* data = &mir_data_[change];
283 change = data->prev_value.change;
289 change = data->prev_value_high.change;
291 if (change < cutoff) {
292 change = kNPos;
294 } while (change != kNPos);
295 return change;
299 uint16_t change) const {
301 DCHECK_LT(change, mir_data_.size());
303 uint16_t search_change = vreg_data_[v_reg].change;
304 while (search_change != kNPos && search_change > change) {
318 DCHECK_EQ(vreg_data_[v_reg].change, old_change);
319 vreg_data_[v_reg].change = new_change;
321 // No change in vreg_high_words_.
329 void GvnDeadCodeElimination::VRegChains::RemoveChange(uint16_t change) {
330 MIRData* data = &mir_data_[change];
334 uint16_t next_change = FindFirstChangeAfter(v_reg, change);
336 DCHECK_EQ(vreg_data_[v_reg].change, change);
345 DCHECK_EQ(mir_data_[next_change].PrevChange(v_reg), change);
351 inline bool GvnDeadCodeElimination::VRegChains::IsTopChange(uint16_t change) const {
352 DCHECK_LT(change, mir_data_.size());
353 const MIRData* data = &mir_data_[change];
356 return vreg_data_[data->vreg_def].change == change &&
357 (!data->wide_def || vreg_data_[data->vreg_def + 1u].change == change);
644 DCHECK(move_data->prev_value.change == kNPos || move_data->prev_value.change <= src_change);
645 DCHECK(!move_data->wide_def || move_data->prev_value_high.change == kNPos ||
646 move_data->prev_value_high.change <= src_change);
701 // We can simply change all uses of dest to src.
722 (d->prev_value.change == kNPos || d->prev_value.change <= check_change) &&
724 d->prev_value_high.change == kNPos || d->prev_value_high.change <= check_change)) {
736 // to rename is unused after that change.
766 // define a move source which can be renamed. Therefore we allow the checked change to be the
767 // change before no_uses_all_since_. This has no effect on moves as they never use all vregs.
768 if (data->prev_value.change != kNPos && data->prev_value.change + 1u >= no_uses_all_since_) {
769 MIRData* check_data = vreg_chains_.GetMIRData(data->prev_value.change);
779 if (vreg_chains_.LastChange(check_data->vreg_def) == data->prev_value.change) {
784 if (vreg_chains_.LastChange(data->vreg_def + 1) == data->prev_value.change) {
789 if (data->prev_value_high.change == data->prev_value.change) {
794 RecordPassTryToKillOverwrittenMoveOrMoveSrc(data->prev_value.change);
798 data->prev_value_high.change != kNPos &&
799 data->prev_value_high.change + 1u >= no_uses_all_since_) {
800 MIRData* check_data = vreg_chains_.GetMIRData(data->prev_value_high.change);
808 data->prev_value_high.change) {
813 RecordPassTryToKillOverwrittenMoveOrMoveSrc(data->prev_value_high.change);
832 uint16_t change = vreg_chains_.NumMIRs() - 1u;
835 --change;
836 if (data->prev_value.change == kNPos || data->prev_value.change != change) {
839 data = vreg_chains_.GetMIRData(data->prev_value.change);
854 uint16_t high_change = vreg_chains_.FindFirstChangeAfter(data->vreg_def + 1, change);
864 MIR* phi = RenameSRegDefOrCreatePhi(data->prev_value.change, change, last_data->mir);
865 for (size_t i = 0, count = vreg_chains_.NumMIRs() - change; i != count; ++i) {
881 // changes that we need to kill. Return kNPos if there's a dependent change that must be
883 // a change that defines a dalvik reg that we need to keep (last_change on full success).
886 for (size_t change = first_change; change != last_change; ++change) {
887 MIRData* data = vreg_chains_.GetMIRData(change);
893 if (change < kill_heads_[data->vreg_def]) {
900 if (change < kill_heads_[data->vreg_def + 1]) {
921 vreg_chains_.IsTopChange(change) && !vregs_to_kill_->IsBitSet(data->vreg_def) &&
924 // This is a top change but neither unnecessary nor one of the top kill changes.
925 return change;
929 changes_to_kill_.push_back(change);