diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2024-07-10 17:37:58 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2024-07-10 17:37:58 +0100 |
commit | 5686d3b8ae16d9aeea8d39a56ec6f8ecee661e01 (patch) | |
tree | 166f8ac9f5e55cd4545ae7cea72697f0d9e49ef8 /gcc/c | |
parent | fde96e8205f343e6471a11cc9def967bb5dd5362 (diff) | |
download | gcc-5686d3b8ae16d9aeea8d39a56ec6f8ecee661e01.zip gcc-5686d3b8ae16d9aeea8d39a56ec6f8ecee661e01.tar.gz gcc-5686d3b8ae16d9aeea8d39a56ec6f8ecee661e01.tar.bz2 |
internal-fn: Reuse SUBREG_PROMOTED_VAR_P handling
expand_fn_using_insn has code to handle SUBREG_PROMOTED_VAR_P
destinations. Specifically, for:
(subreg/v:M1 (reg:M2 R) ...)
it creates a new temporary register T, uses it for the output
operand, then sign- or zero-extends the M1 lowpart of T to M2,
storing the result in R.
This patch splits this handling out into helper routines and
uses them for other instances of:
if (!rtx_equal_p (target, ops[0].value))
emit_move_insn (target, ops[0].value);
It's quite probable that this doesn't help any of the other cases;
in particular, it shouldn't affect vectors. But I think it could
be useful for the CRC work.
gcc/
* internal-fn.cc (create_call_lhs_operand, assign_call_lhs): New
functions, split out from...
(expand_fn_using_insn): ...here.
(expand_load_lanes_optab_fn): Use them.
(expand_GOMP_SIMT_ENTER_ALLOC): Likewise.
(expand_GOMP_SIMT_LAST_LANE): Likewise.
(expand_GOMP_SIMT_ORDERED_PRED): Likewise.
(expand_GOMP_SIMT_VOTE_ANY): Likewise.
(expand_GOMP_SIMT_XCHG_BFLY): Likewise.
(expand_GOMP_SIMT_XCHG_IDX): Likewise.
(expand_partial_load_optab_fn): Likewise.
(expand_vec_cond_optab_fn): Likewise.
(expand_vec_cond_mask_optab_fn): Likewise.
(expand_RAWMEMCHR): Likewise.
(expand_gather_load_optab_fn): Likewise.
(expand_while_optab_fn): Likewise.
(expand_SPACESHIP): Likewise.
Diffstat (limited to 'gcc/c')
0 files changed, 0 insertions, 0 deletions