diff options
author | Richard Biener <rguenther@suse.de> | 2019-08-26 10:35:59 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-08-26 10:35:59 +0000 |
commit | 48a31a09839b12127ce7c40d7adc4bd5bf1d3407 (patch) | |
tree | cabb6c75d7ebdfca9c7ea3fb0cd24cc550f99327 /gcc/config/i386/i386-features.h | |
parent | df7d46d925c7baca7bf9961aee900876d8aef225 (diff) | |
download | gcc-48a31a09839b12127ce7c40d7adc4bd5bf1d3407.zip gcc-48a31a09839b12127ce7c40d7adc4bd5bf1d3407.tar.gz gcc-48a31a09839b12127ce7c40d7adc4bd5bf1d3407.tar.bz2 |
re PR target/91522 (STV is slow)
2019-08-26 Richard Biener <rguenther@suse.de>
PR target/91522
PR target/91527
* config/i386/i386-features.h (general_scalar_chain::defs_map):
New member.
(general_scalar_chain::replace_with_subreg): Remove.
(general_scalar_chain::replace_with_subreg_in_insn): Likewise.
(general_scalar_chain::convert_reg): Adjust signature.
* config/i386/i386-features.c (scalar_chain::add_insn): Do not
iterate over all defs of a reg.
(general_scalar_chain::replace_with_subreg): Remove.
(general_scalar_chain::replace_with_subreg_in_insn): Likewise.
(general_scalar_chain::make_vector_copies): Populate defs_map,
place copy only after defs that are used as vectors in the chain.
(general_scalar_chain::convert_reg): Emit a copy for a specific
def in a specific instruction.
(general_scalar_chain::convert_op): All reg uses are converted here.
(general_scalar_chain::convert_insn): Emit copies for scalar
uses of defs here. Replace uses with the copies we created.
Replace and convert the def. Adjust REG_DEAD notes, remove
REG_EQUIV/EQUAL notes.
(general_scalar_chain::convert_registers): Only handle copies
into the chain here.
From-SVN: r274926
Diffstat (limited to 'gcc/config/i386/i386-features.h')
-rw-r--r-- | gcc/config/i386/i386-features.h | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/gcc/config/i386/i386-features.h b/gcc/config/i386/i386-features.h index c85ac45..8381efe 100644 --- a/gcc/config/i386/i386-features.h +++ b/gcc/config/i386/i386-features.h @@ -171,12 +171,11 @@ class general_scalar_chain : public scalar_chain : scalar_chain (smode_, vmode_) {} int compute_convert_gain (); private: + hash_map<rtx, rtx> defs_map; void mark_dual_mode_def (df_ref def); - rtx replace_with_subreg (rtx x, rtx reg, rtx subreg); - void replace_with_subreg_in_insn (rtx_insn *insn, rtx reg, rtx subreg); void convert_insn (rtx_insn *insn); void convert_op (rtx *op, rtx_insn *insn); - void convert_reg (unsigned regno); + void convert_reg (rtx_insn *insn, rtx dst, rtx src); void make_vector_copies (unsigned regno); void convert_registers (); int vector_const_cost (rtx exp); |