aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra-assigns.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2016-12-08 21:14:42 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2016-12-08 21:14:42 +0000
commit7e964f49026322eb357412e38ba98e14325ca80c (patch)
tree34613b9efe94e880416e257a167dc61fda32b61d /gcc/lra-assigns.c
parent060162e0c44f4596709cf6f6d69a5794bfb315f4 (diff)
downloadgcc-7e964f49026322eb357412e38ba98e14325ca80c.zip
gcc-7e964f49026322eb357412e38ba98e14325ca80c.tar.gz
gcc-7e964f49026322eb357412e38ba98e14325ca80c.tar.bz2
re PR rtl-optimization/78671 (ICE: in extract_constrain_insn, at recog.c:2213 with -Og -march=skylake-avx512)
2016-12-08 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/78671 * lra-assign.c (lra-assigns.c): Check prohibited regs for an allocno class. 2016-12-08 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/78671 * gcc.target/i386/pr78671.c: New. From-SVN: r243462
Diffstat (limited to 'gcc/lra-assigns.c')
-rw-r--r--gcc/lra-assigns.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c
index 936a169..e852a68 100644
--- a/gcc/lra-assigns.c
+++ b/gcc/lra-assigns.c
@@ -628,9 +628,13 @@ find_hard_regno_for_1 (int regno, int *cost, int try_only_hard_regno,
hard_regno = ira_class_hard_regs[rclass][i];
if (! overlaps_hard_reg_set_p (conflict_set,
PSEUDO_REGNO_MODE (regno), hard_regno)
- /* We can not use prohibited_class_mode_regs because it is
- not defined for all classes. */
&& HARD_REGNO_MODE_OK (hard_regno, PSEUDO_REGNO_MODE (regno))
+ /* We can not use prohibited_class_mode_regs for all classes
+ because it is not defined for all classes. */
+ && (ira_allocno_class_translate[rclass] != rclass
+ || ! TEST_HARD_REG_BIT (ira_prohibited_class_mode_regs
+ [rclass][PSEUDO_REGNO_MODE (regno)],
+ hard_regno))
&& ! TEST_HARD_REG_BIT (impossible_start_hard_regs, hard_regno)
&& (nregs_diff == 0
|| (WORDS_BIG_ENDIAN