ia64.md: Define new attribute "empty".
authorAndreas Schwab <schwab@suse.de>
Sat, 3 Jul 2004 16:59:38 +0000 (16:59 +0000)
committerAndreas Schwab <schwab@gcc.gnu.org>
Sat, 3 Jul 2004 16:59:38 +0000 (16:59 +0000)
* config/ia64/ia64.md: Define new attribute "empty".
(prologue_use, nop_x, insn_group_barrier): Set it.

* config/ia64/ia64.c (ia64_reorg): When looking for trailing call
skip over "empty" insns.

From-SVN: r84059

gcc/ChangeLog
gcc/config/ia64/ia64.c
gcc/config/ia64/ia64.md

index 7080815c770556801c5c0e47b7d57140d056a596..5ecb9a485871f3ecf85e0d40af4a552c6695048e 100644 (file)
@@ -1,3 +1,11 @@
+2004-07-03  Andreas Schwab  <schwab@suse.de>
+
+       * config/ia64/ia64.md: Define new attribute "empty".
+       (prologue_use, nop_x, insn_group_barrier): Set it.
+
+       * config/ia64/ia64.c (ia64_reorg): When looking for trailing call
+       skip over "empty" insns.
+
 2004-07-03  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
        * tree-inline.c (initialize_inlined_parameters): Pass proper function
index 783ebf747f56918e85ea4d0b68348e55640fb4ce..e631e87cdda00b4b8eed5f38349b12163935577e 100644 (file)
@@ -7666,11 +7666,12 @@ ia64_reorg (void)
       insn = get_last_insn ();
       if (! INSN_P (insn))
         insn = prev_active_insn (insn);
-      if (GET_CODE (insn) == INSN
-         && GET_CODE (PATTERN (insn)) == UNSPEC_VOLATILE
-         && XINT (PATTERN (insn), 1) == UNSPECV_INSN_GROUP_BARRIER)
-       {
-         saw_stop = 1;
+      /* Skip over insns that expand to nothing.  */
+      while (GET_CODE (insn) == INSN && get_attr_empty (insn) == EMPTY_YES)
+        {
+         if (GET_CODE (PATTERN (insn)) == UNSPEC_VOLATILE
+             && XINT (PATTERN (insn), 1) == UNSPECV_INSN_GROUP_BARRIER)
+           saw_stop = 1;
          insn = prev_active_insn (insn);
        }
       if (GET_CODE (insn) == CALL_INSN)
index 07b6a612aae856da7f070a51a8aef0cc49e09c9a..b185bc820590b0ab192e06189e0292c6bee92915 100644 (file)
 
 (define_attr "predicable" "no,yes" (const_string "yes"))
 
+;; Empty.  True iff this insn does not generate any code.
+
+(define_attr "empty" "no,yes" (const_string "no"))
+
 \f
 
 ;; DFA descriptions of ia64 processors used for insn scheduling and
   ""
   ""
   [(set_attr "itanium_class" "ignore")
-   (set_attr "predicable" "no")])
+   (set_attr "predicable" "no")
+   (set_attr "empty" "yes")])
 
 ;; Allocate a new register frame.
 
   [(const_int 5)]
   ""
   ""
-  [(set_attr "itanium_class" "nop_x")])
+  [(set_attr "itanium_class" "nop_x")
+   (set_attr "empty" "yes")])
 
 ;; The following insn will be never generated.  It is used only by
 ;; insn scheduler to change state before advancing cycle.
   ""
   ";;"
   [(set_attr "itanium_class" "stop_bit")
-   (set_attr "predicable" "no")])
+   (set_attr "predicable" "no")
+   (set_attr "empty" "yes")])
 
 (define_expand "trap"
   [(trap_if (const_int 1) (const_int 0))]