diff options
author | Andrey Belevantsev <abel@ispras.ru> | 2016-03-15 18:13:29 +0300 |
---|---|---|
committer | Andrey Belevantsev <abel@gcc.gnu.org> | 2016-03-15 18:13:29 +0300 |
commit | 74ea9ab61bdbc4f34222e0bd0b351ed1a48d46a2 (patch) | |
tree | 8017fc5d458182e7092f7583bc919e33353ec025 /gcc/sched-deps.c | |
parent | 045d50559b3c9e0a01044084cec13a4fef11c6d9 (diff) | |
download | gcc-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.c | 18 |
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); } |