aboutsummaryrefslogtreecommitdiff
path: root/gcc/sched-deps.c
diff options
context:
space:
mode:
authorAndrey Belevantsev <abel@ispras.ru>2016-03-15 18:13:29 +0300
committerAndrey Belevantsev <abel@gcc.gnu.org>2016-03-15 18:13:29 +0300
commit74ea9ab61bdbc4f34222e0bd0b351ed1a48d46a2 (patch)
tree8017fc5d458182e7092f7583bc919e33353ec025 /gcc/sched-deps.c
parent045d50559b3c9e0a01044084cec13a4fef11c6d9 (diff)
downloadgcc-74ea9ab61bdbc4f34222e0bd0b351ed1a48d46a2.zip
gcc-74ea9ab61bdbc4f34222e0bd0b351ed1a48d46a2.tar.gz
gcc-74ea9ab61bdbc4f34222e0bd0b351ed1a48d46a2.tar.bz2
re PR target/64411 (ICE: in verify_target_availability, at sel-sched.c:1577 with -Os -mcmodel=medium -fPIC -fschedule-insns -fselective-scheduling)
gcc/ PR target/64411 * sched-deps.c (get_implicit_reg_pending_clobbers): New function, factored out from ... (sched_analyze_insn): ... here. * sched-int.h (get_implicit_reg_pending_clobbers): Declare it. * sel-sched-ir.c (setup_id_implicit_regs): New function, use get_implicit_reg_pending_clobbers in it. (setup_id_reg_sets): Use setup_id_implicit_regs. (deps_init_id): Ditto. testsuite/ PR target/64411 * gcc.target/i386/pr64411.C: New test. From-SVN: r234216
Diffstat (limited to 'gcc/sched-deps.c')
-rw-r--r--gcc/sched-deps.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index 4961dfb..5cc8e63 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -2860,6 +2860,17 @@ sched_macro_fuse_insns (rtx_insn *insn)
}
+/* Get the implicit reg pending clobbers for INSN and save them in TEMP. */
+void
+get_implicit_reg_pending_clobbers (HARD_REG_SET *temp, rtx_insn *insn)
+{
+ extract_insn (insn);
+ preprocess_constraints (insn);
+ alternative_mask preferred = get_preferred_alternatives (insn);
+ ira_implicitly_set_insn_hard_regs (temp, preferred);
+ AND_COMPL_HARD_REG_SET (*temp, ira_no_alloc_regs);
+}
+
/* Analyze an INSN with pattern X to find all dependencies. */
static void
sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn)
@@ -2872,12 +2883,7 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn)
if (! reload_completed)
{
HARD_REG_SET temp;
-
- extract_insn (insn);
- preprocess_constraints (insn);
- alternative_mask prefrred = get_preferred_alternatives (insn);
- ira_implicitly_set_insn_hard_regs (&temp, prefrred);
- AND_COMPL_HARD_REG_SET (temp, ira_no_alloc_regs);
+ get_implicit_reg_pending_clobbers (&temp, insn);
IOR_HARD_REG_SET (implicit_reg_pending_clobbers, temp);
}