Patchwork Commit: RX: Add support for conditional register moves

login
register
mail settings
Submitter Nick Clifton
Date Aug. 11, 2011, 12:19 p.m.
Message ID <m3vcu4f8dl.fsf@redhat.com>
Download mbox | patch
Permalink /patch/109601/
State New
Headers show

Comments

Nick Clifton - Aug. 11, 2011, 12:19 p.m.
Hi Guys,

  I am applying the patch below on behalf of Renesas.  It adds support
  to the RX backend for conditional register moves.

  Tested without any regressions on an rx-elf toolchain.

Cheers
  Nick

gcc/ChangeLog
2011-08-11   Kazuhiro Inaoka  <kazuhiro.inaoka.ud@renesas.com>

	* config/rx/rx.md (movsicc): Allow register to register
	transfers.
	(*movsicc): Likewise.
	(*stcc): Restrict this pattern to EQ and NE compares.
	(*stcc_reg): New pattern.  Works for any comparison but only for
	register transfers.
Richard Henderson - Aug. 12, 2011, 9:15 p.m.
On 08/11/2011 05:19 AM, Nick Clifton wrote:
> Hi Guys,
> 
>   I am applying the patch below on behalf of Renesas.  It adds support
>   to the RX backend for conditional register moves.
> 
>   Tested without any regressions on an rx-elf toolchain.
> 
> Cheers
>   Nick
> 
> gcc/ChangeLog
> 2011-08-11   Kazuhiro Inaoka  <kazuhiro.inaoka.ud@renesas.com>
> 
> 	* config/rx/rx.md (movsicc): Allow register to register
> 	transfers.
> 	(*movsicc): Likewise.
> 	(*stcc): Restrict this pattern to EQ and NE compares.
> 	(*stcc_reg): New pattern.  Works for any comparison but only for
> 	register transfers.
> 
> Index: gcc/config/rx/rx.md
> ===================================================================
> --- gcc/config/rx/rx.md	(revision 177584)
> +++ gcc/config/rx/rx.md	(working copy)
> @@ -1598,7 +1598,7 @@
>  		   (memex_commutative:SI (match_dup 0)
>  					 (match_dup 2)))
>  	      (clobber (reg:CC CC_REG))])]
> -  "peep2_regno_dead_p (2, REGNO (operands[0]))"
> +  "peep2_regno_dead_p (2, REGNO (operands[0])) && (optimize < 3 || optimize_size)"

The patch doesn't match the changelog.  And this looks very wrong...

r~

Patch

Index: gcc/config/rx/rx.md
===================================================================
--- gcc/config/rx/rx.md	(revision 177584)
+++ gcc/config/rx/rx.md	(working copy)
@@ -1598,7 +1598,7 @@ 
 		   (memex_commutative:SI (match_dup 0)
 					 (match_dup 2)))
 	      (clobber (reg:CC CC_REG))])]
-  "peep2_regno_dead_p (2, REGNO (operands[0]))"
+  "peep2_regno_dead_p (2, REGNO (operands[0])) && (optimize < 3 || optimize_size)"
   [(parallel [(set:SI (match_dup 2)
 		      (memex_commutative:SI (match_dup 2)
 					    (extend_types:SI (match_dup 1))))
@@ -1612,7 +1612,7 @@ 
 		   (memex_commutative:SI (match_dup 2)
 					 (match_dup 0)))
 	      (clobber (reg:CC CC_REG))])]
-  "peep2_regno_dead_p (2, REGNO (operands[0]))"
+  "peep2_regno_dead_p (2, REGNO (operands[0])) && (optimize < 3 || optimize_size)"
   [(parallel [(set:SI (match_dup 2)
 		      (memex_commutative:SI (match_dup 2)
 					    (extend_types:SI (match_dup 1))))
@@ -1626,7 +1626,7 @@ 
 		   (memex_noncomm:SI (match_dup 2)
 				     (match_dup 0)))
 	      (clobber (reg:CC CC_REG))])]
-  "peep2_regno_dead_p (2, REGNO (operands[0]))"
+  "peep2_regno_dead_p (2, REGNO (operands[0])) && (optimize < 3 || optimize_size)"
   [(parallel [(set:SI (match_dup 2)
 		      (memex_noncomm:SI (match_dup 2)
 					(extend_types:SI (match_dup 1))))
@@ -1639,7 +1639,7 @@ 
    (set (match_operand:SI                               2 "register_operand")
 	(memex_nocc:SI (match_dup 0)
 		       (match_dup 2)))]
-  "peep2_regno_dead_p (2, REGNO (operands[0]))"
+  "peep2_regno_dead_p (2, REGNO (operands[0])) && (optimize < 3 || optimize_size)"
   [(set:SI (match_dup 2)
 	   (memex_nocc:SI (match_dup 2)
 			  (extend_types:SI (match_dup 1))))]
@@ -1651,7 +1651,7 @@ 
    (set (match_operand:SI                               2 "register_operand")
 	(memex_nocc:SI (match_dup 2)
 		       (match_dup 0)))]
-  "peep2_regno_dead_p (2, REGNO (operands[0]))"
+  "peep2_regno_dead_p (2, REGNO (operands[0])) && (optimize < 3 || optimize_size)"
   [(set:SI (match_dup 2)
 	   (memex_nocc:SI (match_dup 2)
 			  (extend_types:SI (match_dup 1))))]
@@ -1662,7 +1662,7 @@ 
 	(memex_commutative:SI (match_operand:SI                               1 "register_operand" "%0")
  		              (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))
    (clobber (reg:CC CC_REG))]
-  ""
+  "(optimize < 3 || optimize_size)"
   "<memex_commutative:op>\t%<extend_types:letter>2, %0"
   [(set_attr "timings" "33")
    (set_attr "length"  "5")] ;; This length is corrected in rx_adjust_insn_length
@@ -1673,7 +1673,7 @@ 
 	(memex_noncomm:SI (match_operand:SI                               1 "register_operand" "0")
                           (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))
    (clobber (reg:CC CC_REG))]
-  ""
+  "(optimize < 3 || optimize_size)"
   "<memex_noncomm:op>\t%<extend_types:letter>2, %0"
   [(set_attr "timings" "33")
    (set_attr "length"  "5")] ;; This length is corrected in rx_adjust_insn_length
@@ -1683,7 +1683,7 @@ 
   [(set (match_operand:SI                                              0 "register_operand" "=r")
 	(memex_nocc:SI (match_operand:SI                               1 "register_operand" "%0")
 		       (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))]
-  ""
+  "(optimize < 3 || optimize_size)"
   "<memex_nocc:op>\t%<extend_types:letter>2, %0"
   [(set_attr "timings" "33")
    (set_attr "length"  "5")] ;; This length is corrected in rx_adjust_insn_length
@@ -1695,7 +1695,7 @@ 
    (set (reg:CC CC_REG)
 	(compare:CC (match_operand:SI                   2 "register_operand")
 		    (match_dup 0)))]
-  "peep2_regno_dead_p (2, REGNO (operands[0]))"
+  "peep2_regno_dead_p (2, REGNO (operands[0])) && (optimize < 3 || optimize_size)"
   [(set (reg:CC CC_REG)
 	(compare:CC (match_dup 2)
 		    (extend_types:SI (match_dup 1))))]
@@ -1734,7 +1734,7 @@ 
   [(set (reg:CC CC_REG)
 	(compare:CC (match_operand:SI                               0 "register_operand" "=r")
 		    (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand" "Q"))))]
-  ""
+  "(optimize < 3 || optimize_size)"
   "cmp\t%<extend_types:letter>1, %0"
   [(set_attr "timings" "33")
    (set_attr "length"  "5")] ;; This length is corrected in rx_adjust_insn_length