combine: Handle aborts in is_parallel_of_n_reg_sets (PR68381)

Some users of is_parallel_of_n_reg_sets disregard the clobbers in a
parallel after it has returned "yes, this is a parallel of N sets and
maybe some clobbers".  But combine uses a clobber of const0_rtx to
indicate substitution failure, so this leads to disaster.

Fix this by checking for such special clobbers in is_parallel_of_n_reg_sets.


	PR rtl-optimization/68381
	* combine.c (is_parallel_of_n_reg_sets): Return false if the pattern
	is poisoned.

From-SVN: r230786
This commit is contained in:
Segher Boessenkool 2015-11-24 07:43:20 +01:00 committed by Segher Boessenkool
parent d2c9e8ed7a
commit 7d906d07ed
2 changed files with 8 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2015-11-24 Segher Boessenkool <segher@kernel.crashing.org>
PR rtl-optimization/68381
* combine.c (is_parallel_of_n_reg_sets): Return false if the pattern
is poisoned.
2015-11-23 Nick Clifton <nickc@redhat.com>
Jeff Law <law@redhat.com>

View File

@ -2512,7 +2512,8 @@ is_parallel_of_n_reg_sets (rtx pat, int n)
|| !REG_P (SET_DEST (XVECEXP (pat, 0, i))))
return false;
for ( ; i < len; i++)
if (GET_CODE (XVECEXP (pat, 0, i)) != CLOBBER)
if (GET_CODE (XVECEXP (pat, 0, i)) != CLOBBER
|| XEXP (XVECEXP (pat, 0, i), 0) == const0_rtx)
return false;
return true;