| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 ASSERT(result->IsEmpty()); | 296 ASSERT(result->IsEmpty()); |
| 297 // Find the last interval that ends before the position. If the | 297 // Find the last interval that ends before the position. If the |
| 298 // position is contained in one of the intervals in the chain, we | 298 // position is contained in one of the intervals in the chain, we |
| 299 // split that interval and use the first part. | 299 // split that interval and use the first part. |
| 300 UseInterval* current = FirstSearchIntervalForPosition(position); | 300 UseInterval* current = FirstSearchIntervalForPosition(position); |
| 301 | 301 |
| 302 // If the split position coincides with the beginning of a use interval | 302 // If the split position coincides with the beginning of a use interval |
| 303 // we need to split use positons in a special way. | 303 // we need to split use positons in a special way. |
| 304 bool split_at_start = false; | 304 bool split_at_start = false; |
| 305 | 305 |
| 306 if (current->start().Value() == position.Value()) { |
| 307 // When splitting at start we need to locate the previous use interval. |
| 308 current = first_interval_; |
| 309 } |
| 310 |
| 306 while (current != NULL) { | 311 while (current != NULL) { |
| 307 if (current->Contains(position)) { | 312 if (current->Contains(position)) { |
| 308 current->SplitAt(position); | 313 current->SplitAt(position); |
| 309 break; | 314 break; |
| 310 } | 315 } |
| 311 UseInterval* next = current->next(); | 316 UseInterval* next = current->next(); |
| 312 if (next->start().Value() >= position.Value()) { | 317 if (next->start().Value() >= position.Value()) { |
| 313 split_at_start = (next->start().Value() == position.Value()); | 318 split_at_start = (next->start().Value() == position.Value()); |
| 314 break; | 319 break; |
| 315 } | 320 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 345 } | 350 } |
| 346 | 351 |
| 347 // Partition original use positions to the two live ranges. | 352 // Partition original use positions to the two live ranges. |
| 348 if (use_before != NULL) { | 353 if (use_before != NULL) { |
| 349 use_before->next_ = NULL; | 354 use_before->next_ = NULL; |
| 350 } else { | 355 } else { |
| 351 first_pos_ = NULL; | 356 first_pos_ = NULL; |
| 352 } | 357 } |
| 353 result->first_pos_ = use_after; | 358 result->first_pos_ = use_after; |
| 354 | 359 |
| 360 // Discard cached iteration state. It might be pointing |
| 361 // to the use that no longer belongs to this live range. |
| 362 last_processed_use_ = NULL; |
| 363 current_interval_ = NULL; |
| 364 |
| 355 // Link the new live range in the chain before any of the other | 365 // Link the new live range in the chain before any of the other |
| 356 // ranges linked from the range before the split. | 366 // ranges linked from the range before the split. |
| 357 result->parent_ = (parent_ == NULL) ? this : parent_; | 367 result->parent_ = (parent_ == NULL) ? this : parent_; |
| 358 result->next_ = next_; | 368 result->next_ = next_; |
| 359 next_ = result; | 369 next_ = result; |
| 360 | 370 |
| 361 #ifdef DEBUG | 371 #ifdef DEBUG |
| 362 Verify(); | 372 Verify(); |
| 363 result->Verify(); | 373 result->Verify(); |
| 364 #endif | 374 #endif |
| (...skipping 1749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2114 LiveRange* current = live_ranges()->at(i); | 2124 LiveRange* current = live_ranges()->at(i); |
| 2115 if (current != NULL) current->Verify(); | 2125 if (current != NULL) current->Verify(); |
| 2116 } | 2126 } |
| 2117 } | 2127 } |
| 2118 | 2128 |
| 2119 | 2129 |
| 2120 #endif | 2130 #endif |
| 2121 | 2131 |
| 2122 | 2132 |
| 2123 } } // namespace v8::internal | 2133 } } // namespace v8::internal |
| OLD | NEW |