aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2024-07-10 17:37:58 +0100
committerRichard Sandiford <richard.sandiford@arm.com>2024-07-10 17:37:58 +0100
commit5686d3b8ae16d9aeea8d39a56ec6f8ecee661e01 (patch)
tree166f8ac9f5e55cd4545ae7cea72697f0d9e49ef8 /gcc/c
parentfde96e8205f343e6471a11cc9def967bb5dd5362 (diff)
downloadgcc-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