Richard, I didn't find a use of _975 with that type...
A small test case is easier said than done. It's mcf and I pulled a copy out of SPEC for my unit tests (we have a SPEC license) and that passes. However, when I compile it in the SPEC framework, it fails. Otherwise, I'd have used creduce to make a really tiny test case a couple of weeks ago... ;-( In RTL a trick I used to use in the bad old days when I did one off VLIW schedulers, was to instrument the bit that assigns the RTL's id number and put a trap there to catch the creation of an interesting bit of RTL. Does that kind of trick work with SSA variable creation? Thanks, I really appreciate your help even though in this case I'm still kind of stuck. Gary ________________________________ From: Richard Biener <richard.guent...@gmail.com> Sent: Thursday, July 29, 2021 12:12 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 Wed, Jul 28, 2021 at 11:03 PM Gary Oblock <g...@amperecomputing.com> wrote: > > Richard, > > Here is more on the actual failure. > > From the pre pass dump: > > : > Inserted _975 = (struct node.reorg.reorder *) dedangled_865; > Replaced bea_43->tail with _975 in dedangled_864 = bea_43->tail; > > > > EMERGENCY DUMP: > > void master.constprop () > { > : > unsigned long _974; > struct node.reorg.reorder * _975; > > : > <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%] > : > ---------- > In tree-ssa-sccvn.c at about line 6000 or so there is > this sequence: > > if (!useless_type_conversion_p (TREE_TYPE (lhs), > TREE_TYPE (sprime))) > { > /* We preserve conversions to but not from function or method > types. This asymmetry makes it necessary to re-instantiate > conversions here. */ > if (POINTER_TYPE_P (TREE_TYPE (lhs)) > && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (TREE_TYPE (lhs)))) > sprime = fold_convert (TREE_TYPE (lhs), sprime); > else > gcc_unreachable (); > } > > We reach the gcc_unreachable because: > > lhs = dedangled_864, TREE_TYPE(lhs) = unsigned long > sprime = _975, TREE_TYPE(sprime) = struct node.reorg.reorder * > > I've got to ask why does the _975 have that type? Because the value was used with that type? > The ssa var dedangled_865 is an unsigned long. > If I knew why this happens then, hopefully, I can adjust > the GIMPLE I create to avoid this situation... > > Question, would have including all references to denangled_865 > in the pre pass dump helped you answer this? By the way, I couldn't > find a spot where dedangled_865 or any of its phi related uses > (a use of x where x <- phi<... denanged_865..> and so on recursively) > was converted to struct node.reorg.reorder *. So what did you change in GCC? If you did not change value-numbering then you can reduce the testcase down and extract a GIMPLE frontend testcase for VN (use -fdump-tree-all-gimple and massage the GIMPLE dumped before the FRE/PRE pass that causes the issue) > Gary > > > ________________________________ > From: Richard Biener <richard.guent...@gmail.com> > Sent: Wednesday, July 28, 2021 3:40 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 Fri, Jul 23, 2021 at 3:40 AM Gary Oblock <g...@amperecomputing.com> wrote: > > > > 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 > > this means that the earlier dedangled_865 = bea_43->tail; somehow did not > produce a value that was considered OK but it was close enough so VN > remembers the expression (struct node.reorg.reorder *) dedangled_865 > as known result, using _920 as value. _920 should be then inserted during > elimination. > > I'm not sure what your actual problem is - you can see in eliminate_stmt > how we deal with such values: > > /* If there is no existing usable leader but SCCVN thinks > it has an expression it wants to use as replacement, > insert that. */ > tree val = VN_INFO (lhs)->valnum; > vn_ssa_aux_t vn_info; > if (val != VN_TOP > && TREE_CODE (val) == SSA_NAME > && (vn_info = VN_INFO (val), true) > && vn_info->needs_insertion > && vn_info->expr != NULL > && (sprime = eliminate_insert (b, gsi, val)) != NULL_TREE) > eliminate_push_avail (b, sprime); > > > > 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.