aboutsummaryrefslogtreecommitdiff
path: root/gcc/emit-rtl.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@redhat.com>2002-06-28 15:43:54 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2002-06-28 15:43:54 +0000
commit53501a19fa31272638948d247ad7988afa69d3a4 (patch)
treeb551da7ab87d09377d299d36ba9dc9390c9f471c /gcc/emit-rtl.c
parent20c2d1fea3d673ea7ee8e6aedf294130797fde68 (diff)
downloadgcc-53501a19fa31272638948d247ad7988afa69d3a4.zip
gcc-53501a19fa31272638948d247ad7988afa69d3a4.tar.gz
gcc-53501a19fa31272638948d247ad7988afa69d3a4.tar.bz2
Prevent creation of paradoxical FLOAT_MODE subregs
From-SVN: r55064
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r--gcc/emit-rtl.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 77697ae..956d38d 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -964,6 +964,11 @@ gen_lowpart_common (mode, x)
> ((xsize + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)))
return 0;
+ /* Don't allow generating paradoxical FLOAT_MODE subregs. */
+ if (GET_MODE_CLASS (mode) == MODE_FLOAT
+ && GET_MODE (x) != VOIDmode && msize > xsize)
+ return 0;
+
offset = subreg_lowpart_offset (mode, GET_MODE (x));
if ((GET_CODE (x) == ZERO_EXTEND || GET_CODE (x) == SIGN_EXTEND)