re PR target/87474 (ICE in extract_insn, at recog.c:2305)

2018-10-02  Aaron Sawdey  <acsawdey@linux.ibm.com>

	PR target/87474
	* config/rs6000/rs6000-string.c (expand_strn_compare): Check that both
	P8_VECTOR and VSX are enabled.

From-SVN: r264799
This commit is contained in:
Aaron Sawdey 2018-10-02 17:31:53 +00:00 committed by Aaron Sawdey
parent d8ccfadbf2
commit 6bd2b8ec8d
2 changed files with 13 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2018-10-02 Aaron Sawdey <acsawdey@linux.ibm.com>
PR target/87474
* config/rs6000/rs6000-string.c (expand_strn_compare): Check that both
P8_VECTOR and VSX are enabled.
2018-10-02 Andreas Krebbel <krebbel@linux.ibm.com> 2018-10-02 Andreas Krebbel <krebbel@linux.ibm.com>
* config/s390/driver-native.c (s390_host_detect_local_cpu): Add * config/s390/driver-native.c (s390_host_detect_local_cpu): Add

View File

@ -2205,6 +2205,7 @@ emit_final_str_compare_vec (rtx str1, rtx str2, rtx result,
} }
else else
{ {
gcc_assert (TARGET_P8_VECTOR);
rtx diffix = gen_reg_rtx (DImode); rtx diffix = gen_reg_rtx (DImode);
rtx result_gbbd = gen_reg_rtx (V16QImode); rtx result_gbbd = gen_reg_rtx (V16QImode);
/* Since each byte of the input is either 00 or FF, the bytes in /* Since each byte of the input is either 00 or FF, the bytes in
@ -2313,9 +2314,12 @@ expand_strn_compare (rtx operands[], int no_length)
/* Is it OK to use vec/vsx for this. TARGET_VSX means we have at /* Is it OK to use vec/vsx for this. TARGET_VSX means we have at
least POWER7 but we use TARGET_EFFICIENT_UNALIGNED_VSX which is least POWER7 but we use TARGET_EFFICIENT_UNALIGNED_VSX which is
at least POWER8. That way we can rely on overlapping compares to at least POWER8. That way we can rely on overlapping compares to
do the final comparison of less than 16 bytes. Also I do not want do the final comparison of less than 16 bytes. Also I do not
to deal with making this work for 32 bits. */ want to deal with making this work for 32 bits. In addition, we
int use_vec = (bytes >= 16 && !TARGET_32BIT && TARGET_EFFICIENT_UNALIGNED_VSX); have to make sure that we have at least P8_VECTOR (we don't allow
P9_VECTOR without P8_VECTOR). */
int use_vec = (bytes >= 16 && !TARGET_32BIT
&& TARGET_EFFICIENT_UNALIGNED_VSX && TARGET_P8_VECTOR);
if (use_vec) if (use_vec)
required_align = 16; required_align = 16;