Richard, OK, all that I've gotten so far out of the dump file is that the name of "_920" is just something sccvn concocted and wasn't something I accidentally caused.
That still leaves me with the question of what is going on. Here's all the interesting bits of the dumpfile concerning dedangled_864: : dedangled_865 = *bea_43 + 64 dedangled_863 = *bea_43 + 128 dedangled_864 = *bea_43 + 64 dedangled_866 = *bea_43 + 128 dedangled_867 = dedangled_863 dedangled_867 = dedangled_865 dedangled_868 = dedangled_864 dedangled_868 = dedangled_866 : Equivalence classes for indirect node id 160 "dedangled_865": pointer 84, location 0 Equivalence classes for indirect node id 161 "dedangled_863": pointer 85, location 0 Equivalence classes for indirect node id 162 "dedangled_864": pointer 86, location 0 : dedangled_865 = { ESCAPED NONLOCAL } dedangled_863 = { ESCAPED NONLOCAL } dedangled_864 = { ESCAPED NONLOCAL } dedangled_866 = { ESCAPED NONLOCAL } dedangled_867 = { ESCAPED NONLOCAL } dedangled_868 = { ESCAPED NONLOCAL } : Value numbering store MEM[(int64_t *)&net + 608B] to _59 Setting value number of .MEM_123 to .MEM_123 (changed) Value numbering stmt = dedangled_865 = bea_43->tail; Setting value number of dedangled_865 to dedangled_865 (changed) Making available beyond BB36 dedangled_865 for value dedangled_865 Value numbering stmt = dedangled_863 = bea_43->head; Setting value number of dedangled_863 to dedangled_863 (changed) Making available beyond BB36 dedangled_863 for value dedangled_863 Value numbering stmt = dedangled_864 = bea_43->tail; Inserting name _920 for expression (struct node.reorg.reorder *) dedangled_865 Setting value number of dedangled_864 to _920 (changed) Making available beyond BB36 dedangled_864 for value _920 Value numbering stmt = dedangled_866 = bea_43->head; : Value numbering stmt = dedangled_868 = PHI <dedangled_864(166), dedangled_866(37)> Setting value number of dedangled_868 to dedangled_868 (changed) : Setting value number of dedangled_363 to _920 (changed) dedangled_864 is available for _920 Value numbering stmt = _896 = dedangled_363 == dedangled_873; dedangled_864 is available for _920 (the last line repeats many times) : Value numbering stmt = _881 = dedangled_363 == dedangled_875; dedangled_864 is available for _920 (the last line repeats many times) : Value numbering stmt = _880 = _881 & _891; dedangled_864 is available for _920 dedangled_864 is available for _920 dedangled_864 is available for _920 dedangled_864 is available for _920 : Setting value number of dedangled_313 to _920 (changed) dedangled_864 is available for _920 Value numbering stmt = _904 = dedangled_313 == dedangled_873; dedangled_864 is available for _920 (the last line repeats many times) : Value numbering stmt = _442 = _11 & _904; dedangled_864 is available for _920 Match-and-simplified _11 & _904 to _904 : Value numbering stmt = if (_442 != 0) dedangled_864 is available for _920 : Making available beyond BB36 dedangled_863 for value dedangled_863 Value numbering stmt = dedangled_864 = bea_43->tail; Setting value number of dedangled_864 to _920 Making available beyond BB36 dedangled_864 for value _920 Value numbering stmt = dedangled_866 = bea_43->head; : Making available beyond BB38 dedangled_867 for value dedangled_867 Value numbering stmt = dedangled_868 = PHI <dedangled_864(166), dedangled_866(37)> Setting value number of dedangled_868 to dedangled_868 : Setting value number of dedangled_363 to _920 dedangled_864 is available for _920 Value numbering stmt = _896 = dedangled_363 == dedangled_873; dedangled_864 is available for _920 (the last line repeats many times) : Value numbering stmt = _881 = dedangled_363 == dedangled_875; dedangled_864 is available for _920 (the last line repeats many times) : (a bunch more of the "dedangled_864 is available for _920") : exp_gen[36] := { red_cost_of_bea_42 (0019), bea_43 (0020), {mem_ref<608B>,addr_expr<&net>}@.MEM_99 (0027), {plus_expr,_58,1} (0028), {component_ref<tail>,mem_ref<0B>,bea_43}@.MEM_387 (0408), {component_ref<head>,mem_ref<0B>,bea_43}@.MEM_387 (0407) } phi_gen[36] := { } tmp_gen[36] := { _58 (0027), _59 (0028), dedangled_865 (0408), dedangled_863 (0407), dedangled_864 (0448), dedangled_866 (0229) } avail_out[36] := { xchange_449(D) (0232), arcs_1 (0003), stop_arcs_2 (0004), _4 (0006), _5 (0007), i_646 (0340), _7 (0008), _8 (0009), _9 (0010), i_10 (0011), _212 (0112), xchange_900 (0431), end_arc_385 (0180), _14 (0013), _19 (0015), field_arry_addr_112 (0045), i_665 (0352), next_666 (0353), _163 (0081), next_218 (0113), _173 (0083), _178 (0086), _179 (0087), _176 (0084), end_arc_443 (0226), end_arc_444 (0227), end_arc_445 (0228), _222 (0238), _223 (0115), _224 (0116), _225 (0117), _226 (0118), _227 (0119), _228 (0120), _229 (0121), _231 (0123), _21 (0016), red_cost_of_bea_42 (0019), bea_43 (0020), i_649 (0343), _45 (0021), _46 (0022), _47 (0023), _58 (0027), _59 (0028), dedangled_865 (0408), dedangled_863 (0407), dedangled_864 (0448), dedangled_866 (0229) } exp_gen[37] := { } phi_gen[37] := { } tmp_gen[37] := { } avail_out[37] := { xchange_449(D) (0232), arcs_1 (0003), stop_arcs_2 (0004), _4 (0006), _5 (0007), i_646 (0340), _7 (0008), _8 (0009), _9 (0010), i_10 (0011), _212 (0112), xchange_900 (0431), end_arc_385 (0180), _14 (0013), _19 (0015), field_arry_addr_112 (0045), i_665 (0352), next_666 (0353), _163 (0081), next_218 (0113), _173 (0083), _178 (0086), _179 (0087), _176 (0084), end_arc_443 (0226), end_arc_444 (0227), end_arc_445 (0228), _222 (0238), _223 (0115), _224 (0116), _225 (0117), _226 (0118), _227 (0119), _228 (0120), _229 (0121), _231 (0123), _21 (0016), red_cost_of_bea_42 (0019), bea_43 (0020), i_649 (0343), _45 (0021), _46 (0022), _47 (0023), _58 (0027), _59 (0028), dedangled_865 (0408), dedangled_863 (0407), dedangled_864 (0448), dedangled_866 (0229) } exp_gen[38] := { dedangled_867 (0409), dedangled_868 (0410) } phi_gen[38] := { dedangled_867 (0409), dedangled_868 (0410) } tmp_gen[38] := { } avail_out[38] := { xchange_449(D) (0232), arcs_1 (0003), stop_arcs_2 (0004), _4 (0006), _5 (0007), i_646 (0340), _7 (0008), _8 (0009), _9 (0010), i_10 (0011), _212 (0112), xchange_900 (0431), end_arc_385 (0180), _14 (0013), _19 (0015), field_arry_addr_112 (0045), i_665 (0352), next_666 (0353), _163 (0081), next_218 (0113), _173 (0083), _178 (0086), _179 (0087), _176 (0084), end_arc_443 (0226), end_arc_444 (0227), end_arc_445 (0228), _222 (0238), _223 (0115), _224 (0116), _225 (0117), _226 (0118), _227 (0119), _228 (0120), _229 (0121), _231 (0123), _21 (0016), red_cost_of_bea_42 (0019), bea_43 (0020), i_649 (0343), _45 (0021), _46 (0022), _47 (0023), _58 (0027), _59 (0028), dedangled_865 (0408), dedangled_863 (0407), dedangled_864 (0448), dedangled_866 (0229), dedangled_867 (0409), dedangled_868 (0410) } (a presence in the avail_out for rest until it reaches a point where is in none of them) : ANTIC_OUT[166] := { {mem_ref<0B>,addr_expr<&opt>}@.MEM_104(D) (0112), bea_43 (0020), dedangled_863 (0407), dedangled_864 (0448) } [changed] ANTIC_IN[166] := { {mem_ref<0B>,addr_expr<&opt>}@.MEM_104(D) (0112), bea_43 (0020), dedangled_863 (0407), dedangled_864 (0448) } S[166] := { {mem_ref<0B>,addr_expr<&opt>}@.MEM_104(D) (0112), bea_43 (0020), dedangled_863 (0407), dedangled_864 (0448) } : PA_OUT[36] := { stop_arcs_2 (0004), _4 (0006), {mem_ref<0B>,addr_expr<&opt>}@.MEM_104(D) (0112), xchange_900 (0431), {mem_ref<0B>,addr_expr<&opt_basket>}@.MEM_104(D) (0015), {mem_ref<0B>,addr_expr<&full_group_end_arc>}@.MEM_104(D) (0083), end_arc_445 (0228), {mem_ref<0B>,addr_expr<&perm_p>}@.MEM_104(D) (0016), red_cost_of_bea_42 (0019), bea_43 (0020), dedangled_865 (0408), dedangled_863 (0407), dedangled_864 (0448), dedangled_866 (0229), {mem_ref<616B>,addr_expr<&net>}@.MEM_99 (0442), {plus_expr,_913,1} (0438), {component_ref<orientation>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0258), {component_ref<flow>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0274), {component_ref<pred>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0265), {component_ref<depth>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0049), {component_ref<basic_arc>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0299), {component_ref<feas_tol>,mem_ref<0B>,addr_expr<&net>}@.MEM_387 (0222), {abs_expr,red_cost_of_bea_42} (0134), {component_ref<potential>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0306), {component_ref<child>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0312), {component_ref<sibling>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0327), {component_ref<sibling_prev>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0339), {pointer_plus_expr,field_arry_addr_581,-8} (0921), {bit_xor_expr,xchange_900,1} (0923), {pointer_plus_expr,field_arry_addr_591,-8} (0924), {pointer_plus_expr,field_arry_addr_601,-8} (0926) } : Replaced bea_43->tail with _975 in dedangled_864 = bea_43->tail; : long int pretmp_859; struct node * * field_addr_860; struct node * field_val_temp_861; unsigned long dedangled_863; unsigned long dedangled_864; unsigned long dedangled_865; unsigned long dedangled_866; : <bb 36> [local count: 4422246]: _58 = MEM[(int64_t *)&net + 608B]; _59 = _58 + 1; MEM[(int64_t *)&net + 608B] = _59; dedangled_865 = bea_43->tail; dedangled_863 = bea_43->head; _975 = (struct node.reorg.reorder *) dedangled_865; dedangled_864 = bea_43->tail; dedangled_866 = bea_43->head; if (red_cost_of_bea_42 > 0) goto <bb 166>; [59.00%] else goto <bb 37>; [41.00%] <bb 166> [local count: 2609125]: goto <bb 38>; [100.00%] <bb 37> [local count: 1813121]: <bb 38> [local count: 4422246]: # dedangled_867 = PHI <dedangled_863(166), dedangled_865(37)> # dedangled_868 = PHI <dedangled_864(166), dedangled_866(37)> if (dedangled_867 != dedangled_868) goto <bb 126>; [89.00%] else goto <bb 55>; [11.00%] ================================================= I was pretty arbitrary here about what I extracted from the dump file but it's 33MB in size. I'm still thinking it's something dumb that I did when I created "dedangled_864" but I can't spot it from the dump. Does anyone have any ideas? Note, before I looked at the dump I at least had a half-baked idea of what to try but now this leaves me without a clue as to what to do (I'm going to read up on the original algorithm.) Thanks, GaryRichard, OK, all that I've gotten so far out of the dump file is that the name of "_920" is just something sccvn concocted and wasn't something I accidentaly caused. That still leaves me with the question of what is going on. Here's all the interesting bits of the dumpfile concerning dedangled_864: : dedangled_865 = *bea_43 + 64 dedangled_863 = *bea_43 + 128 dedangled_864 = *bea_43 + 64 dedangled_866 = *bea_43 + 128 dedangled_867 = dedangled_863 dedangled_867 = dedangled_865 dedangled_868 = dedangled_864 dedangled_868 = dedangled_866 : Equivalence classes for indirect node id 160 "dedangled_865": pointer 84, location 0 Equivalence classes for indirect node id 161 "dedangled_863": pointer 85, location 0 Equivalence classes for indirect node id 162 "dedangled_864": pointer 86, location 0 : dedangled_865 = { ESCAPED NONLOCAL } dedangled_863 = { ESCAPED NONLOCAL } dedangled_864 = { ESCAPED NONLOCAL } dedangled_866 = { ESCAPED NONLOCAL } dedangled_867 = { ESCAPED NONLOCAL } dedangled_868 = { ESCAPED NONLOCAL } : Value numbering store MEM[(int64_t *)&net + 608B] to _59 Setting value number of .MEM_123 to .MEM_123 (changed) Value numbering stmt = dedangled_865 = bea_43->tail; Setting value number of dedangled_865 to dedangled_865 (changed) Making available beyond BB36 dedangled_865 for value dedangled_865 Value numbering stmt = dedangled_863 = bea_43->head; Setting value number of dedangled_863 to dedangled_863 (changed) Making available beyond BB36 dedangled_863 for value dedangled_863 Value numbering stmt = dedangled_864 = bea_43->tail; Inserting name _920 for expression (struct node.reorg.reorder *) dedangled_865 Setting value number of dedangled_864 to _920 (changed) Making available beyond BB36 dedangled_864 for value _920 Value numbering stmt = dedangled_866 = bea_43->head; : Value numbering stmt = dedangled_868 = PHI <dedangled_864(166), dedangled_866(37)> Setting value number of dedangled_868 to dedangled_868 (changed) : Setting value number of dedangled_363 to _920 (changed) dedangled_864 is available for _920 Value numbering stmt = _896 = dedangled_363 == dedangled_873; dedangled_864 is available for _920 (the last line repeats many times) : Value numbering stmt = _881 = dedangled_363 == dedangled_875; dedangled_864 is available for _920 (the last line repeats many times) : Value numbering stmt = _880 = _881 & _891; dedangled_864 is available for _920 dedangled_864 is available for _920 dedangled_864 is available for _920 dedangled_864 is available for _920 : Setting value number of dedangled_313 to _920 (changed) dedangled_864 is available for _920 Value numbering stmt = _904 = dedangled_313 == dedangled_873; dedangled_864 is available for _920 (the last line repeats many times) : Value numbering stmt = _442 = _11 & _904; dedangled_864 is available for _920 Match-and-simplified _11 & _904 to _904 : Value numbering stmt = if (_442 != 0) dedangled_864 is available for _920 : Making available beyond BB36 dedangled_863 for value dedangled_863 Value numbering stmt = dedangled_864 = bea_43->tail; Setting value number of dedangled_864 to _920 Making available beyond BB36 dedangled_864 for value _920 Value numbering stmt = dedangled_866 = bea_43->head; : Making available beyond BB38 dedangled_867 for value dedangled_867 Value numbering stmt = dedangled_868 = PHI <dedangled_864(166), dedangled_866(37)> Setting value number of dedangled_868 to dedangled_868 : Setting value number of dedangled_363 to _920 dedangled_864 is available for _920 Value numbering stmt = _896 = dedangled_363 == dedangled_873; dedangled_864 is available for _920 (the last line repeats many times) : Value numbering stmt = _881 = dedangled_363 == dedangled_875; dedangled_864 is available for _920 (the last line repeats many times) : (a bunch more of the "dedangled_864 is available for _920") : exp_gen[36] := { red_cost_of_bea_42 (0019), bea_43 (0020), {mem_ref<608B>,addr_expr<&net>}@.MEM_99 (0027), {plus_expr,_58,1} (0028), {component_ref<tail>,mem_ref<0B>,bea_43}@.MEM_387 (0408), {component_ref<head>,mem_ref<0B>,bea_43}@.MEM_387 (0407) } phi_gen[36] := { } tmp_gen[36] := { _58 (0027), _59 (0028), dedangled_865 (0408), dedangled_863 (0407), dedangled_864 (0448), dedangled_866 (0229) } avail_out[36] := { xchange_449(D) (0232), arcs_1 (0003), stop_arcs_2 (0004), _4 (0006), _5 (0007), i_646 (0340), _7 (0008), _8 (0009), _9 (0010), i_10 (0011), _212 (0112), xchange_900 (0431), end_arc_385 (0180), _14 (0013), _19 (0015), field_arry_addr_112 (0045), i_665 (0352), next_666 (0353), _163 (0081), next_218 (0113), _173 (0083), _178 (0086), _179 (0087), _176 (0084), end_arc_443 (0226), end_arc_444 (0227), end_arc_445 (0228), _222 (0238), _223 (0115), _224 (0116), _225 (0117), _226 (0118), _227 (0119), _228 (0120), _229 (0121), _231 (0123), _21 (0016), red_cost_of_bea_42 (0019), bea_43 (0020), i_649 (0343), _45 (0021), _46 (0022), _47 (0023), _58 (0027), _59 (0028), dedangled_865 (0408), dedangled_863 (0407), dedangled_864 (0448), dedangled_866 (0229) } exp_gen[37] := { } phi_gen[37] := { } tmp_gen[37] := { } avail_out[37] := { xchange_449(D) (0232), arcs_1 (0003), stop_arcs_2 (0004), _4 (0006), _5 (0007), i_646 (0340), _7 (0008), _8 (0009), _9 (0010), i_10 (0011), _212 (0112), xchange_900 (0431), end_arc_385 (0180), _14 (0013), _19 (0015), field_arry_addr_112 (0045), i_665 (0352), next_666 (0353), _163 (0081), next_218 (0113), _173 (0083), _178 (0086), _179 (0087), _176 (0084), end_arc_443 (0226), end_arc_444 (0227), end_arc_445 (0228), _222 (0238), _223 (0115), _224 (0116), _225 (0117), _226 (0118), _227 (0119), _228 (0120), _229 (0121), _231 (0123), _21 (0016), red_cost_of_bea_42 (0019), bea_43 (0020), i_649 (0343), _45 (0021), _46 (0022), _47 (0023), _58 (0027), _59 (0028), dedangled_865 (0408), dedangled_863 (0407), dedangled_864 (0448), dedangled_866 (0229) } exp_gen[38] := { dedangled_867 (0409), dedangled_868 (0410) } phi_gen[38] := { dedangled_867 (0409), dedangled_868 (0410) } tmp_gen[38] := { } avail_out[38] := { xchange_449(D) (0232), arcs_1 (0003), stop_arcs_2 (0004), _4 (0006), _5 (0007), i_646 (0340), _7 (0008), _8 (0009), _9 (0010), i_10 (0011), _212 (0112), xchange_900 (0431), end_arc_385 (0180), _14 (0013), _19 (0015), field_arry_addr_112 (0045), i_665 (0352), next_666 (0353), _163 (0081), next_218 (0113), _173 (0083), _178 (0086), _179 (0087), _176 (0084), end_arc_443 (0226), end_arc_444 (0227), end_arc_445 (0228), _222 (0238), _223 (0115), _224 (0116), _225 (0117), _226 (0118), _227 (0119), _228 (0120), _229 (0121), _231 (0123), _21 (0016), red_cost_of_bea_42 (0019), bea_43 (0020), i_649 (0343), _45 (0021), _46 (0022), _47 (0023), _58 (0027), _59 (0028), dedangled_865 (0408), dedangled_863 (0407), dedangled_864 (0448), dedangled_866 (0229), dedangled_867 (0409), dedangled_868 (0410) } (a presence in the avail_out for rest until it reaches a point where is in none of them) : ANTIC_OUT[166] := { {mem_ref<0B>,addr_expr<&opt>}@.MEM_104(D) (0112), bea_43 (0020), dedangled_863 (0407), dedangled_864 (0448) } [changed] ANTIC_IN[166] := { {mem_ref<0B>,addr_expr<&opt>}@.MEM_104(D) (0112), bea_43 (0020), dedangled_863 (0407), dedangled_864 (0448) } S[166] := { {mem_ref<0B>,addr_expr<&opt>}@.MEM_104(D) (0112), bea_43 (0020), dedangled_863 (0407), dedangled_864 (0448) } : PA_OUT[36] := { stop_arcs_2 (0004), _4 (0006), {mem_ref<0B>,addr_expr<&opt>}@.MEM_104(D) (0112), xchange_900 (0431), {mem_ref<0B>,addr_expr<&opt_basket>}@.MEM_104(D) (0015), {mem_ref<0B>,addr_expr<&full_group_end_arc>}@.MEM_104(D) (0083), end_arc_445 (0228), {mem_ref<0B>,addr_expr<&perm_p>}@.MEM_104(D) (0016), red_cost_of_bea_42 (0019), bea_43 (0020), dedangled_865 (0408), dedangled_863 (0407), dedangled_864 (0448), dedangled_866 (0229), {mem_ref<616B>,addr_expr<&net>}@.MEM_99 (0442), {plus_expr,_913,1} (0438), {component_ref<orientation>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0258), {component_ref<flow>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0274), {component_ref<pred>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0265), {component_ref<depth>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0049), {component_ref<basic_arc>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0299), {component_ref<feas_tol>,mem_ref<0B>,addr_expr<&net>}@.MEM_387 (0222), {abs_expr,red_cost_of_bea_42} (0134), {component_ref<potential>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0306), {component_ref<child>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0312), {component_ref<sibling>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0327), {component_ref<sibling_prev>,mem_ref<0B>,addr_expr<&_reorg_base_var_node.reorg.reorder>}@.MEM_387 (0339), {pointer_plus_expr,field_arry_addr_581,-8} (0921), {bit_xor_expr,xchange_900,1} (0923), {pointer_plus_expr,field_arry_addr_591,-8} (0924), {pointer_plus_expr,field_arry_addr_601,-8} (0926) } : Replaced bea_43->tail with _975 in dedangled_864 = bea_43->tail; : long int pretmp_859; struct node * * field_addr_860; struct node * field_val_temp_861; unsigned long dedangled_863; unsigned long dedangled_864; unsigned long dedangled_865; unsigned long dedangled_866; : <bb 36> [local count: 4422246]: _58 = MEM[(int64_t *)&net + 608B]; _59 = _58 + 1; MEM[(int64_t *)&net + 608B] = _59; dedangled_865 = bea_43->tail; dedangled_863 = bea_43->head; _975 = (struct node.reorg.reorder *) dedangled_865; dedangled_864 = bea_43->tail; dedangled_866 = bea_43->head; if (red_cost_of_bea_42 > 0) goto <bb 166>; [59.00%] else goto <bb 37>; [41.00%] <bb 166> [local count: 2609125]: goto <bb 38>; [100.00%] <bb 37> [local count: 1813121]: <bb 38> [local count: 4422246]: # dedangled_867 = PHI <dedangled_863(166), dedangled_865(37)> # dedangled_868 = PHI <dedangled_864(166), dedangled_866(37)> if (dedangled_867 != dedangled_868) goto <bb 126>; [89.00%] else goto <bb 55>; [11.00%] ================================================= I was pretty arbitrary here about what I extracted from the dump file but it's 33MB in size. I'm still thinking it's something dumb that I did when I created "dedangled_864" but I can't spot it from the dump. Does anyone have any ideas? Note, before I looked at the dump I at least had a half-baked idea of what to try but now this leaves me without a clue as to what to do (I'm going to read up on the original algorithm.) Thanks, Gary ________________________________ From: Richard Biener <richard.guent...@gmail.com> Sent: Thursday, July 22, 2021 5:18 AM To: Gary Oblock <g...@amperecomputing.com> Cc: gcc@gcc.gnu.org <gcc@gcc.gnu.org> Subject: Re: A value number issue [EXTERNAL EMAIL NOTICE: This email originated from an external sender. Please be mindful of safe email handling and proprietary information protection practices.] On Thu, Jul 22, 2021 at 8:06 AM Gary Oblock via Gcc <gcc@gcc.gnu.org> wrote: > > I seem to be having a problem with the pre pass. > > When eliminate_dom_walker::eliminate_stmt is called with > the gsi to "dedangled_864 = bea_43->tail;" which in turn > calls eliminate_dom_walker::eliminate_avail op of dedangled_864. > This gives VN_INFO (lhs)->valnum of _920. The _920 is not > associated with any SSA variable in the function and I don't > see how it got associated with dedangled_864. This is not > a theoretical issue because it causes an error (the gcc_unreachable > in eliminate_stmt is called.) But you show below the definition of _920 so I don't quite understand your question. You can follow VNs reasoning in the -details dump. > > Here is how _920 (in function main) is used. > > _920 = arcnew_916->head; > _921 = MEM[(struct node.reorg.reorder *)_920].firstin; > MEM[(struct node.reorg.reorder *)_920].firstin = arcnew_916; > > Here is how dedangled_864 is used: > > <bb 63> [local count: 2609125]: > dedangled_863 = bea_43->head; > dedangled_864 = bea_43->tail; > goto <bb 65>; [100.00%] > > <bb 64> [local count: 1813121]: > dedangled_865 = bea_43->tail; > dedangled_866 = bea_43->head; > > <bb 65> [local count: 4422246]: > # dedangled_867 = PHI <dedangled_863(63), dedangled_865(64)> > # dedangled_868 = PHI <dedangled_864(63), dedangled_866(64)> > delta_461 = 1; > goto <bb 82>; [100.00%] > > Note, dedangled_868 is used in an ever widening net of > phis and operations. Also, the other similar statements > > dedangled_863 = bea_43->head; > dedangled_865 = bea_43->tail; > dedangled_866 = bea_43->head; > > don't seem to be malformed. > > I tried using a watchpoint to see what was happening but that turned > out to be not productive in that it was tripping on something > unrelated even if I set it at the start of the pre pass. > > I'm assuming that some of my code is malformed in some > subtle way and I was wondering it anybody had any ideas? > I say subtle because this was all working on a slightly different > version of gcc without the code of some other Ampere optimizations > in the mix (I disabled those optimizations and things still failed.) > > Note, if you guys don't have any ideas the next approach is adding > tons of brute force instrumentation and special purpose sanity > checking to the value numbering routine... please help me avoid that. > > Thanks, > > Gary > > > CONFIDENTIALITY NOTICE: This e-mail message, including any attachments, is > for the sole use of the intended recipient(s) and contains information that > is confidential and proprietary to Ampere Computing or its subsidiaries. It > is to be used solely for the purpose of furthering the parties' business > relationship. Any unauthorized review, copying, or distribution of this email > (or any attachments thereto) is strictly prohibited. If you are not the > intended recipient, please contact the sender immediately and permanently > delete the original and any copies of this email and any attachments thereto.