Commit 6bd2b8ec by Aaron Sawdey Committed by Aaron Sawdey

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
parent d8ccfadb
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
...@@ -2205,6 +2205,7 @@ emit_final_str_compare_vec (rtx str1, rtx str2, rtx result, ...@@ -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) ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment