This removes restrictions in DOM cprop_operand that inhibit some optimizations. The volatile pointer thing is really realy old and no longer necessary while the loop-depth consideration is only valid for loop-closed PHI nodes (but we're not in loop-closed SSA in DOM) - the coalescing is handled in out-of-SSA phase by inserting copies appropriately.
Bootstrapped on x86_64-unknown-linux-gnu, ok? Thanks, Richard. 2014-06-25 Richard Biener <rguent...@suse.de> PR tree-optimization/61607 * tree-ssa-dom.c (cprop_operand): Remove restriction on propagating volatile pointers and on loop depth. Index: gcc/tree-ssa-dom.c =================================================================== --- gcc/tree-ssa-dom.c (revision 211969) +++ gcc/tree-ssa-dom.c (working copy) @@ -2247,22 +2247,6 @@ cprop_operand (gimple stmt, use_operand_ if (!may_propagate_copy (op, val)) return; - /* Do not propagate addresses that point to volatiles into memory - stmts without volatile operands. */ - if (POINTER_TYPE_P (TREE_TYPE (val)) - && TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (val))) - && gimple_has_mem_ops (stmt) - && !gimple_has_volatile_ops (stmt)) - return; - - /* Do not propagate copies if the propagated value is at a deeper loop - depth than the propagatee. Otherwise, this may move loop variant - variables outside of their loops and prevent coalescing - opportunities. If the value was loop invariant, it will be hoisted - by LICM and exposed for copy propagation. */ - if (loop_depth_of_name (val) > loop_depth_of_name (op)) - return; - /* Do not propagate copies into simple IV increment statements. See PR23821 for how this can disturb IV analysis. */ if (TREE_CODE (val) != INTEGER_CST