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: r189687
This commit is contained in:
parent
a3628196ec
commit
9402220cec
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -2584,6 +2584,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
|
||||
|
|
Loading…
Reference in New Issue