mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-13 13:54:05 +08:00
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>
|
||||
|
||||
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>
|
||||
|
||||
PR c/35751
|
||||
|
27
gcc/testsuite/gnat.dg/loop_optimization1.adb
Normal file
27
gcc/testsuite/gnat.dg/loop_optimization1.adb
Normal file
@ -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;
|
35
gcc/testsuite/gnat.dg/loop_optimization1.ads
Normal file
35
gcc/testsuite/gnat.dg/loop_optimization1.ads
Normal file
@ -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);
|
||||
|
||||
if (!step
|
||||
|| !is_gimple_reg_type (TREE_TYPE (ref)))
|
||||
|| !is_gimple_reg_type (TREE_TYPE (ref))
|
||||
|| tree_could_throw_p (ref))
|
||||
return false;
|
||||
|
||||
if (integer_zerop (step))
|
||||
|
Loading…
Reference in New Issue
Block a user