From: Uros Bizjak Date: Tue, 4 Aug 2009 19:25:05 +0000 (+0200) Subject: backport: re PR target/40577 (ICE on valid code: in extract_insn) X-Git-Tag: releases/gcc-4.3.5~449 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=914ab7949a8b3bc48dc64298bec1ca914d437e32;p=thirdparty%2Fgcc.git backport: re PR target/40577 (ICE on valid code: in extract_insn) Backport from mainline: 2009-08-03 Uros Bizjak * config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST constants referencing TLS symbols. 2009-07-29 Uros Bizjak PR target/40577 * config/alpha/alpha.c (alpha_expand_unaligned_store): Convert src to DImode when generating insq_le insn. From-SVN: r150466 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0443ba282f66..3dbb47506882 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2009-08-04 Uros Bizjak + + Backport from mainline: + 2009-08-03 Uros Bizjak + + * config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST + constants referencing TLS symbols. + + 2009-07-29 Uros Bizjak + + 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 * BASE-VER: Set to 4.3.5. diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index e327cd44a53d..44c5776ab4aa 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -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; } }