[PATCH] recog: Handle some mode-changing hardreg propagations

Jeff Law jeffreyalaw@gmail.com
Wed Jul 10 15:41:46 GMT 2024



On 7/10/24 9:32 AM, Richard Sandiford wrote:
> insn_propagation would previously only replace (reg:M H) with X
> for some hard register H if the uses of H were also in mode M.
> This patch extends it to handle simple mode punning too.
> 
> The original motivation was to try to get rid of the execution
> frequency test in aarch64_split_simd_shift_p, but doing that is
> follow-up work.
> 
> I tried this on at least one target per CPU directory (as for
> the late-combine patches) and it seems to be a small win for
> all of them.
> 
> The patch includes a couple of updates to the ia32 results.
> In pr105033.c, foo3 replaced:
> 
>         vmovq       8(%esp), %xmm1
>         vpunpcklqdq %xmm1, %xmm0, %xmm0
> 
> with:
> 
>         vmovhps     8(%esp), %xmm0, %xmm0
> 
> In vect-bfloat16-2b.c, 5 of the vec_extract_v32bf_* routines
> (specifically the ones with nonzero even indices) replaced
> things like:
> 
>         movl    28(%esp), %eax
>         vmovd   %eax, %xmm0
> 
> with:
> 
>         vpinsrw $0, 28(%esp), %xmm0, %xmm0
> 
> (These functions return a bf16, and so only the low 16 bits matter.)
> 
> Bootstrapped & regression-tested on aarch64-linux-gnu and
> x86_64-linux-gnu.  OK to install?
> 
> Richard
> 
> 
> gcc/
> 	* recog.cc (insn_propagation::apply_to_rvalue_1): Handle simple
> 	cases of hardreg propagation in which the register is set and
> 	used in different modes.
> 
> gcc/testsuite/
> 	* gcc.target/i386/pr105033.c: Expect vmovhps for the ia32 version
> 	of foo.
> 	* gcc.target/i386/vect-bfloat16-2b.c: Expect more vpinsrws.
OK
jeff



More information about the Gcc-patches mailing list