diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2016-12-27 22:25:09 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2016-12-27 22:25:09 +0100 |
commit | 1b5d6ccdcfa28302e03b1a69609d8aea1a50e43a (patch) | |
tree | 10708263b150808c784769f8bfa7dc70b8b96e6b /gcc | |
parent | ab4bb1b30019f18efec222d2ab3d3c91d2a98622 (diff) | |
download | gcc-1b5d6ccdcfa28302e03b1a69609d8aea1a50e43a.zip gcc-1b5d6ccdcfa28302e03b1a69609d8aea1a50e43a.tar.gz gcc-1b5d6ccdcfa28302e03b1a69609d8aea1a50e43a.tar.bz2 |
i386.c (ix86_secondary_reload): Require QImode intermediate for QImode mask register spill only for...
* config/i386/i386.c (ix86_secondary_reload): Require QImode
intermediate for QImode mask register spill only for !TARGET_AVX512DQ.
Always use true_regnum to determine operand regno.
From-SVN: r243945
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 21 |
2 files changed, 14 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1f17c9e..a46fed0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-12-27 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.c (ix86_secondary_reload): Require QImode + intermediate for mask register spill only for !TARGET_AVX512DQ. + Always use true_regnum to determine operand regno. + 2016-12-27 Sandra Loosemore <sandra@codesourcery.com> * doc/cppopts.texi: Delete redundant documentation for -x. Move diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 624f069..eb7356e 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -39752,24 +39752,19 @@ ix86_secondary_reload (bool in_p, rtx x, reg_class_t rclass, /* QImode spills from non-QI registers require intermediate register on 32bit targets. */ if (mode == QImode - && (MAYBE_MASK_CLASS_P (rclass) - || (!TARGET_64BIT && !in_p - && INTEGER_CLASS_P (rclass) - && MAYBE_NON_Q_CLASS_P (rclass)))) + && ((!TARGET_64BIT && !in_p + && INTEGER_CLASS_P (rclass) + && MAYBE_NON_Q_CLASS_P (rclass)) + || (!TARGET_AVX512DQ + && MAYBE_MASK_CLASS_P (rclass)))) { - int regno; - - if (REG_P (x)) - regno = REGNO (x); - else - regno = -1; - - if (regno >= FIRST_PSEUDO_REGISTER || SUBREG_P (x)) - regno = true_regnum (x); + int regno = true_regnum (x); /* Return Q_REGS if the operand is in memory. */ if (regno == -1) return Q_REGS; + + return NO_REGS; } /* This condition handles corner case where an expression involving |