https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70646

--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
Happens via

(gdb) bt
#0  redirect_to_unreachable (e=0x7ffff6891820)
    at /space/rguenther/src/svn/trunk3/gcc/ipa-inline-analysis.c:735
#1  0x0000000000bc9325 in edge_set_predicate (e=0x7ffff6891820, 
    predicate=0x7fffffffc980)
    at /space/rguenther/src/svn/trunk3/gcc/ipa-inline-analysis.c:768
#2  0x0000000000bd1df7 in remap_edge_summaries (inlined_edge=0x7ffff68912d8, 
    node=<cgraph_node* 0x7ffff69b1000 "wwn_to_u64.constprop">, 
    info=0x7ffff6994ba0, callee_info=0x7ffff6994c60, operand_map=..., 
    offset_map=..., possible_truths=0, toplev_predicate=0x7fffffffca30)
    at /space/rguenther/src/svn/trunk3/gcc/ipa-inline-analysis.c:3500
#3  0x0000000000bd2603 in inline_merge_summary (edge=0x7ffff68912d8)
    at /space/rguenther/src/svn/trunk3/gcc/ipa-inline-analysis.c:3647
#4  0x00000000017f2b84 in inline_call (e=0x7ffff68912d8, update_original=true, 
Python Exception <class 'gdb.error'> There is no member or method named
m_vecpfx.: 
    new_edges=0x7fffffffd9d0, overall_size=0x25c63e0 <_ZL12overall_size>, 
    update_overall_summary=true, callee_removed=0x0)
    at /space/rguenther/src/svn/trunk3/gcc/ipa-inline-transform.c:370
#5  0x00000000017e8953 in inline_small_functions ()
    at /space/rguenther/src/svn/trunk3/gcc/ipa-inline.c:2022
#6  0x00000000017e9ca7 in ipa_inline ()

so somehow it get's confused:

 BB 2 predicate:(true)
  _3 = MEM[(const u64 *)wwn_2(D)];
                freq:1.00 size:  1 time:  1
                50% will be eliminated by inlining
                Accounting size:0.50, time:0.50 on new predicate:(op0[ref
offset: 0] changed) && (not inlined)
                Accounting size:0.50, time:0.50 on new predicate:(op0[ref
offset: 0] changed)
  _4 = __builtin_constant_p (_3);
                freq:1.00 size:  0 time:  0
  if (_4 != 0)
                freq:1.00 size:  2 time:  2
                Accounting size:2.00, time:2.00 on predicate:(op0[ref offset:
0] changed)

 BB 4 predicate:(op0[ref offset: 0] not constant)
  iftmp.0_26 = __builtin_bswap64 (_3);
                freq:0.61 size:  1 time:  1

 BB 3 predicate:(true)
  _5 = _3 << 56;

(BB 3 predicate shouldn't be true)

Honza?  This seems to be somewhat fragile (redirecting things to unreachable
but _not_ changing the actual predicates in the IL).  Claiming the
predicate is constant true is also a bit bogus (as can be seen in following
optimization).

Reply via email to