From 8f0ed1b46d4a4103dfd09465e10bf58835e84d0b Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Wed, 7 Jul 2004 15:32:28 +0000 Subject: [PATCH] ia64.md: Define new attribute "empty". * 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: r84204 --- gcc/ChangeLog | 8 ++++++++ gcc/config/ia64/ia64.c | 11 ++++++----- gcc/config/ia64/ia64.md | 13 ++++++++++--- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a4e628fd6524..49c0e83586bc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2004-07-07 Andreas Schwab + + * 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-04 Gerald Pfeifer * doc/contrib.texi (Contributors): Adjust link for GNU Classpath. diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 6ffaff6dea22..77b2ed7ba7dc 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -7175,11 +7175,12 @@ ia64_reorg (insns) 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) diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md index f711f13e9d3e..2dfef5d730d0 100644 --- a/gcc/config/ia64/ia64.md +++ b/gcc/config/ia64/ia64.md @@ -147,6 +147,10 @@ (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")) + ;; :::::::::::::::::::: ;; :: @@ -5062,7 +5066,8 @@ "" "" [(set_attr "itanium_class" "ignore") - (set_attr "predicable" "no")]) + (set_attr "predicable" "no") + (set_attr "empty" "yes")]) ;; Allocate a new register frame. @@ -5229,7 +5234,8 @@ [(const_int 5)] "" "" - [(set_attr "itanium_class" "nop_x")]) + [(set_attr "itanium_class" "nop_x") + (set_attr "empty" "yes")]) (define_insn "bundle_selector" [(unspec [(match_operand 0 "const_int_operand" "")] UNSPEC_BUNDLE_SELECTOR)] @@ -5253,7 +5259,8 @@ "" ";;" [(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))] -- 2.47.2