Commit 75fcf287 by Richard Biener Committed by Richard Biener

tree-ssa-operands.c (opf_implicit): Remove.

2013-12-02  Richard Biener  <rguenther@suse.de>

	* tree-ssa-operands.c (opf_implicit): Remove.
	(opf_address_taken): New flag.
	(get_expr_operands): Remove early out, pass down
	opf_address_taken for ADDR_EXPRs, add a use operand only
	for non-opf_address_taken bases.
	(get_indirect_ref_operands): Rename to ...
	(get_mem_ref_operands): ... this.
	(get_asm_expr_operands): Rename to ...
	(get_asm_stmt_operands): ... this.

From-SVN: r205587
parent 1656a814
2013-12-02 Richard Biener <rguenther@suse.de>
* tree-ssa-operands.c (opf_implicit): Remove.
(opf_address_taken): New flag.
(get_expr_operands): Remove early out, pass down
opf_address_taken for ADDR_EXPRs, add a use operand only
for non-opf_address_taken bases.
(get_indirect_ref_operands): Rename to ...
(get_mem_ref_operands): ... this.
(get_asm_expr_operands): Rename to ...
(get_asm_stmt_operands): ... this.
2013-12-02 Yuri Rumyantsev <ysrumyan@gmail.com> 2013-12-02 Yuri Rumyantsev <ysrumyan@gmail.com>
* ipa-inline.c (check_callers): Add missed pointer de-reference. * ipa-inline.c (check_callers): Add missed pointer de-reference.
...@@ -105,17 +105,15 @@ along with GCC; see the file COPYING3. If not see ...@@ -105,17 +105,15 @@ along with GCC; see the file COPYING3. If not see
VUSE for 'b'. */ VUSE for 'b'. */
#define opf_no_vops (1 << 1) #define opf_no_vops (1 << 1)
/* Operand is an implicit reference. This is used to distinguish
explicit assignments in the form of MODIFY_EXPR from
clobbering sites like function calls or ASM_EXPRs. */
#define opf_implicit (1 << 2)
/* Operand is in a place where address-taken does not imply addressable. */ /* Operand is in a place where address-taken does not imply addressable. */
#define opf_non_addressable (1 << 3) #define opf_non_addressable (1 << 3)
/* Operand is in a place where opf_non_addressable does not apply. */ /* Operand is in a place where opf_non_addressable does not apply. */
#define opf_not_non_addressable (1 << 4) #define opf_not_non_addressable (1 << 4)
/* Operand is having its address taken. */
#define opf_address_taken (1 << 5)
/* Array for building all the use operands. */ /* Array for building all the use operands. */
static vec<tree> build_uses; static vec<tree> build_uses;
...@@ -597,8 +595,8 @@ mark_address_taken (tree ref) ...@@ -597,8 +595,8 @@ mark_address_taken (tree ref)
FLAGS is as in get_expr_operands. */ FLAGS is as in get_expr_operands. */
static void static void
get_indirect_ref_operands (struct function *fn, get_mem_ref_operands (struct function *fn,
gimple stmt, tree expr, int flags) gimple stmt, tree expr, int flags)
{ {
tree *pptr = &TREE_OPERAND (expr, 0); tree *pptr = &TREE_OPERAND (expr, 0);
...@@ -664,7 +662,7 @@ maybe_add_call_vops (struct function *fn, gimple stmt) ...@@ -664,7 +662,7 @@ maybe_add_call_vops (struct function *fn, gimple stmt)
/* Scan operands in the ASM_EXPR stmt referred to in INFO. */ /* Scan operands in the ASM_EXPR stmt referred to in INFO. */
static void static void
get_asm_expr_operands (struct function *fn, gimple stmt) get_asm_stmt_operands (struct function *fn, gimple stmt)
{ {
size_t i, noutputs; size_t i, noutputs;
const char **oconstraints; const char **oconstraints;
...@@ -750,11 +748,6 @@ get_expr_operands (struct function *fn, gimple stmt, tree *expr_p, int flags) ...@@ -750,11 +748,6 @@ get_expr_operands (struct function *fn, gimple stmt, tree *expr_p, int flags)
&& !is_gimple_debug (stmt)) && !is_gimple_debug (stmt))
mark_address_taken (TREE_OPERAND (expr, 0)); mark_address_taken (TREE_OPERAND (expr, 0));
/* If the address is invariant, there may be no interesting
variable references inside. */
if (is_gimple_min_invariant (expr))
return;
/* Otherwise, there may be variables referenced inside but there /* Otherwise, there may be variables referenced inside but there
should be no VUSEs created, since the referenced objects are should be no VUSEs created, since the referenced objects are
not really accessed. The only operands that we should find not really accessed. The only operands that we should find
...@@ -762,14 +755,15 @@ get_expr_operands (struct function *fn, gimple stmt, tree *expr_p, int flags) ...@@ -762,14 +755,15 @@ get_expr_operands (struct function *fn, gimple stmt, tree *expr_p, int flags)
(GIMPLE does not allow non-registers as array indices). */ (GIMPLE does not allow non-registers as array indices). */
flags |= opf_no_vops; flags |= opf_no_vops;
get_expr_operands (fn, stmt, &TREE_OPERAND (expr, 0), get_expr_operands (fn, stmt, &TREE_OPERAND (expr, 0),
flags | opf_not_non_addressable); flags | opf_not_non_addressable | opf_address_taken);
return; return;
case SSA_NAME: case SSA_NAME:
case VAR_DECL: case VAR_DECL:
case PARM_DECL: case PARM_DECL:
case RESULT_DECL: case RESULT_DECL:
add_stmt_operand (fn, expr_p, stmt, flags); if (!(flags & opf_address_taken))
add_stmt_operand (fn, expr_p, stmt, flags);
return; return;
case DEBUG_EXPR_DECL: case DEBUG_EXPR_DECL:
...@@ -777,7 +771,7 @@ get_expr_operands (struct function *fn, gimple stmt, tree *expr_p, int flags) ...@@ -777,7 +771,7 @@ get_expr_operands (struct function *fn, gimple stmt, tree *expr_p, int flags)
return; return;
case MEM_REF: case MEM_REF:
get_indirect_ref_operands (fn, stmt, expr, flags); get_mem_ref_operands (fn, stmt, expr, flags);
return; return;
case TARGET_MEM_REF: case TARGET_MEM_REF:
...@@ -921,7 +915,7 @@ parse_ssa_operands (struct function *fn, gimple stmt) ...@@ -921,7 +915,7 @@ parse_ssa_operands (struct function *fn, gimple stmt)
switch (code) switch (code)
{ {
case GIMPLE_ASM: case GIMPLE_ASM:
get_asm_expr_operands (fn, stmt); get_asm_stmt_operands (fn, stmt);
break; break;
case GIMPLE_TRANSACTION: case GIMPLE_TRANSACTION:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment