This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, i386]: Some further movstrict cleanups


Attached patch allows only SUBREGs as output operands to movstrict
expander and further allows only register operand outputs in various
corresponding splitters. This enforces the restriction, as documented
for STRICT_LOW_PART RTX:

     This expression code is used in only one context: as the
     destination operand of a 'set' expression.  In addition, the
     operand of this expression must be a non-paradoxical 'subreg'
     expression.

Additionally, the patch removes post-reload calls to movstrict
expander and consequently constructs RTXes involving STRICT_LOW_PART
with hard registers "by hand".

2019-07-30  Uroš Bizjak  <ubizjak@gmail.com>

    * config/i386/i386.md (movstrict<mode>): Use register_operand
    predicate for operand 0.  Add expander condition.  Assert that
    operand 0 is a SUBREG RTX.
    (*movstrict<mode>_1): Use register_operand predicate for operand 0.
    Update operand constraints and insn condition.
    (zero_extend<mode>si2_and): Do not call gen_movstrict<mode>.
    (zero_extendqihi2_and): Do not call gen_movstrictqi.
    (*setcc_qi_slp): Use register_operand predicate for operand 0.
    Update operand 0 constraints.
    (setcc_qi_slp splitters): Use register_operand predicate for operand 0.

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Committed to mainline SVN.

Uros.

Attachment: p.diff.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]