]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/40577 (ICE on valid code: in extract_insn)
authorUros Bizjak <ubizjak@gmail.com>
Tue, 4 Aug 2009 19:25:05 +0000 (21:25 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 4 Aug 2009 19:25:05 +0000 (21:25 +0200)
Backport from mainline:
2009-08-03  Uros Bizjak  <ubizjak@gmail.com>

* config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST
constants referencing TLS symbols.

2009-07-29  Uros Bizjak  <ubizjak@gmail.com>

PR target/40577
* config/alpha/alpha.c (alpha_expand_unaligned_store): Convert src
to DImode when generating insq_le insn.

From-SVN: r150466

gcc/ChangeLog
gcc/config/alpha/alpha.c

index 0443ba282f668c68f6a6b393251103f6f8fb6a94..3dbb47506882baddc872d8fae0583616d65fd20b 100644 (file)
@@ -1,3 +1,17 @@
+2009-08-04  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline:
+       2009-08-03  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST
+       constants referencing TLS symbols.
+
+       2009-07-29  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/40577
+       * config/alpha/alpha.c (alpha_expand_unaligned_store): Convert src
+       to DImode when generating insq_le insn.
+
 2008-08-04  Richard Guenther  <rguenther@suse.de>
 
        * BASE-VER: Set to 4.3.5.
index e327cd44a53d241105d4fcff8a20ef651470e706..44c5776ab4aad8b789814e6af28709ef45fec9fd 100644 (file)
@@ -2051,11 +2051,22 @@ alpha_legitimate_constant_p (rtx x)
 
   switch (GET_CODE (x))
     {
-    case CONST:
     case LABEL_REF:
     case HIGH:
       return true;
 
+    case CONST:
+      if (GET_CODE (XEXP (x, 0)) == PLUS
+         && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT)
+       x = XEXP (XEXP (x, 0), 0);
+      else
+       return true;
+
+      if (GET_CODE (x) != SYMBOL_REF)
+       return true;
+
+      /* FALLTHRU */
+
     case SYMBOL_REF:
       /* TLS symbols are never valid.  */
       return SYMBOL_REF_TLS_MODEL (x) == 0;
@@ -3541,7 +3552,7 @@ alpha_expand_unaligned_store (rtx dst, rtx src,
              emit_insn (gen_insll_le (insl, gen_lowpart (SImode, src), addr));
              break;
            case 8:
-             emit_insn (gen_insql_le (insl, src, addr));
+             emit_insn (gen_insql_le (insl, gen_lowpart (DImode, src), addr));
              break;
            }
        }