summaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2010-08-25 17:49:26 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2010-08-25 17:49:26 +0000
commit4ec7d822a5fe04c7adcd56d58482c78239bb793f (patch)
tree8a8acf4b9ce8ddbeb52fe565d42d09aae104ca03 /gcc/combine.c
parent3f1e069fff517476f6150b172544a965e3d20dc6 (diff)
downloadgcc-4ec7d822a5fe04c7adcd56d58482c78239bb793f.tar.gz
PR rtl-optimization/45400
* combine.c (simplify_shift_const_1) <case SUBREG>: Only use SUBREG_REG if both modes are of MODE_INT class. * g++.dg/other/i386-8.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163551 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 94e68392d98..acff54198e5 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -9858,7 +9858,9 @@ simplify_shift_const_1 (enum rtx_code code, enum machine_mode result_mode,
> GET_MODE_SIZE (GET_MODE (varop)))
&& (unsigned int) ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (varop)))
+ (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
- == mode_words)
+ == mode_words
+ && GET_MODE_CLASS (GET_MODE (varop)) == MODE_INT
+ && GET_MODE_CLASS (GET_MODE (SUBREG_REG (varop))) == MODE_INT)
{
varop = SUBREG_REG (varop);
if (GET_MODE_SIZE (GET_MODE (varop)) > GET_MODE_SIZE (mode))