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:
parent
d2c9e8ed7a
commit
7d906d07ed
@ -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>
|
2015-11-23 Nick Clifton <nickc@redhat.com>
|
||||||
Jeff Law <law@redhat.com>
|
Jeff Law <law@redhat.com>
|
||||||
|
|
||||||
|
@ -2512,7 +2512,8 @@ is_parallel_of_n_reg_sets (rtx pat, int n)
|
|||||||
|| !REG_P (SET_DEST (XVECEXP (pat, 0, i))))
|
|| !REG_P (SET_DEST (XVECEXP (pat, 0, i))))
|
||||||
return false;
|
return false;
|
||||||
for ( ; i < len; i++)
|
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 false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user