diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2016-12-08 21:14:42 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2016-12-08 21:14:42 +0000 |
commit | 7e964f49026322eb357412e38ba98e14325ca80c (patch) | |
tree | 34613b9efe94e880416e257a167dc61fda32b61d /gcc/lra-assigns.c | |
parent | 060162e0c44f4596709cf6f6d69a5794bfb315f4 (diff) | |
download | gcc-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.c | 8 |
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 |