aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@cygnus.com>1998-10-07 18:23:51 +0000
committerKen Raeburn <raeburn@gcc.gnu.org>1998-10-07 18:23:51 +0000
commit5924eecfbcaf4606d1a8093d7de5a229a3c76ffb (patch)
treebafca9f56fa236b39f38776a16ad1b6592d83179
parent1bba6199035a12b6a16334a6962d960aa7862e52 (diff)
downloadgcc-5924eecfbcaf4606d1a8093d7de5a229a3c76ffb.zip
gcc-5924eecfbcaf4606d1a8093d7de5a229a3c76ffb.tar.gz
gcc-5924eecfbcaf4606d1a8093d7de5a229a3c76ffb.tar.bz2
mips.md (tablejump_internal3, [...]): Tack on a `use' of the table label, so flow analysis will recognize a tablejump.
* config/mips/mips.md (tablejump_internal3, tablejump_internal4 and matching define_insns): Tack on a `use' of the table label, so flow analysis will recognize a tablejump. From-SVN: r22898
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/mips/mips.md20
2 files changed, 18 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ce6b19a..fd74fa0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+Wed Oct 7 21:19:46 1998 Ken Raeburn <raeburn@cygnus.com>
+
+ * config/mips/mips.md (tablejump_internal3, tablejump_internal4
+ and matching define_insns): Tack on a `use' of the table label, so
+ flow analysis will recognize a tablejump.
+
Wed Oct 7 17:33:39 1998 Richard Henderson <rth@cygnus.com>
* gcse.c (pre_insert_insn): Tweek to notice that calls do not
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 17bd10f..c6c187e 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -8883,9 +8883,10 @@ move\\t%0,%z4\\n\\
(set_attr "length" "1")])
(define_expand "tablejump_internal3"
- [(set (pc)
- (plus:SI (match_operand:SI 0 "register_operand" "d")
- (label_ref:SI (match_operand:SI 1 "" ""))))]
+ [(parallel [(set (pc)
+ (plus:SI (match_operand:SI 0 "register_operand" "d")
+ (label_ref:SI (match_operand:SI 1 "" ""))))
+ (use (label_ref:SI (match_dup 1)))])]
""
"")
@@ -8942,7 +8943,8 @@ move\\t%0,%z4\\n\\
(define_insn ""
[(set (pc)
(plus:SI (match_operand:SI 0 "register_operand" "d")
- (label_ref:SI (match_operand:SI 1 "" ""))))]
+ (label_ref:SI (match_operand:SI 1 "" ""))))
+ (use (label_ref:SI (match_dup 1)))]
"!(Pmode == DImode) && next_active_insn (insn) != 0
&& GET_CODE (PATTERN (next_active_insn (insn))) == ADDR_DIFF_VEC
&& PREV_INSN (next_active_insn (insn)) == operands[1]"
@@ -8958,9 +8960,10 @@ move\\t%0,%z4\\n\\
(set_attr "length" "2")])
(define_expand "tablejump_internal4"
- [(set (pc)
- (plus:DI (match_operand:DI 0 "se_register_operand" "d")
- (label_ref:DI (match_operand:SI 1 "" ""))))]
+ [(parallel [(set (pc)
+ (plus:DI (match_operand:DI 0 "se_register_operand" "d")
+ (label_ref:DI (match_operand:SI 1 "" ""))))
+ (use (label_ref:DI (match_dup 1)))])]
""
"")
@@ -8970,7 +8973,8 @@ move\\t%0,%z4\\n\\
(define_insn ""
[(set (pc)
(plus:DI (match_operand:DI 0 "se_register_operand" "d")
- (label_ref:DI (match_operand:SI 1 "" ""))))]
+ (label_ref:DI (match_operand:SI 1 "" ""))))
+ (use (label_ref:DI (match_dup 1)))]
"Pmode == DImode && next_active_insn (insn) != 0
&& GET_CODE (PATTERN (next_active_insn (insn))) == ADDR_DIFF_VEC
&& PREV_INSN (next_active_insn (insn)) == operands[1]"