aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoffrey Keating <geoffk@redhat.com>2001-07-19 19:43:44 +0000
committerGeoffrey Keating <geoffk@gcc.gnu.org>2001-07-19 19:43:44 +0000
commitd54ef62c4726edbe17d327535db1fd679f014200 (patch)
treed1511976936dbd59d6ae7eb5b9c8c917fa8c8935
parent7d46d516525c2a1977766d88306e85493b841add (diff)
downloadgcc-d54ef62c4726edbe17d327535db1fd679f014200.zip
gcc-d54ef62c4726edbe17d327535db1fd679f014200.tar.gz
gcc-d54ef62c4726edbe17d327535db1fd679f014200.tar.bz2
ifcvt.c (noce_try_store_flag_constants): Use trunc_int_for_mode when negating constants.
* ifcvt.c (noce_try_store_flag_constants): Use trunc_int_for_mode when negating constants. From-SVN: r44158
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/ifcvt.c16
2 files changed, 14 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 76125c6..e643a76 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2001-07-19 Geoffrey Keating <geoffk@redhat.com>
+
+ * ifcvt.c (noce_try_store_flag_constants): Use trunc_int_for_mode
+ when negating constants.
+
2001-07-19 Toon Moene <toon@moene.indiv.nluug.nl>
* tree.def: Document restriction on {L|R}SHIFT_EXPR's second argument.
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index d23fd3a..92bb6b5 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -642,14 +642,16 @@ noce_try_store_flag_constants (if_info)
int reversep;
HOST_WIDE_INT itrue, ifalse, diff, tmp;
int normalize, can_reverse;
+ enum machine_mode mode;
if (! no_new_pseudos
&& GET_CODE (if_info->a) == CONST_INT
&& GET_CODE (if_info->b) == CONST_INT)
{
+ mode = GET_MODE (if_info->x);
ifalse = INTVAL (if_info->a);
itrue = INTVAL (if_info->b);
- diff = itrue - ifalse;
+ diff = trunc_int_for_mode (mode, itrue - ifalse);
can_reverse = (reversed_comparison_code (if_info->cond, if_info->jump)
!= UNKNOWN);
@@ -680,7 +682,7 @@ noce_try_store_flag_constants (if_info)
if (reversep)
{
tmp = itrue; itrue = ifalse; ifalse = tmp;
- diff = -diff;
+ diff = trunc_int_for_mode (mode, -diff);
}
start_sequence ();
@@ -695,7 +697,7 @@ noce_try_store_flag_constants (if_info)
=> x = 3 + (test == 0); */
if (diff == STORE_FLAG_VALUE || diff == -STORE_FLAG_VALUE)
{
- target = expand_binop (GET_MODE (if_info->x),
+ target = expand_binop (mode,
(diff == STORE_FLAG_VALUE
? add_optab : sub_optab),
GEN_INT (ifalse), target, if_info->x, 0,
@@ -706,7 +708,7 @@ noce_try_store_flag_constants (if_info)
=> x = (test != 0) << 3; */
else if (ifalse == 0 && (tmp = exact_log2 (itrue)) >= 0)
{
- target = expand_binop (GET_MODE (if_info->x), ashl_optab,
+ target = expand_binop (mode, ashl_optab,
target, GEN_INT (tmp), if_info->x, 0,
OPTAB_WIDEN);
}
@@ -715,7 +717,7 @@ noce_try_store_flag_constants (if_info)
=> x = -(test != 0) | b; */
else if (itrue == -1)
{
- target = expand_binop (GET_MODE (if_info->x), ior_optab,
+ target = expand_binop (mode, ior_optab,
target, GEN_INT (ifalse), if_info->x, 0,
OPTAB_WIDEN);
}
@@ -724,11 +726,11 @@ noce_try_store_flag_constants (if_info)
=> x = (-(test != 0) & (b - a)) + a; */
else
{
- target = expand_binop (GET_MODE (if_info->x), and_optab,
+ target = expand_binop (mode, and_optab,
target, GEN_INT (diff), if_info->x, 0,
OPTAB_WIDEN);
if (target)
- target = expand_binop (GET_MODE (if_info->x), add_optab,
+ target = expand_binop (mode, add_optab,
target, GEN_INT (ifalse), if_info->x, 0,
OPTAB_WIDEN);
}