25f084d5e0
Process current bucket instead of parent's bucket when starting loop for dominators. The linked paper by Georgiadis suggests in §2.2.3 to process `bucket[w]` when beginning the loop, instead of `bucket[parent[w]]` when finishing it. In the test case, we correctly computed `idom[2] = 0` and `sdom[3] = 1`, but the algorithm returned `idom[3] = 1`, instead of the correct value 0, because of the path 0-7-2-3. This provoked LLVM ICE in https://github.com/rust-lang/rust/pull/111061#issuecomment-1546912112. LLVM checks that SSA assignments dominate uses using its own implementation of Lengauer-Tarjan, and saw case where rustc was breaking the dominance property. r? `@Mark-Simulacrum` |
||
---|---|---|
.. | ||
base_n | ||
binary_search_util | ||
fingerprint | ||
flock | ||
graph | ||
intern | ||
obligation_forest | ||
owned_slice | ||
profiling | ||
sip128 | ||
small_c_str | ||
small_str | ||
snapshot_map | ||
sorted_map | ||
sso | ||
stable_hasher | ||
sync | ||
tagged_ptr | ||
tiny_list | ||
transitive_relation | ||
aligned.rs | ||
atomic_ref.rs | ||
base_n.rs | ||
captures.rs | ||
fingerprint.rs | ||
flat_map_in_place.rs | ||
flock.rs | ||
frozen.rs | ||
functor.rs | ||
fx.rs | ||
hashes.rs | ||
intern.rs | ||
jobserver.rs | ||
lib.rs | ||
macros.rs | ||
marker.rs | ||
memmap.rs | ||
owned_slice.rs | ||
profiling.rs | ||
sharded.rs | ||
sip128.rs | ||
small_c_str.rs | ||
small_str.rs | ||
sorted_map.rs | ||
stable_hasher.rs | ||
stack.rs | ||
steal.rs | ||
svh.rs | ||
sync.rs | ||
tagged_ptr.rs | ||
temp_dir.rs | ||
tiny_list.rs | ||
transitive_relation.rs | ||
unhash.rs | ||
unord.rs | ||
vec_linked_list.rs | ||
work_queue.rs |