Summary: | [4.6 Regression] error: SSA name in freelist but still referenced | ||
---|---|---|---|
Product: | gcc | Reporter: | John Regehr <regehr> |
Component: | tree-optimization | Assignee: | Richard Biener <rguenth> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | chenyang, gcc-bugs, matz, rguenth |
Priority: | P3 | ||
Version: | 4.6.0 | ||
Target Milestone: | 4.6.0 | ||
Host: | x86_64-unknown-linux-gnu | Target: | x86_64-unknown-linux-gnu |
Build: | x86_64-unknown-linux-gnu | Known to work: | |
Known to fail: | Last reconfirmed: | 2010-05-07 21:14:23 |
Description
John Regehr
2010-05-07 19:53:06 UTC
It is caused by revision 159106: http://gcc.gnu.org/ml/gcc-cvs/2010-05/msg00156.html Confirmed. Found partial redundancy for expression {g_54}@.MEM_13(D) (0003) Inserted pretmp.6_26 = g_54; in predecessor 6 Created phi prephitmp.7_20 = PHI <g_54.1_5(8), pretmp.6_26(6)> in block 3 Found partial redundancy for expression {g_54}@.MEM_13(D) (0003) Inserted pretmp.6_10 = g_54; in predecessor 2 Created phi prephitmp.7_15 = PHI <pretmp.6_10(2), prephitmp.7_20(7)> in block 6 Replaced redundant PHI node defining prephitmp.7_20 with prephitmp.7_15 Replaced g_54 with prephitmp.7_15 in g_54.1_5 = g_54; Replaced redundant PHI node defining prephitmp.7_15 with pretmp.6_10 Removing unnecessary insertion:pretmp.6_10 = g_54; Removing unnecessary insertion:pretmp.6_26 = g_54; oops. It looks like the necessity propagation does not work for the prephitmp.7_15 replacement. Before eliminate(): lbl_110: g_4 = 0; pretmp.6_10 = g_54; goto <bb 6>; <bb 8>: <bb 3>: # p_75_22 = PHI <p_75_8(8), -28(6)> # prephitmp.7_20 = PHI <g_54.1_5(8), pretmp.6_26(6)> g_4.0_4 = g_4; if (g_4.0_4 != 0) goto <bb 7>; else goto <bb 4>; <bb 4>: g_54.1_5 = g_54; *g_54.1_5 = 0; p_75.2_6 = (uint32_t) p_75_22; D.1987_17 = p_75.2_6 + 0x0ffffffff; p_75_8 = (int32_t) D.1987_17; if (p_75_8 != 0) goto <bb 8>; else goto <bb 5>; <bb 5>: return &l_105[5]; <bb 6>: # prephitmp.7_15 = PHI <pretmp.6_10(2), prephitmp.7_20(7)> pretmp.6_26 = g_54; goto <bb 3>; <bb 7>: g_4 = 0; goto <bb 6>; and before remove_dead_inserted_code(): lbl_110: g_4 = 0; pretmp.6_10 = g_54; goto <bb 6>; <bb 8>: <bb 3>: # p_75_22 = PHI <p_75_8(8), -28(6)> g_4.0_4 = g_4; if (g_4.0_4 != 0) goto <bb 7>; else goto <bb 4>; <bb 4>: g_54.1_5 = pretmp.6_10; *g_54.1_5 = 0; p_75.2_6 = (uint32_t) p_75_22; D.1987_17 = p_75.2_6 + 0x0ffffffff; p_75_8 = (int32_t) D.1987_17; if (p_75_8 != 0) goto <bb 8>; else goto <bb 5>; <bb 5>: return &l_105[5]; <bb 6>: pretmp.6_26 = g_54; goto <bb 3>; <bb 7>: g_4 = 0; goto <bb 6>; I have a patch. Subject: Bug 44030 Author: rguenth Date: Sat May 8 13:12:56 2010 New Revision: 159186 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=159186 Log: 2010-05-08 Richard Guenther <rguenther@suse.de> PR tree-optimization/44030 * tree-ssa-pre.c (eliminate): Copy NECESSARY flag. Set NECESSARY flag if we propagate from a inserted expression. * gcc.c-torture/compile/pr44030.c: New testcase. Added: trunk/gcc/testsuite/gcc.c-torture/compile/pr44030.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-ssa-pre.c Fixed. |