tree-ssa-forwprop.c (combine_conversions): Punt if the RHS of the defining statement is a SSA name that occurs in abnormal...

* tree-ssa-forwprop.c (combine_conversions): Punt if the RHS of the
	defining statement is a SSA name that occurs in abnormal PHIs.

From-SVN: r189688
This commit is contained in:
Eric Botcazou 2012-07-19 21:40:23 +00:00 committed by Eric Botcazou
parent 7b677d9ded
commit 225adb18c2
8 changed files with 82 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2012-07-19 Eric Botcazou <ebotcazou@adacore.com>
* tree-ssa-forwprop.c (combine_conversions): Punt if the RHS of the
defining statement is a SSA name that occurs in abnormal PHIs.
2012-07-19 Eric Botcazou <ebotcazou@adacore.com>
* gimple-fold.c (canonicalize_constructor_val): Strip only useless type

View File

@ -1,3 +1,9 @@
2012-07-19 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/opt25.adb: New test.
* gnat.dg/opt25_pkg1.ad[sb]: New helper.
* gnat.dg/opt25_pkg2.ad[sb]: Likewise.
2012-07-19 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/aggr20.ad[sb]: New test.

View File

@ -0,0 +1,17 @@
-- { dg-do compile }
-- { dg-options "-O" }
with Opt25_Pkg1;
with Opt25_Pkg2;
procedure Opt25 (B1, B2 : in out Boolean) is
package Local_Pack_Instance is new Opt25_Pkg1 (Boolean, True);
package Local_Stack is new Opt25_Pkg2 (Integer, 0);
S : Local_Stack.Stack := Local_Stack.Default_Stack;
begin
Local_Pack_Instance.Swap (B1, B2);
end;

View File

@ -0,0 +1,10 @@
package body Opt25_Pkg1 is
procedure Swap (A, B : in out T) is
Tmp : T := A;
begin
A := B;
B := Tmp;
end Swap;
end Opt25_Pkg1;

View File

@ -0,0 +1,11 @@
generic
type T is private;
Init_Value : T;
package Opt25_Pkg1 is
Var : T := Init_Value;
procedure Swap (A, B : in out T);
end Opt25_Pkg1;

View File

@ -0,0 +1,8 @@
package body Opt25_Pkg2 is
function Default_Stack return Stack is
begin
return Default_Stack_Var;
end Default_Stack;
end Opt25_Pkg2;

View File

@ -0,0 +1,20 @@
generic
type Value is private;
Init_Val : Value;
package Opt25_Pkg2 is
type Stack (Size : Natural) is private;
function Default_Stack return Stack;
private
type Value_Array is array (Natural range <>) of Value;
type Stack (Size : Natural) is record
Store : Value_Array (1 .. Size);
end record;
Default_Stack_Var : Stack (10);
end Opt25_Pkg2;

View File

@ -2247,6 +2247,11 @@ combine_conversions (gimple_stmt_iterator *gsi)
unsigned int final_prec = TYPE_PRECISION (type);
int final_unsignedp = TYPE_UNSIGNED (type);
/* Don't propagate ssa names that occur in abnormal phis. */
if (TREE_CODE (defop0) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (defop0))
return 0;
/* In addition to the cases of two conversions in a row
handled below, if we are converting something to its own
type via an object of identical or wider precision, neither