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.
This commit is contained in:
Stefan Schulze Frielinghaus 2020-10-18 19:53:49 +02:00
parent 970d683f67
commit bc252d9903

View File

@ -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);