From c722c7daaf9b2ad6435f075fce2573b9c58112ec Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 3 Sep 2007 15:35:52 +0000 Subject: [PATCH] re PR middle-end/33290 (gcc.c-torture/execute/930921-1.c fails at -O1 and above now) gcc/ PR middle-end/33290 * optabs.c (avoid_expensive_constant): Canonicalize CONST_INTs before forcing them into a register. From-SVN: r128048 --- gcc/ChangeLog | 6 ++++++ gcc/optabs.c | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9bdd53f6a01..3526e61feae 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-09-03 Richard Sandiford + + PR middle-end/33290 + * optabs.c (avoid_expensive_constant): Canonicalize CONST_INTs + before forcing them into a register. + 2007-09-03 Richard Sandiford * config/mips/mips.md (fetchop_bit): Use define_code_iterator diff --git a/gcc/optabs.c b/gcc/optabs.c index fee7c5039cc..8d0139e8fca 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -1290,7 +1290,13 @@ avoid_expensive_constant (enum machine_mode mode, optab binoptab, && CONSTANT_P (x) && rtx_cost (x, binoptab->code) > COSTS_N_INSNS (1)) { - if (GET_MODE (x) != VOIDmode) + if (GET_CODE (x) == CONST_INT) + { + HOST_WIDE_INT intval = trunc_int_for_mode (INTVAL (x), mode); + if (intval != INTVAL (x)) + x = GEN_INT (intval); + } + else x = convert_modes (mode, VOIDmode, x, unsignedp); x = force_reg (mode, x); }