]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ifcvt.c (noce_try_cmove_arith): Use may_trap_or_fault_p in lieu of may_trap_p to...
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 26 Sep 2011 09:49:02 +0000 (09:49 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 26 Sep 2011 09:49:02 +0000 (09:49 +0000)
* 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

gcc/ChangeLog
gcc/ifcvt.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/opt21.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt21_pkg.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt21_pkg.ads [new file with mode: 0644]

index 71ab33bbd6246c2dd2b5665d920110302ea5aee1..1e68d986d0cba2615d97662610ff908c7e324512 100644 (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.
index 0fcacb6141fd8ec004b281ed9a3c87b28a4b6113..0476a8ab0460bed441be4b5285cf13ef65db7710 100644 (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;
index e7e259465d5dca8807cc0ddbe712a0218bc079b9..2546ce138a9fb131a746476dc312b0992283f550 100644 (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.
diff --git a/gcc/testsuite/gnat.dg/opt21.adb b/gcc/testsuite/gnat.dg/opt21.adb
new file mode 100644 (file)
index 0000000..c73fe9f
--- /dev/null
@@ -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;
diff --git a/gcc/testsuite/gnat.dg/opt21_pkg.adb b/gcc/testsuite/gnat.dg/opt21_pkg.adb
new file mode 100644 (file)
index 0000000..3c87321
--- /dev/null
@@ -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;
diff --git a/gcc/testsuite/gnat.dg/opt21_pkg.ads b/gcc/testsuite/gnat.dg/opt21_pkg.ads
new file mode 100644 (file)
index 0000000..251bf84
--- /dev/null
@@ -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;