Commit ce438663 by Eric Botcazou Committed by Eric Botcazou

ifcvt.c (noce_try_cmove_arith): Use may_trap_or_fault_p in lieu of may_trap_p to…

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
parent bdbebf66
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> 2011-09-26 Georg-Johann Lay <avr@gjlay.de>
* config/avr/avr-protos.h (output_reload_inhi): Change prototype. * config/avr/avr-protos.h (output_reload_inhi): Change prototype.
...@@ -1519,9 +1519,9 @@ noce_try_cmove_arith (struct noce_if_info *if_info) ...@@ -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 /* ??? 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. */ 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; return FALSE;
/* if (test) x = a + b; else x = c - d; /* if (test) x = a + b; else x = c - d;
......
2011-09-26 Eric Botcazou <ebotcazou@adacore.com> 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. * gnat.dg/opt20.ad[sb]: New test.
* gnat.dg/opt20_pkg.ads: New helper. * gnat.dg/opt20_pkg.ads: New helper.
......
-- { 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;
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;
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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment