PR middle-end/28283
* expmed.c (expand_shift): Additionally check that the shift_cost
is not MAX_COST and that INTVAL(op1) is less than MAX_BITS_PER_WORD
before implementing a LSHIFT_EXPR as a sequence of additions.
* config/sh/sh.c (shift_costs): Return MAX_COST to inform the
middle-end that DImode shifts need to be synthesized by expand.
From-SVN: r115578
+2006-07-18 Roger Sayle <roger@eyesopen.com>
+
+ PR middle-end/28283
+ * expmed.c (expand_shift): Additionally check that the shift_cost
+ is not MAX_COST and that INTVAL(op1) is less than MAX_BITS_PER_WORD
+ before implementing a LSHIFT_EXPR as a sequence of additions.
+ * config/sh/sh.c (shift_costs): Return MAX_COST to inform the
+ middle-end that DImode shifts need to be synthesized by expand.
+
2006-07-18 Diego Novillo <dnovillo@redhat.com>
PR 28410
return 2;
/* Everything else is invalid, because there is no pattern for it. */
- return 10000;
+ return MAX_COST;
}
/* If shift by a non constant, then this will be expensive. */
if (GET_CODE (XEXP (x, 1)) != CONST_INT)
&& GET_CODE (op1) == CONST_INT
&& INTVAL (op1) > 0
&& INTVAL (op1) < GET_MODE_BITSIZE (mode)
- && shift_cost[mode][INTVAL (op1)] > INTVAL (op1) * add_cost[mode])
+ && INTVAL (op1) < MAX_BITS_PER_WORD
+ && shift_cost[mode][INTVAL (op1)] > INTVAL (op1) * add_cost[mode]
+ && shift_cost[mode][INTVAL (op1)] != MAX_COST)
{
int i;
for (i = 0; i < INTVAL (op1); i++)