]> gcc.gnu.org Git - gcc.git/commitdiff
emit-rtl.c (subreg_hard_regno): Only do HARD_REGNO_MODE_OK check if check_mode is...
authorJakub Jelinek <jakub@redhat.com>
Wed, 25 Apr 2001 09:57:00 +0000 (11:57 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 25 Apr 2001 09:57:00 +0000 (11:57 +0200)
* emit-rtl.c (subreg_hard_regno): Only do HARD_REGNO_MODE_OK check
if check_mode is non-zero.

* gcc.dg/20010423-1.c: New test.

From-SVN: r41537

gcc/ChangeLog
gcc/emit-rtl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/20010423-1.c [new file with mode: 0644]

index e22d747c2cef6809d51f98dab317afa8405517a6..661a51bd8f9a3ab7c24eb886b175746cfa7e4fec 100644 (file)
@@ -1,3 +1,8 @@
+2001-04-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * emit-rtl.c (subreg_hard_regno): Only do HARD_REGNO_MODE_OK check
+       if check_mode is non-zero.
+
 2001-04-25  Jakub Jelinek  <jakub@redhat.com>
 
        * config/i386/i386.c (ix86_expand_int_movcc): If overlap between
index 2acb55547fa5d28d2530109a21d04bcc6b932c0f..480ff15ee98c923c409398841bdee3db99c07fc1 100644 (file)
@@ -719,7 +719,7 @@ subreg_hard_regno (x, check_mode)
   base_regno = REGNO (reg);
   if (base_regno >= FIRST_PSEUDO_REGISTER)
     abort ();
-  if (! HARD_REGNO_MODE_OK (base_regno, GET_MODE (reg)))
+  if (check_mode && ! HARD_REGNO_MODE_OK (base_regno, GET_MODE (reg)))
     abort ();
 
   /* Catch non-congruent offsets too.  */
index d53a32e1c9d46f3e67d8e4c0801652f4bb231fc8..f4c2fd1eb68eed93cbe511014a5522b40481423a 100644 (file)
@@ -1,3 +1,7 @@
+2001-04-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.dg/20010423-1.c: New test.
+
 2001-04-25  Jakub Jelinek  <jakub@redhat.com>
 
        * gcc.c-torture/execute/20010422-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/20010423-1.c b/gcc/testsuite/gcc.dg/20010423-1.c
new file mode 100644 (file)
index 0000000..06af789
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-do compile { target ia64-*-* } } */
+/* { dg-options "-O2" } */
+
+int __sync_fetch_and_add_si (int *, int);
+
+inline unsigned int
+bar (volatile unsigned int *mem, unsigned int val)
+{
+  return __sync_fetch_and_add_si((int *)mem, (int)val);
+}
+
+volatile unsigned int x;
+
+void foo (unsigned short *a)
+{
+  *a = bar (&x, 1) + 1;
+}
This page took 0.111031 seconds and 5 git commands to generate.