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]: Do not mix mask registers with other register sets


Hello!

As said above i386.c, inline_secondary_memory_needed:

--cut here--
   The function can't work reliably when one of the CLASSES is a class
   containing registers from multiple sets.  We avoid this by never combining
   different sets in a single alternative in the machine description.
   Ensure that this constraint holds to avoid unexpected surprises.
--cut here--

The patch enforces this constraint also for mask registers and fixes
an oversight in *movsi_internal.

2017-01-17  Uros Bizjak  <ubizjak@gmail.com>

    * config/i386/i386.h (MASK_CLASS_P): New define.
    * config/i386/i386.c (inline_secondary_memory_needed): Ensure that
    there are no registers from different register sets also when
    mask registers are used.  Update function comment.
    * config/i386/i386.md (*movsi_internal): Split (*k/*krm) alternative
    to (*k/*r) and (*k/*km) alternatives.

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]