Magellan Linux

Annotation of /trunk/gcc/patches/gcc-4.9-tree-ssa-threadedge.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2434 - (hide annotations) (download)
Tue May 13 11:12:43 2014 UTC (10 years, 1 month ago) by niro
File size: 1475 byte(s)
-added some fixes for gcc-4.9
1 niro 2434 --- trunk/gcc/tree-ssa-threadedge.c 2014/04/23 17:53:56 209715
2     +++ trunk/gcc/tree-ssa-threadedge.c 2014/04/23 18:04:46 209716
3     @@ -387,7 +387,34 @@
4     && (gimple_code (stmt) != GIMPLE_CALL
5     || gimple_call_lhs (stmt) == NULL_TREE
6     || TREE_CODE (gimple_call_lhs (stmt)) != SSA_NAME))
7     - continue;
8     + {
9     + /* STMT might still have DEFS and we need to invalidate any known
10     + equivalences for them.
11     +
12     + Consider if STMT is a GIMPLE_ASM with one or more outputs that
13     + feeds a conditional inside a loop. We might derive an equivalence
14     + due to the conditional. */
15     + tree op;
16     + ssa_op_iter iter;
17     +
18     + if (backedge_seen)
19     + FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF)
20     + {
21     + /* This call only invalidates equivalences created by
22     + PHI nodes. This is by design to keep the cost of
23     + of invalidation reasonable. */
24     + invalidate_equivalences (op, stack, src_map, dst_map);
25     +
26     + /* However, conditionals can imply values for real
27     + operands as well. And those won't be recorded in the
28     + maps. In fact, those equivalences may be recorded totally
29     + outside the threading code. We can just create a new
30     + temporary NULL equivalence here. */
31     + record_temporary_equivalence (op, NULL_TREE, stack);
32     + }
33     +
34     + continue;
35     + }
36    
37     /* The result of __builtin_object_size depends on all the arguments
38     of a phi node. Temporarily using only one edge produces invalid