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] |
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] |