aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2003-08-23 23:18:58 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2003-08-23 21:18:58 +0000
commitebe75517d4ffdb7045a607c6c5426306dbf662ee (patch)
treeef23e0b47fa47061a7aed684f7759a059e614a6f /gcc/expr.c
parent066ec9c97beec87ae5763b7cd541d3302f81ebce (diff)
downloadgcc-ebe75517d4ffdb7045a607c6c5426306dbf662ee.zip
gcc-ebe75517d4ffdb7045a607c6c5426306dbf662ee.tar.gz
gcc-ebe75517d4ffdb7045a607c6c5426306dbf662ee.tar.bz2
re PR c/11369 (too relaxed checking with -Wstrict-prototypes)
PR target/11369 * i386.c (ix86_expand_carry_flag_compare): Validate operand. PR target/11031 * i386.c (const_0_to_3_operand, const_0_to_7_operand, const_0_to_15_operand, const_0_to_255_operand): New predicates. * i386.h (PREDICATE_CODES): Add these. * i386.c (pinsrw and pextrw patterns): Use them. PR target/10984 * i386.c (ix86_expand_binop_builtin): Behave sanely for VOIDmodes. PR target/8869 * expr.c (convert_modes): Deal properly with integer to vector constant conversion. PR target/8871 * i386.md (zero_extendsidi2*): Add MMX and SSE alternatives. From-SVN: r70751
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 0dd4940..b7f71c6 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -1419,6 +1419,15 @@ convert_modes (enum machine_mode mode, enum machine_mode oldmode, rtx x, int uns
return gen_lowpart (mode, x);
}
+ /* Converting from integer constant into mode is always equivalent to an
+ subreg operation. */
+ if (VECTOR_MODE_P (mode) && GET_MODE (x) == VOIDmode)
+ {
+ if (GET_MODE_BITSIZE (mode) != GET_MODE_BITSIZE (oldmode))
+ abort ();
+ return simplify_gen_subreg (mode, x, oldmode, 0);
+ }
+
temp = gen_reg_rtx (mode);
convert_move (temp, x, unsignedp);
return temp;