]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Short term fix for PR 28490.
authorJames E Wilson <wilson@specifixinc.com>
Fri, 15 Sep 2006 23:05:40 +0000 (16:05 -0700)
committerJim Wilson <wilson@gcc.gnu.org>
Fri, 15 Sep 2006 23:05:40 +0000 (16:05 -0700)
* config/ia64/ia64.c (ia64_legitimate_constant_p, cast CONST):
Handle symbol offsets same as they are handled in ia64_expand_move
and move_operand.

From-SVN: r116983

gcc/ChangeLog
gcc/config/ia64/ia64.c

index 74bc58dd7a9d56e5b8bafb5afaa8c04b3f78a2c7..148db8712dc8148e5b908697648c9c7a4924c53f 100644 (file)
@@ -1,3 +1,9 @@
+2006-09-15  Jim Wilson  <wilson@specifix.com>
+
+       * config/ia64/ia64.c (ia64_legitimate_constant_p, cast CONST):
+       Handle symbol offsets same as they are handled in ia64_expand_move
+       and move_operand.
+
 2006-09-16  Andreas Tobler  <a.tobler@schweiz.org>
 
        * loop-doloop.c (doloop_optimize): Change type of max_cost to int.
index d38a19a1501bd14b57008a1b0b33e7920ed08ec5..71953e29570984ac68708e9e118da0dc61bb92aa 100644 (file)
@@ -815,7 +815,29 @@ ia64_legitimate_constant_p (rtx x)
 
     case CONST:
     case SYMBOL_REF:
-      return tls_symbolic_operand_type (x) == 0;
+      /* ??? Short term workaround for PR 28490.  We must make the code here
+        match the code in ia64_expand_move and move_operand, even though they
+        are both technically wrong.  */
+      if (tls_symbolic_operand_type (x) == 0)
+       {
+         HOST_WIDE_INT addend = 0;
+         rtx op = x;
+
+         if (GET_CODE (op) == CONST
+             && GET_CODE (XEXP (op, 0)) == PLUS
+             && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT)
+           {
+             addend = INTVAL (XEXP (XEXP (op, 0), 1));
+             op = XEXP (XEXP (op, 0), 0);
+           }
+
+         if (any_offset_symbol_operand (op, GET_MODE (op)))
+           return true;
+         if (aligned_offset_symbol_operand (op, GET_MODE (op)))
+           return (addend & 0x3fff) == 0;
+         return false;
+       }
+      return false;
 
     case CONST_VECTOR:
       {