The nvptx backend is slightly unusual in that call insns set a pseudo.
The combiner is surprised by this and allows combining them into other
insns, which remain as INSN rather than CALL_INSN. Aborts ensue.
gcc/
* combine.c (try_combine): Don't allow a call as one of the source
insns.
------------------------------------------------------------------------
Index: gcc/combine.c
===================================================================
--- gcc/combine.c (revision 422363)
+++ gcc/combine.c (revision 422364)
@@ -2508,7 +2508,10 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx
/* Exit early if one of the insns involved can't be used for
combinations. */
- if (cant_combine_insn_p (i3)
+ if (CALL_P (i2)
+ || (i1 && CALL_P (i1))
+ || (i0 && CALL_P (i0))
+ || cant_combine_insn_p (i3)
|| cant_combine_insn_p (i2)
|| (i1 && cant_combine_insn_p (i1))
|| (i0 && cant_combine_insn_p (i0))