i386.md (*testqi_ext_3): No need to handle memory operands in a special way.
* config/i386/i386.md (*testqi_ext_3): No need to handle memory operands in a special way. Assert that pos+len <= mode precision. From-SVN: r244108
This commit is contained in:
parent
295ce2e534
commit
1dc06b76ba
|
@ -1,3 +1,8 @@
|
||||||
|
2017-01-05 Uros Bizjak <ubizjak@gmail.com>
|
||||||
|
|
||||||
|
* config/i386/i386.md (*testqi_ext_3): No need to handle memory
|
||||||
|
operands in a special way. Assert that pos+len <= mode precision.
|
||||||
|
|
||||||
2017-01-05 Jakub Jelinek <jakub@redhat.com>
|
2017-01-05 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* common.opt (fvect-cost-model): Remove RejectNegative flag, use
|
* common.opt (fvect-cost-model): Remove RejectNegative flag, use
|
||||||
|
@ -208,8 +213,7 @@
|
||||||
(signbit<mode>2_dm): Delete using <Fsignbit> and just use "wa".
|
(signbit<mode>2_dm): Delete using <Fsignbit> and just use "wa".
|
||||||
Update the length attribute if the value is in a GPR.
|
Update the length attribute if the value is in a GPR.
|
||||||
(signbit<mode>2_dm_<su>ext): Add combiner pattern to eliminate
|
(signbit<mode>2_dm_<su>ext): Add combiner pattern to eliminate
|
||||||
the sign or zero extension instruction, since the value is always
|
the sign or zero extension instruction, since the value is always 0/1.
|
||||||
0/1.
|
|
||||||
(signbit<mode>2_dm2): Delete using <Fsignbit>.
|
(signbit<mode>2_dm2): Delete using <Fsignbit>.
|
||||||
|
|
||||||
PR target/78953
|
PR target/78953
|
||||||
|
@ -220,8 +224,7 @@
|
||||||
|
|
||||||
2017-01-03 Ian Lance Taylor <iant@google.com>
|
2017-01-03 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
* godump.c (go_format_type): Treat ENUMERAL_TYPE like
|
* godump.c (go_format_type): Treat ENUMERAL_TYPE like INTEGER_TYPE.
|
||||||
INTEGER_TYPE.
|
|
||||||
|
|
||||||
2017-01-03 Martin Sebor <msebor@redhat.com>
|
2017-01-03 Martin Sebor <msebor@redhat.com>
|
||||||
|
|
||||||
|
|
|
@ -8007,36 +8007,30 @@
|
||||||
rtx val = operands[2];
|
rtx val = operands[2];
|
||||||
HOST_WIDE_INT len = INTVAL (operands[3]);
|
HOST_WIDE_INT len = INTVAL (operands[3]);
|
||||||
HOST_WIDE_INT pos = INTVAL (operands[4]);
|
HOST_WIDE_INT pos = INTVAL (operands[4]);
|
||||||
machine_mode mode, submode;
|
machine_mode mode = GET_MODE (val);
|
||||||
|
|
||||||
mode = GET_MODE (val);
|
if (SUBREG_P (val))
|
||||||
if (MEM_P (val))
|
|
||||||
{
|
{
|
||||||
/* ??? Combine likes to put non-volatile mem extractions in QImode
|
machine_mode submode = GET_MODE (SUBREG_REG (val));
|
||||||
no matter the size of the test. So find a mode that works. */
|
|
||||||
if (! MEM_VOLATILE_P (val))
|
/* Narrow paradoxical subregs to prevent partial register stalls. */
|
||||||
|
if (GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (submode)
|
||||||
|
&& GET_MODE_CLASS (submode) == MODE_INT)
|
||||||
{
|
{
|
||||||
mode = smallest_mode_for_size (pos + len, MODE_INT);
|
val = SUBREG_REG (val);
|
||||||
val = adjust_address (val, mode, 0);
|
mode = submode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (SUBREG_P (val)
|
|
||||||
&& (submode = GET_MODE (SUBREG_REG (val)),
|
/* Small HImode tests can be converted to QImode. */
|
||||||
GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (submode))
|
if (register_operand (val, HImode) && pos + len <= 8)
|
||||||
&& pos + len <= GET_MODE_BITSIZE (submode)
|
|
||||||
&& GET_MODE_CLASS (submode) == MODE_INT)
|
|
||||||
{
|
{
|
||||||
/* Narrow a paradoxical subreg to prevent partial register stalls. */
|
|
||||||
mode = submode;
|
|
||||||
val = SUBREG_REG (val);
|
|
||||||
}
|
|
||||||
else if (mode == HImode && pos + len <= 8)
|
|
||||||
{
|
|
||||||
/* Small HImode tests can be converted to QImode. */
|
|
||||||
mode = QImode;
|
|
||||||
val = gen_lowpart (QImode, val);
|
val = gen_lowpart (QImode, val);
|
||||||
|
mode = QImode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gcc_assert (pos + len <= GET_MODE_PRECISION (mode));
|
||||||
|
|
||||||
wide_int mask
|
wide_int mask
|
||||||
= wi::shifted_mask (pos, len, false, GET_MODE_PRECISION (mode));
|
= wi::shifted_mask (pos, len, false, GET_MODE_PRECISION (mode));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue