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))