From d2cf2f07a9eabdc50dd002970d3c6bf634ed1292 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Wed, 12 Nov 2008 11:35:03 -0500 Subject: [PATCH] cond.md (cond_to_int peephole2): Don't eliminate the insns if the intermediate value will be used later. * config/m32c/cond.md (cond_to_int peephole2): Don't eliminate the insns if the intermediate value will be used later. From-SVN: r141788 --- gcc/ChangeLog | 5 +++++ gcc/config/m32c/cond.md | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7617fa7eaf0..dcfedb13cd5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-11-12 DJ Delorie + + * config/m32c/cond.md (cond_to_int peephole2): Don't eliminate the + insns if the intermediate value will be used later. + 2008-11-12 Andreas Schwab * config/m68k/m68k.c (print_operand): Mask off extra extension diff --git a/gcc/config/m32c/cond.md b/gcc/config/m32c/cond.md index a01efe9efa9..a64d3cafcc6 100644 --- a/gcc/config/m32c/cond.md +++ b/gcc/config/m32c/cond.md @@ -300,7 +300,9 @@ [(set_attr "flags" "x")] ) -;; A cond_to_int followed by a compare against zero is essentially a no-op. +;; A cond_to_int followed by a compare against zero is essentially a +;; no-op. However, the result of the cond_to_int may be used by later +;; insns, so make sure it's dead before deleting its set. (define_peephole2 [(set (match_operand:HI 0 "mra_qi_operand" "") @@ -313,6 +315,7 @@ (compare (match_operand:HI 1 "mra_qi_operand" "") (const_int 0))) ] - "rtx_equal_p(operands[0], operands[1])" + "rtx_equal_p (operands[0], operands[1]) + && dead_or_set_p (peep2_next_insn (1), operands[0])" [(const_int 1)] "")