diff mbox series

IBM Z: Emit vector alignment hints for strlen

Message ID 20201018183203.1499606-1-stefansf@linux.ibm.com
State New
Headers show
Series IBM Z: Emit vector alignment hints for strlen | expand

Commit Message

Stefan Schulze Frielinghaus Oct. 18, 2020, 6:32 p.m. UTC
In case the vectorized version of strlen is used, then each memory
access inside the loop is 16-byte aligned.  Thus add this kind of
information so that vector alignment hints can later on be emitted.

Bootstrapped and regtested on IBM Z.  Ok for master?

gcc/ChangeLog:

	* config/s390/s390.c (s390_expand_vec_strlen): Add alignment
	for memory access inside loop.
---
 gcc/config/s390/s390.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

Comments

Andreas Krebbel Oct. 19, 2020, 4:45 p.m. UTC | #1
On 18.10.20 20:32, Stefan Schulze Frielinghaus wrote:
> In case the vectorized version of strlen is used, then each memory
> access inside the loop is 16-byte aligned.  Thus add this kind of
> information so that vector alignment hints can later on be emitted.
> 
> Bootstrapped and regtested on IBM Z.  Ok for master?
> 
> gcc/ChangeLog:
> 
> 	* config/s390/s390.c (s390_expand_vec_strlen): Add alignment
> 	for memory access inside loop.

Ok. Thanks!

Andreas

> ---
>  gcc/config/s390/s390.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
> index dbb541bbea7..f9b27f96fd7 100644
> --- a/gcc/config/s390/s390.c
> +++ b/gcc/config/s390/s390.c
> @@ -5955,6 +5955,7 @@ s390_expand_vec_strlen (rtx target, rtx string, rtx alignment)
>    rtx temp;
>    rtx len = gen_reg_rtx (QImode);
>    rtx cond;
> +  rtx mem;
>  
>    s390_load_address (str_addr_base_reg, XEXP (string, 0));
>    emit_move_insn (str_idx_reg, const0_rtx);
> @@ -5996,10 +5997,10 @@ s390_expand_vec_strlen (rtx target, rtx string, rtx alignment)
>    LABEL_NUSES (loop_start_label) = 1;
>  
>    /* Load 16 bytes of the string into VR.  */
> -  emit_move_insn (str_reg,
> -		  gen_rtx_MEM (V16QImode,
> -			       gen_rtx_PLUS (Pmode, str_idx_reg,
> -					     str_addr_base_reg)));
> +  mem = gen_rtx_MEM (V16QImode,
> +		     gen_rtx_PLUS (Pmode, str_idx_reg, str_addr_base_reg));
> +  set_mem_align (mem, 128);
> +  emit_move_insn (str_reg, mem);
>    if (into_loop_label != NULL_RTX)
>      {
>        emit_label (into_loop_label);
>
diff mbox series

Patch

diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index dbb541bbea7..f9b27f96fd7 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -5955,6 +5955,7 @@  s390_expand_vec_strlen (rtx target, rtx string, rtx alignment)
   rtx temp;
   rtx len = gen_reg_rtx (QImode);
   rtx cond;
+  rtx mem;
 
   s390_load_address (str_addr_base_reg, XEXP (string, 0));
   emit_move_insn (str_idx_reg, const0_rtx);
@@ -5996,10 +5997,10 @@  s390_expand_vec_strlen (rtx target, rtx string, rtx alignment)
   LABEL_NUSES (loop_start_label) = 1;
 
   /* Load 16 bytes of the string into VR.  */
-  emit_move_insn (str_reg,
-		  gen_rtx_MEM (V16QImode,
-			       gen_rtx_PLUS (Pmode, str_idx_reg,
-					     str_addr_base_reg)));
+  mem = gen_rtx_MEM (V16QImode,
+		     gen_rtx_PLUS (Pmode, str_idx_reg, str_addr_base_reg));
+  set_mem_align (mem, 128);
+  emit_move_insn (str_reg, mem);
   if (into_loop_label != NULL_RTX)
     {
       emit_label (into_loop_label);