From e79a81b22df435c8f6165f4985f722574d0ead71 Mon Sep 17 00:00:00 2001
From: davem <davem@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 19 Jul 2003 00:28:05 +0000
Subject: [PATCH] 2003-07-18  Richard Henderson  <rth@redhat.com>

	* optabs.c (prepare_operand): Fail gracefully instead of abort
	if the predicate doesn't satisfy.
	(gen_cond_trap): Allow prepare_operand to fail.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69578 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog |  6 ++++++
 gcc/optabs.c  | 12 +++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8bd54a91e232..9f365c79deba 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-07-18  Richard Henderson  <rth@redhat.com>
+
+	* optabs.c (prepare_operand): Fail gracefully instead of abort
+	if the predicate doesn't satisfy.
+	(gen_cond_trap): Allow prepare_operand to fail.
+
 2003-07-19  Gabriel Dos Reis  <gdr@integrable-solutions.net>
 
 	* c-common.c: Don't undefine GCC_DIAG_STYLE.
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 3085b8529ca5..f8ae543024b7 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -3725,7 +3725,12 @@ prepare_operand (int icode, rtx x, int opnum, enum machine_mode mode,
 
   if (! (*insn_data[icode].operand[opnum].predicate)
       (x, insn_data[icode].operand[opnum].mode))
-    x = copy_to_mode_reg (insn_data[icode].operand[opnum].mode, x);
+    {
+      if (no_new_pseudos)
+	return NULL_RTX;
+      x = copy_to_mode_reg (insn_data[icode].operand[opnum].mode, x);
+    }
+
   return x;
 }
 
@@ -5736,6 +5741,11 @@ gen_cond_trap (enum rtx_code code ATTRIBUTE_UNUSED, rtx op1,
   start_sequence ();
   op1 = prepare_operand (icode, op1, 0, mode, mode, 0);
   op2 = prepare_operand (icode, op2, 1, mode, mode, 0);
+  if (!op1 || !op2)
+    {
+      end_sequence ();
+      return 0;
+    }
   emit_insn (GEN_FCN (icode) (op1, op2));
 
   PUT_CODE (trap_rtx, code);
-- 
GitLab