From 1b575dc71d765379aa36d4de406c8da4b17c3a5c Mon Sep 17 00:00:00 2001
From: steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 19 Sep 2006 21:22:31 +0000
Subject: [PATCH]         PR rtl-optimization/21299         * reload1.c
 (reload): Purge invalid ASMs in the final pass.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117061 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog |  5 +++++
 gcc/reload1.c | 14 ++++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5d8aeffa59ad..835c93d3e4e1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-19  Steven Bosscher  <steven@gcc.gnu.org>
+
+	PR rtl-optimization/21299
+	* reload1.c (reload): Purge invalid ASMs in the final pass.
+
 2006-09-19  Steve Ellcey  <sje@cup.hp.com>
 
 	PR  28490
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 04f64488566b..58f77cba520e 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -1167,6 +1167,20 @@ reload (rtx first, int global)
       {
 	rtx *pnote;
 
+	/* Clean up invalid ASMs so that they don't confuse later passes.
+	   See PR 21299.  */
+	if (asm_noperands (PATTERN (insn)) >= 0)
+	  {
+	    extract_insn (insn);
+	    if (!constrain_operands (1))
+	      {
+		error_for_asm (insn,
+			       "%<asm%> operand has impossible constraints");
+		delete_insn (insn);
+		continue;
+	      }
+	  }
+
 	if (CALL_P (insn))
 	  replace_pseudos_in (& CALL_INSN_FUNCTION_USAGE (insn),
 			      VOIDmode, CALL_INSN_FUNCTION_USAGE (insn));
-- 
GitLab