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
+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>
|| !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;