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

Reply via email to