From bc252d990312274418de69ef2b3a829e03542ac5 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus Date: Sun, 18 Oct 2020 19:53:49 +0200 Subject: [PATCH] IBM Z: Emit vector alignment hints for strlen 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. 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(-) diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index dbb541b..f9b27f9 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); -- 2.7.4