aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2016-12-27 22:25:09 +0100
committerUros Bizjak <uros@gcc.gnu.org>2016-12-27 22:25:09 +0100
commit1b5d6ccdcfa28302e03b1a69609d8aea1a50e43a (patch)
tree10708263b150808c784769f8bfa7dc70b8b96e6b /gcc
parentab4bb1b30019f18efec222d2ab3d3c91d2a98622 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/i386/i386.c21
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