Commit 51d2abeb by Eric Botcazou Committed by Eric Botcazou

tree-ssa-tail-merge.c (same_succ_hash): Hash the static chain of a call statement, if any.

	* tree-ssa-tail-merge.c (same_succ_hash): Hash the static chain of a
	call statement, if any.
	(gimple_equal_p) <GIMPLE_CALL>: Compare the static chain of the call
	statements, if any.  Tidy up.

From-SVN: r211342
parent 25608e3a
2014-06-07 Eric Botcazou <ebotcazou@adacore.com>
* tree-ssa-tail-merge.c (same_succ_hash): Hash the static chain of a
call statement, if any.
(gimple_equal_p) <GIMPLE_CALL>: Compare the static chain of the call
statements, if any. Tidy up.
2014-06-06 Michael Meissner <meissner@linux.vnet.ibm.com> 2014-06-06 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/61431 PR target/61431
......
2014-06-07 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/opt38.adb: New test.
* gnat.dg/opt38_pkg.ad[sb]: New helper.
2014-06-07 Hans-Peter Nilsson <hp@bitrange.com> 2014-06-07 Hans-Peter Nilsson <hp@bitrange.com>
PR target/18343 PR target/18343
......
-- { dg-do run }
-- { dg-options "-O2 -gnatn" }
with Opt38_Pkg; use Opt38_Pkg;
procedure Opt38 is
begin
Test (-1);
end;
package body Opt38_Pkg is
procedure Proc (I : Integer);
pragma Inline (Proc);
procedure Proc (I : Integer) is
procedure Inner;
pragma No_Inline (Inner);
procedure Inner is
begin
if I /= 110 then
raise Program_Error;
end if;
end;
begin
if I > 0 then
Inner;
end if;
end;
procedure Test (I : Integer) is
begin
if I > -1 then
Proc (I);
else
Proc (I + 111);
end if;
end;
end Opt38_Pkg;
package Opt38_Pkg is
procedure Test (I : Integer);
end Opt38_Pkg;
...@@ -481,7 +481,11 @@ same_succ_hash (const_same_succ e) ...@@ -481,7 +481,11 @@ same_succ_hash (const_same_succ e)
hashval = iterative_hash_hashval_t hashval = iterative_hash_hashval_t
((hashval_t) gimple_call_internal_fn (stmt), hashval); ((hashval_t) gimple_call_internal_fn (stmt), hashval);
else else
hashval = iterative_hash_expr (gimple_call_fn (stmt), hashval); {
hashval = iterative_hash_expr (gimple_call_fn (stmt), hashval);
if (gimple_call_chain (stmt))
hashval = iterative_hash_expr (gimple_call_chain (stmt), hashval);
}
for (i = 0; i < gimple_call_num_args (stmt); i++) for (i = 0; i < gimple_call_num_args (stmt); i++)
{ {
arg = gimple_call_arg (stmt, i); arg = gimple_call_arg (stmt, i);
...@@ -1121,18 +1125,23 @@ gimple_equal_p (same_succ same_succ, gimple s1, gimple s2) ...@@ -1121,18 +1125,23 @@ gimple_equal_p (same_succ same_succ, gimple s1, gimple s2)
switch (gimple_code (s1)) switch (gimple_code (s1))
{ {
case GIMPLE_CALL: case GIMPLE_CALL:
if (gimple_call_num_args (s1) != gimple_call_num_args (s2))
return false;
if (!gimple_call_same_target_p (s1, s2)) if (!gimple_call_same_target_p (s1, s2))
return false; return false;
t1 = gimple_call_chain (s1);
t2 = gimple_call_chain (s2);
if (!gimple_operand_equal_value_p (t1, t2))
return false;
if (gimple_call_num_args (s1) != gimple_call_num_args (s2))
return false;
for (i = 0; i < gimple_call_num_args (s1); ++i) for (i = 0; i < gimple_call_num_args (s1); ++i)
{ {
t1 = gimple_call_arg (s1, i); t1 = gimple_call_arg (s1, i);
t2 = gimple_call_arg (s2, i); t2 = gimple_call_arg (s2, i);
if (gimple_operand_equal_value_p (t1, t2)) if (!gimple_operand_equal_value_p (t1, t2))
continue; return false;
return false;
} }
lhs1 = gimple_get_lhs (s1); lhs1 = gimple_get_lhs (s1);
......
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