Summary: | [5 Regression] ICE: tree check: expected ssa_name, have var_decl in walk_aliased_vdefs_1, at tree-ssa-alias.c:2689 | ||
---|---|---|---|
Product: | gcc | Reporter: | Markus Trippelsdorf <trippels> |
Component: | tree-optimization | Assignee: | Richard Biener <rguenth> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | P3 | ||
Version: | 5.0 | ||
Target Milestone: | 5.0 | ||
Host: | Target: | ||
Build: | Known to work: | ||
Known to fail: | Last reconfirmed: | 2014-10-08 00:00:00 |
Description
Markus Trippelsdorf
2014-10-07 21:05:38 UTC
Mine (finally a small enough testcase...). This means somebody is not updating VDEFs properly (expected for load VUSEs btw). Ah, #5 0x0000000000c263c2 in ipa_polymorphic_call_context::get_dynamic_type ( this=0x7fffffffd790, instance=<ssa_name 0x7ffff687b678>, otr_object=<ssa_name 0x7ffff687b678>, otr_type=<record_type 0x7ffff6867b28 D>, call=<gimple_call 0x7ffff6895498>) at /space/rguenther/src/svn/trunk/gcc/ipa-polymorphic-call.c:1606 (gdb) l 1601 tci.multiple_types_encountered = false; 1602 tci.speculative = false; 1603 tci.seen_unanalyzed_store = false; 1604 1605 walk_aliased_vdefs (&ao, gimple_vuse (stmt), check_stmt_for_type_change, 1606 &tci, NULL, &function_entry_reached); this walks on gimple_vuse! (gdb) p debug_gimple_stmt (stmt) # VUSE <.MEM> pretmp_5 = this_10(D)->D.2797._vptr.A; VUSEs are not kept renamed by load PRE insertion phase so this will not work. The function is called on the call # .MEM_45 = VDEF <.MEM_6(D)> OBJ_TYPE_REF(pretmp_1;(struct D)this_10(D)->0) (this_10(D), p1_11(D), p2_14(D), 0); Of course it would be nice to keep virtual SSA form up-to-date during PRE insertion, but as of now that was not necessary (and we can't simply rename VOPs as that will break the SSA value-numbering lattice which includes virtuals). Keeping virtual SSA form up-to-date requires computing the life virtual operand on edges (which means BB exit). I'm going to try that. Author: rguenth Date: Fri Oct 10 11:04:39 2014 New Revision: 216065 URL: https://gcc.gnu.org/viewcvs?rev=216065&root=gcc&view=rev Log: 2014-10-10 Richard Biener <rguenther@suse.de> PR tree-optimization/63476 * tree-ssa-pre.c (struct bb_bitmap_sets): Add vop_on_exit member. (BB_LIVE_VOP_ON_EXIT): New define. (create_expression_by_pieces): Assign VUSEs to stmts. (compute_avail): Track BB_LIVE_VOP_ON_EXIT. (pass_pre::execute): Assert virtual SSA form is up-to-date after insertion. * g++.dg/torture/pr63476.C: New testcase. Added: trunk/gcc/testsuite/g++.dg/torture/pr63476.C Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-ssa-pre.c Fixed. |