[PATCH V4] RISC-V: Using merge approach to optimize repeating sequence in vec_init
钟居哲
juzhe.zhong@rivai.ai
Sat May 13 00:21:31 GMT 2023
Address comments.
V5 patch:
https://gcc.gnu.org/pipermail/gcc-patches/2023-May/618398.html
Thanks.
juzhe.zhong@rivai.ai
From: Kito Cheng
Date: 2023-05-13 00:16
To: juzhe.zhong
CC: gcc-patches; palmer; jeffreyalaw
Subject: Re: [PATCH V4] RISC-V: Using merge approach to optimize repeating sequence in vec_init
> +/* Get the mask for merge approach.
> +
> + Consider such following case:
> + {a, b, a, b, a, b, a, b, a, b, a, b, a, b, a, b}
> + To merge "a", the mask should be 1010....
> + To merge "b", the mask should be 0101....
> +*/
> +rtx
> +rvv_builder::get_merge_mask_bitfield (unsigned int index) const
> +{
> + uint64_t base_mask = (1ULL << index);
> + uint64_t mask = 0;
> + for (unsigned int i = 0; i < (64 / npatterns ()); i++)
What the magic 64 means?
...
> +static void
> +expand_vector_init_merge_repeating_sequence (rtx target,
> + const rvv_builder &builder)
> +{
> + machine_mode mask_mode;
> + gcc_assert (get_mask_mode (builder.mode ()).exists (&mask_mode));
> +
> + machine_mode dup_mode = builder.mode ();
> + if (known_gt (GET_MODE_SIZE (dup_mode), BYTES_PER_RISCV_VECTOR))
> + {
> + poly_uint64 nunits
> + = exact_div (BYTES_PER_RISCV_VECTOR, builder.inner_units ());
> + gcc_assert (
> + get_vector_mode (builder.inner_int_mode (), nunits).exists (&dup_mode));
gcc_assert will removed at release mode, so it's not you want I guess?
> + }
> + else
> + {
> + if (FLOAT_MODE_P (dup_mode))
> + gcc_assert (get_vector_mode (builder.inner_int_mode (),
> + GET_MODE_NUNITS (dup_mode))
> + .exists (&dup_mode));
Same issue
> + }
> +
> + machine_mode dup_mask_mode;
> + gcc_assert (get_mask_mode (dup_mode).exists (&dup_mask_mode));
Same issue
More information about the Gcc-patches
mailing list