generic-match-head.c: Include cgraph.h.
2015-07-23 Richard Biener <rguenther@suse.de> * generic-match-head.c: Include cgraph.h. * gimple-match-head.c: Likewise. * tree-ssa-sccvn.c (free_scc_vn): Guard against newly created SSA names. * fold-const.c (fold_binary_loc): Move &A ==/!= &B simplification... * match.pd: ...to a pattern here. Add &A ==/!= 0 simplification pattern. From-SVN: r226111
This commit is contained in:
parent
dc891fe75e
commit
d057c8669b
@ -1,3 +1,13 @@
|
|||||||
|
2015-07-23 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
* generic-match-head.c: Include cgraph.h.
|
||||||
|
* gimple-match-head.c: Likewise.
|
||||||
|
* tree-ssa-sccvn.c (free_scc_vn): Guard against newly created
|
||||||
|
SSA names.
|
||||||
|
* fold-const.c (fold_binary_loc): Move &A ==/!= &B simplification...
|
||||||
|
* match.pd: ...to a pattern here. Add &A ==/!= 0 simplification
|
||||||
|
pattern.
|
||||||
|
|
||||||
2015-07-23 Richard Biener <rguenther@suse.de>
|
2015-07-23 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
* gimple-fold.c (fold_gimple_cond): Do not require folding
|
* gimple-fold.c (fold_gimple_cond): Do not require folding
|
||||||
|
@ -11082,29 +11082,6 @@ fold_binary_loc (location_t loc,
|
|||||||
&& code == NE_EXPR)
|
&& code == NE_EXPR)
|
||||||
return non_lvalue_loc (loc, fold_convert_loc (loc, type, arg0));
|
return non_lvalue_loc (loc, fold_convert_loc (loc, type, arg0));
|
||||||
|
|
||||||
/* If this is an equality comparison of the address of two non-weak,
|
|
||||||
unaliased symbols neither of which are extern (since we do not
|
|
||||||
have access to attributes for externs), then we know the result. */
|
|
||||||
if (TREE_CODE (arg0) == ADDR_EXPR
|
|
||||||
&& DECL_P (TREE_OPERAND (arg0, 0))
|
|
||||||
&& TREE_CODE (arg1) == ADDR_EXPR
|
|
||||||
&& DECL_P (TREE_OPERAND (arg1, 0)))
|
|
||||||
{
|
|
||||||
int equal;
|
|
||||||
|
|
||||||
if (decl_in_symtab_p (TREE_OPERAND (arg0, 0))
|
|
||||||
&& decl_in_symtab_p (TREE_OPERAND (arg1, 0)))
|
|
||||||
equal = symtab_node::get_create (TREE_OPERAND (arg0, 0))
|
|
||||||
->equal_address_to (symtab_node::get_create
|
|
||||||
(TREE_OPERAND (arg1, 0)));
|
|
||||||
else
|
|
||||||
equal = TREE_OPERAND (arg0, 0) == TREE_OPERAND (arg1, 0);
|
|
||||||
if (equal != 2)
|
|
||||||
return constant_boolean_node (equal
|
|
||||||
? code == EQ_EXPR : code != EQ_EXPR,
|
|
||||||
type);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Similarly for a BIT_XOR_EXPR; X ^ C1 == C2 is X == (C1 ^ C2). */
|
/* Similarly for a BIT_XOR_EXPR; X ^ C1 == C2 is X == (C1 ^ C2). */
|
||||||
if (TREE_CODE (arg0) == BIT_XOR_EXPR
|
if (TREE_CODE (arg0) == BIT_XOR_EXPR
|
||||||
&& TREE_CODE (arg1) == INTEGER_CST
|
&& TREE_CODE (arg1) == INTEGER_CST
|
||||||
|
@ -46,8 +46,10 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
#include "builtins.h"
|
#include "builtins.h"
|
||||||
#include "dumpfile.h"
|
#include "dumpfile.h"
|
||||||
#include "target.h"
|
#include "target.h"
|
||||||
|
#include "cgraph.h"
|
||||||
#include "generic-match.h"
|
#include "generic-match.h"
|
||||||
|
|
||||||
|
|
||||||
/* Routine to determine if the types T1 and T2 are effectively
|
/* Routine to determine if the types T1 and T2 are effectively
|
||||||
the same for GENERIC. If T1 or T2 is not a type, the test
|
the same for GENERIC. If T1 or T2 is not a type, the test
|
||||||
applies to their TREE_TYPE. */
|
applies to their TREE_TYPE. */
|
||||||
|
@ -46,6 +46,7 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
#include "builtins.h"
|
#include "builtins.h"
|
||||||
#include "dumpfile.h"
|
#include "dumpfile.h"
|
||||||
#include "target.h"
|
#include "target.h"
|
||||||
|
#include "cgraph.h"
|
||||||
#include "gimple-match.h"
|
#include "gimple-match.h"
|
||||||
|
|
||||||
|
|
||||||
|
23
gcc/match.pd
23
gcc/match.pd
@ -1754,7 +1754,28 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
(simplify
|
(simplify
|
||||||
(cmp (convert?@3 (bit_xor @0 INTEGER_CST@1)) INTEGER_CST@2)
|
(cmp (convert?@3 (bit_xor @0 INTEGER_CST@1)) INTEGER_CST@2)
|
||||||
(if (tree_nop_conversion_p (TREE_TYPE (@3), TREE_TYPE (@0)))
|
(if (tree_nop_conversion_p (TREE_TYPE (@3), TREE_TYPE (@0)))
|
||||||
(cmp @0 (bit_xor @1 (convert @2))))))
|
(cmp @0 (bit_xor @1 (convert @2)))))
|
||||||
|
|
||||||
|
/* If this is an equality comparison of the address of two non-weak,
|
||||||
|
unaliased symbols neither of which are extern (since we do not
|
||||||
|
have access to attributes for externs), then we know the result. */
|
||||||
|
(simplify
|
||||||
|
(cmp (convert? addr@0) (convert? addr@1))
|
||||||
|
(if (decl_in_symtab_p (TREE_OPERAND (@0, 0))
|
||||||
|
&& decl_in_symtab_p (TREE_OPERAND (@1, 0)))
|
||||||
|
(with
|
||||||
|
{
|
||||||
|
int equal = symtab_node::get_create (TREE_OPERAND (@0, 0))
|
||||||
|
->equal_address_to (symtab_node::get_create (TREE_OPERAND (@1, 0)));
|
||||||
|
}
|
||||||
|
(if (equal != 2)
|
||||||
|
{ constant_boolean_node (equal ? cmp == EQ_EXPR : cmp != EQ_EXPR, type); }))))
|
||||||
|
|
||||||
|
(simplify
|
||||||
|
(cmp (convert? addr@0) integer_zerop)
|
||||||
|
(if (tree_single_nonzero_warnv_p (@0, NULL))
|
||||||
|
{ constant_boolean_node (cmp == NE_EXPR, type); })))
|
||||||
|
|
||||||
|
|
||||||
/* bool_var != 0 becomes bool_var. */
|
/* bool_var != 0 becomes bool_var. */
|
||||||
(simplify
|
(simplify
|
||||||
|
@ -4223,6 +4223,8 @@ free_scc_vn (void)
|
|||||||
{
|
{
|
||||||
tree name = ssa_name (i);
|
tree name = ssa_name (i);
|
||||||
if (name
|
if (name
|
||||||
|
&& SSA_NAME_VERSION (name) < vn_ssa_aux_table.length ()
|
||||||
|
&& vn_ssa_aux_table[SSA_NAME_VERSION (name)]
|
||||||
&& VN_INFO (name)->needs_insertion)
|
&& VN_INFO (name)->needs_insertion)
|
||||||
release_ssa_name (name);
|
release_ssa_name (name);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user