OSDN Git Service

2011-09-06 Tom de Vries <tom@codesourcery.com>
authorvries <vries@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Sep 2011 10:02:41 +0000 (10:02 +0000)
committervries <vries@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Sep 2011 10:02:41 +0000 (10:02 +0000)
* recog.c (asm_labels_ok): New function.
(check_asm_operands): Use asm_labels_ok.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178580 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/recog.c

index b8c0c4e..a88e2dc 100644 (file)
@@ -1,3 +1,8 @@
+2011-09-06  Tom de Vries  <tom@codesourcery.com>
+
+       * recog.c (asm_labels_ok): New function.
+       (check_asm_operands): Use asm_labels_ok.
+
 2011-09-05  Richard Sandiford  <rdsandiford@googlemail.com>
 
        PR target/49606
index 22a5402..d3ecb73 100644 (file)
@@ -118,6 +118,25 @@ init_recog (void)
 }
 
 \f
+/* Return true if labels in asm operands BODY are LABEL_REFs.  */
+
+static bool
+asm_labels_ok (rtx body)
+{
+  rtx asmop;
+  int i;
+
+  asmop = extract_asm_operands (body);
+  if (asmop == NULL_RTX)
+    return true;
+
+  for (i = 0; i < ASM_OPERANDS_LABEL_LENGTH (asmop); i++)
+    if (GET_CODE (ASM_OPERANDS_LABEL (asmop, i)) != LABEL_REF)
+      return false;
+
+  return true;
+}
+
 /* Check that X is an insn-body for an `asm' with operands
    and that the operands mentioned in it are legitimate.  */
 
@@ -129,6 +148,9 @@ check_asm_operands (rtx x)
   const char **constraints;
   int i;
 
+  if (!asm_labels_ok (x))
+    return 0;
+
   /* Post-reload, be more strict with things.  */
   if (reload_completed)
     {