ifcvt.c (noce_try_cmove_arith): Use may_trap_or_fault_p in lieu of may_trap_p to detect loads that may trap of...

* ifcvt.c (noce_try_cmove_arith): Use may_trap_or_fault_p in lieu of
	may_trap_p to detect loads that may trap of fault.

From-SVN: r179188
This commit is contained in:
Eric Botcazou 2011-09-26 09:49:02 +00:00 committed by Eric Botcazou
parent bdbebf669e
commit ce438663a8
6 changed files with 55 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2011-09-26 Eric Botcazou <ebotcazou@adacore.com>
* ifcvt.c (noce_try_cmove_arith): Use may_trap_or_fault_p in lieu of
may_trap_p to detect loads that may trap of fault.
2011-09-26 Georg-Johann Lay <avr@gjlay.de>
* config/avr/avr-protos.h (output_reload_inhi): Change prototype.

View File

@ -1519,9 +1519,9 @@ noce_try_cmove_arith (struct noce_if_info *if_info)
}
/* ??? We could handle this if we knew that a load from A or B could
not fault. This is also true if we've already loaded
not trap or fault. This is also true if we've already loaded
from the address along the path from ENTRY. */
else if (may_trap_p (a) || may_trap_p (b))
else if (may_trap_or_fault_p (a) || may_trap_or_fault_p (b))
return FALSE;
/* if (test) x = a + b; else x = c - d;

View File

@ -1,3 +1,8 @@
2011-09-26 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/opt21.adb: New test.
* gnat.dg/opt21_pkg.ad[sb]: New helper.
2011-09-26 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/opt20.ad[sb]: New test.

View File

@ -0,0 +1,11 @@
-- { dg-do run }
-- { dg-options "-O2" }
with System;
with Opt21_Pkg; use Opt21_Pkg;
procedure Opt21 is
V : System.Address := Convert (null);
begin
null;
end;

View File

@ -0,0 +1,17 @@
package body Opt21_Pkg is
function Get_Object (Object : not null access R) return System.Address is
begin
return Object.Ptr;
end;
function Convert (W : Obj) return System.Address is
begin
if W = null then
return System.Null_Address;
else
return Get_Object (W);
end if;
end;
end Opt21_Pkg;

View File

@ -0,0 +1,15 @@
with System;
package Opt21_Pkg is
type R is record
Ptr : System.Address := System.Null_Address;
end record;
type Obj is access all R;
function Get_Object (Object : not null access R) return System.Address;
function Convert (W : Obj) return System.Address;
end Opt21_Pkg;