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:
parent
bdbebf669e
commit
ce438663a8
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
Loading…
Reference in New Issue