mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-18 10:00:35 +08:00
expr: Allow scalar_int_mode target mode when converting a constant
is_int_mode does not allow MODE_PARTIAL_INT modes, so convert_modes was not allowing a constant value to be converted to a MODE_PARTIAL_INT for use as operand 2 in patterns such as ashlpsi3. The constant had to be copied into a register before it could be used, but now can be used directly as an operand without any copying. gcc/ChangeLog: * expr.c (convert_modes): Allow a constant integer to be converted to any scalar int mode.
This commit is contained in:
parent
ade6e7204c
commit
4821e0aabe
@ -696,12 +696,12 @@ convert_modes (machine_mode mode, machine_mode oldmode, rtx x, int unsignedp)
|
||||
return x;
|
||||
|
||||
if (CONST_SCALAR_INT_P (x)
|
||||
&& is_int_mode (mode, &int_mode))
|
||||
&& is_a <scalar_int_mode> (mode, &int_mode))
|
||||
{
|
||||
/* If the caller did not tell us the old mode, then there is not
|
||||
much to do with respect to canonicalization. We have to
|
||||
assume that all the bits are significant. */
|
||||
if (GET_MODE_CLASS (oldmode) != MODE_INT)
|
||||
if (!is_a <scalar_int_mode> (oldmode))
|
||||
oldmode = MAX_MODE_INT;
|
||||
wide_int w = wide_int::from (rtx_mode_t (x, oldmode),
|
||||
GET_MODE_PRECISION (int_mode),
|
||||
|
Loading…
x
Reference in New Issue
Block a user