This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi Richard, On 30/01/17 21:08, Richard Biener wrote:
On Mon, Jan 30, 2017 at 12:23 AM, kugan <kugan.vivekanandarajah@linaro.org> wrote:lto1: internal compiler error: Segmentation fault 0xdedc4b crash_signal ../../gcc/gcc/toplev.c:333 0xb46680 ipa_node_params_t::duplicate(cgraph_node*, cgraph_node*, ipa_node_params*, ipa_node_params*) ../../gcc/gcc/ipa-prop.c:3819 0xb306a3 function_summary<ipa_node_params*>::symtab_duplication(cgraph_node*, cgraph_node*, void*) ../../gcc/gcc/symbol-summary.h:187 0x85aba7 symbol_table::call_cgraph_duplication_hooks(cgraph_node*, cgraph_node*) ../../gcc/gcc/cgraph.c:488 0x8765bf cgraph_node::create_clone(tree_node*, long, int, bool, vec<cgraph_edge*, va_heap, vl_ptr>, bool, cgraph_node*, bitmap_head*, char const*) ../../gcc/gcc/cgraphclones.c:522 0x166fb3b clone_inlined_nodes(cgraph_edge*, bool, bool, int*, int) ../../gcc/gcc/ipa-inline-transform.c:227 0x166fbd7 clone_inlined_nodes(cgraph_edge*, bool, bool, int*, int) ../../gcc/gcc/ipa-inline-transform.c:242 0x1670893 inline_call(cgraph_edge*, bool, vec<cgraph_edge*, va_heap, vl_ptr>*, int*, bool, bool*) ../../gcc/gcc/ipa-inline-transform.c:449 0x1665bd3 inline_small_functions ../../gcc/gcc/ipa-inline.c:2024 0x1667157 ipa_inline ../../gcc/gcc/ipa-inline.c:2434 0x1667fa7 execute ../../gcc/gcc/ipa-inline.c:2845
This is due to an existing issue. That is, in ipa_node_params_t::remove, m_vr and bits vectors are not set to null such that the gc can claim it.
I also noticed that we don't create m_vr and bits vectors. Attached patch does this. This was bootstrapped and regression tested with the above patch. I am now testing the attached patch alone. Is this OK if no regressions?
gcc/ChangeLog: 2017-02-02 Kugan Vivekanandarajah <kuganv@linaro.org> * ipa-cp.c (ipcp_store_bits_results): Construct bits vector. (ipcp_store_vr_results): Constrict m_vr vector.* ipa-prop.c (ipa_node_params_t::remove): Set transaction summary to null.
(ipa_node_params_t::duplicate): Construct bits and m_vr vector. (read_ipcp_transformation_info): Likewise. Thanks, Kugan
I tried similar think without variable structure like: diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 93a2390c..b0cc832 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -525,7 +525,7 @@ struct GTY(()) ipcp_transformation_summary /* Known bits information. */ vec<ipa_bits, va_gc> *bits; /* Value range information. */ - vec<ipa_vr, va_gc> *m_vr; + vec<ipa_vr *, va_gc> *m_vr; }; This also has the same issue so I don't think it has anything to do with variable structure.You have to debug that detail yourself but I wonder why the transformation summary has a different representation than the jump function (and I think the jump function size is the issue). The JF has /* Information about zero/non-zero bits. */ struct ipa_bits bits; /* Information about value range, containing valid data only when vr_known is true. */ value_range m_vr; bool vr_known; with ipa_bits having two widest_ints and value_range having two trees and an unused bitmap and ipa_vr having two wide_ints (widest_ints are smaller!). Richard.Thanks, Kugan
Attachment:
p1.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |