re PR target/21632 (ICE with small model attribute on ia64)
authorRichard Henderson <rth@redhat.com>
Wed, 18 May 2005 17:33:33 +0000 (10:33 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 18 May 2005 17:33:33 +0000 (10:33 -0700)
        PR target/21632
        * config/ia64/ia64.c (ia64_extra_constraint) <'T'>: Use
        small_addr_symbolic_operand.

From-SVN: r99910

gcc/ChangeLog
gcc/config/ia64/ia64.c
gcc/testsuite/gcc.target/ia64/small-addr-1.c [new file with mode: 0644]

index acc2bcb0610e28e2d60a45f8f2e2ae4a501b2694..9edcf433eeb95fc71586435bcde74d627371eec5 100644 (file)
@@ -1,3 +1,9 @@
+2005-05-18  Richard Henderson  <rth@redhat.com>
+
+       PR target/21632
+       * config/ia64/ia64.c (ia64_extra_constraint) <'T'>: Use
+       small_addr_symbolic_operand.
+
 2005-05-18  Jeff Law  <law@redhat.com>
 
        * tree-ssa-forwprop.c (forward_propagate_addr_expr): Do not
index da9f55cb5ee35900dbcd75b93e549feb2fa6c0e7..d23d3553d8d98498fa54a9488fce04e05b0ec595 100644 (file)
@@ -618,8 +618,7 @@ ia64_extra_constraint (rtx value, char c)
 
     case 'T':
       /* Symbol ref to small-address-area.  */
-      return (GET_CODE (value) == SYMBOL_REF
-             && SYMBOL_REF_SMALL_ADDR_P (value));
+      return small_addr_symbolic_operand (value, VOIDmode);
 
     case 'U':
       /* Vector zero.  */
diff --git a/gcc/testsuite/gcc.target/ia64/small-addr-1.c b/gcc/testsuite/gcc.target/ia64/small-addr-1.c
new file mode 100644 (file)
index 0000000..8462186
--- /dev/null
@@ -0,0 +1,23 @@
+/* PR target/21632 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+struct S
+{
+  void *s[256];
+};
+
+struct T
+{
+  long t[23];
+  struct S *u;
+};
+
+extern struct T __attribute__((model (small))) v;
+
+void *
+foo (void)
+{
+  return v.u->s[0];
+}
+