aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/sh/sh.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/sh/sh.md')
-rw-r--r--gcc/config/sh/sh.md25
1 files changed, 4 insertions, 21 deletions
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index 04992a18773..e4648bb325f 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -3203,19 +3203,13 @@
;; For all later processors.
(define_insn "casesi_jump_2"
[(set (pc) (plus:SI (match_operand:SI 0 "register_operand" "r")
- (match_operand 1 "braf_label_ref_operand" "")))
+ (label_ref (match_operand 1 "" ""))))
(use (label_ref (match_operand 2 "" "")))]
- ""
+ "! INSN_UID (operands[1]) || prev_real_insn (operands[1]) == insn"
"braf %0%#"
[(set_attr "needs_delay_slot" "yes")
(set_attr "type" "jump_ind")])
-(define_insn "dummy_jump"
- [(set (pc) (const_int 0))]
- ""
- ""
- [(set_attr "length" "0")])
-
;; Call subroutine returning any type.
;; ??? This probably doesn't work.
@@ -3302,20 +3296,9 @@
reg));
emit_insn (gen_casesi_worker_0 (reg2, reg, operands[3]));
if (TARGET_SH2)
- {
- rtx lab = gen_label_rtx ();
- emit_jump_insn (gen_casesi_jump_2 (reg2,
- gen_rtx (LABEL_REF, VOIDmode, lab),
- operands[3]));
- emit_label (lab);
- /* Put a fake jump after the label, lest some optimization might
- delete the barrier and LAB. */
- emit_jump_insn (gen_dummy_jump ());
- }
+ emit_jump_insn (gen_casesi_jump_2 (reg2, gen_label_rtx (), operands[3]));
else
- {
- emit_jump_insn (gen_casesi_jump_1 (reg2, operands[3]));
- }
+ emit_jump_insn (gen_casesi_jump_1 (reg2, operands[3]));
/* For SH2 and newer, the ADDR_DIFF_VEC is not actually relative to
operands[3], but to lab. We will fix this up in
machine_dependent_reorg. */