summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>2002-07-10 18:51:20 +0000
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>2002-07-10 18:51:20 +0000
commit621a189cdf6ef077bb828c950bc0d561eca0b8f3 (patch)
tree1fb2ff706d619a9822938fad912ec418d76d923b /gcc
parentbfb2681d09df50cc9a301e4ebb38a9c3a2107d4b (diff)
downloadgcc-621a189cdf6ef077bb828c950bc0d561eca0b8f3.tar.gz
* combine.c (gen_lowpart_for_combine): Handle vector modes.
Supply non-VOID mode to simplify_gen_subreg. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55375 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/combine.c16
2 files changed, 13 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2db2b0cb4bd..a71d09dcf5c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Wed Jul 10 19:50:03 2002 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * combine.c (gen_lowpart_for_combine): Handle vector modes.
+ Supply non-VOID mode to simplify_gen_subreg.
+
Wed Jul 10 18:48:55 CEST 2002 Jan Hubicka <jh@suse.cz>
* i386.c (ix86_init_mmx_sse_builtins): Fix thinko.
diff --git a/gcc/combine.c b/gcc/combine.c
index 646abec2e99..f9d4b406254 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -9831,12 +9831,6 @@ gen_lowpart_for_combine (mode, x)
|| GET_MODE_SIZE (GET_MODE (x)) == GET_MODE_SIZE (mode)))
return gen_rtx_CLOBBER (GET_MODE (x), const0_rtx);
- /* simplify_gen_subreg does not know how to handle the case where we try
- to convert an integer constant to a vector.
- ??? We could try to teach it to generate CONST_VECTORs. */
- if (GET_MODE (x) == VOIDmode && VECTOR_MODE_P (mode))
- return gen_rtx_CLOBBER (GET_MODE (x), const0_rtx);
-
/* X might be a paradoxical (subreg (mem)). In that case, gen_lowpart
won't know what to do. So we will strip off the SUBREG here and
process normally. */
@@ -9903,9 +9897,15 @@ gen_lowpart_for_combine (mode, x)
{
int offset = 0;
rtx res;
+ enum machine_mode sub_mode = GET_MODE (x);
- offset = subreg_lowpart_offset (mode, GET_MODE (x));
- res = simplify_gen_subreg (mode, x, GET_MODE (x), offset);
+ offset = subreg_lowpart_offset (mode, sub_mode);
+ if (sub_mode == VOIDmode)
+ {
+ sub_mode = int_mode_for_mode (mode);
+ x = gen_lowpart_common (sub_mode, x);
+ }
+ res = simplify_gen_subreg (mode, x, sub_mode, offset);
if (res)
return res;
return gen_rtx_CLOBBER (GET_MODE (x), const0_rtx);