mirror of git://gcc.gnu.org/git/gcc.git
tree-predcom.c (suitable_reference_p): Return false if the reference can throw.
* tree-predcom.c (suitable_reference_p): Return false if the reference can throw. From-SVN: r134319
This commit is contained in:
parent
b97d81535d
commit
7e80c6bf0a
|
|
@ -1,3 +1,8 @@
|
||||||
|
2008-04-15 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
* tree-predcom.c (suitable_reference_p): Return false if the
|
||||||
|
reference can throw.
|
||||||
|
|
||||||
2008-04-15 Jakub Jelinek <jakub@redhat.com>
|
2008-04-15 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c/35751
|
PR c/35751
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
2008-04-15 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
* gnat.dg/loop_optimization1.ad[sb]: New test.
|
||||||
|
|
||||||
2008-04-15 Jakub Jelinek <jakub@redhat.com>
|
2008-04-15 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c/35751
|
PR c/35751
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
-- { dg-do compile }
|
||||||
|
-- { dg-options "-O3" }
|
||||||
|
|
||||||
|
package body Loop_Optimization1 is
|
||||||
|
|
||||||
|
procedure Create (A : in out D; Val : Integer) is
|
||||||
|
|
||||||
|
M : constant Group_Chain_List := Group_Chains(Val);
|
||||||
|
G : constant Group_List := Groups(Val);
|
||||||
|
|
||||||
|
function Is_Visible (Group : Number) return Boolean is
|
||||||
|
begin
|
||||||
|
for I in M'Range loop
|
||||||
|
if Group = M(I).Groups(M(I).Length) then
|
||||||
|
return True;
|
||||||
|
end if;
|
||||||
|
end loop;
|
||||||
|
return False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
for I in A.L'Range loop
|
||||||
|
A.L(I) := new R(Is_Visible(G(I)));
|
||||||
|
end loop;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end Loop_Optimization1;
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
package Loop_Optimization1 is
|
||||||
|
|
||||||
|
type Number is range 0 .. 127;
|
||||||
|
|
||||||
|
type Group_List is array (Positive range <>) of Number;
|
||||||
|
|
||||||
|
subtype Index is Natural range 1 .. 5;
|
||||||
|
|
||||||
|
function Groups (T : Integer) return Group_List;
|
||||||
|
pragma Import (Ada, Groups);
|
||||||
|
|
||||||
|
type Group_Chain (Length : Index := 1) is record
|
||||||
|
Groups : Group_List(1 .. Length);
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type Group_Chain_List is array (Positive range <>) of Group_Chain;
|
||||||
|
|
||||||
|
function Group_Chains (T : Integer) return Group_Chain_List;
|
||||||
|
pragma Import (Ada, Group_Chains);
|
||||||
|
|
||||||
|
type R (I : Boolean) is null record;
|
||||||
|
|
||||||
|
type R_Access is access R;
|
||||||
|
|
||||||
|
type R_List is array (Positive range <>) of R_Access;
|
||||||
|
|
||||||
|
type R_List_Access is access R_List;
|
||||||
|
|
||||||
|
type D is record
|
||||||
|
L : R_List_Access;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
procedure Create (A : in out D; Val : Integer);
|
||||||
|
|
||||||
|
end Loop_Optimization1;
|
||||||
|
|
@ -590,7 +590,8 @@ suitable_reference_p (struct data_reference *a, enum ref_step_type *ref_step)
|
||||||
tree ref = DR_REF (a), step = DR_STEP (a);
|
tree ref = DR_REF (a), step = DR_STEP (a);
|
||||||
|
|
||||||
if (!step
|
if (!step
|
||||||
|| !is_gimple_reg_type (TREE_TYPE (ref)))
|
|| !is_gimple_reg_type (TREE_TYPE (ref))
|
||||||
|
|| tree_could_throw_p (ref))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (integer_zerop (step))
|
if (integer_zerop (step))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue