Patchwork [SH] PR 54418

login
register
mail settings
Submitter Oleg Endo
Date Sept. 2, 2012, 4:55 p.m.
Message ID <1346604902.2200.52.camel@yam-132-YW-E178-FTW>
Download mbox | patch
Permalink /patch/181201/
State New
Headers show

Comments

Oleg Endo - Sept. 2, 2012, 4:55 p.m.
Hello,

This is the patch for this issue as mentioned in the PR.
Tested on rev 190840 with
make -k check RUNTESTFLAGS="--target_board=sh-sim
\{-m2/-ml,-m2/-mb,-m2a/-mb,-m4/-ml,-m4/-mb,-m4a/-ml,-m4a/-mb}"

and no new failures.
OK?

Cheers,
Oleg

ChangeLog:

	PR target/54418
	* config/sh/sh.md (cmpgeusi_t): Remove N alternative.  Check 
	operands[1] in split condition instead of operands[0].  Add 
	comments.
Kaz Kojima - Sept. 2, 2012, 10:36 p.m.
Oleg Endo <oleg.endo@t-online.de> wrote:
> This is the patch for this issue as mentioned in the PR.
> Tested on rev 190840 with
> make -k check RUNTESTFLAGS="--target_board=sh-sim
> \{-m2/-ml,-m2/-mb,-m2a/-mb,-m4/-ml,-m4/-mb,-m4a/-ml,-m4a/-mb}"
> 
> and no new failures.
> OK?

OK.

Regards,
	kaz

Patch

Index: gcc/config/sh/sh.md
===================================================================
--- gcc/config/sh/sh.md	(revision 190840)
+++ gcc/config/sh/sh.md	(working copy)
@@ -1043,13 +1043,19 @@ 
 ;; SImode unsigned integer comparisons
 ;; -------------------------------------------------------------------------
 
+;; Usually comparisons of 'unsigned int >= 0' are optimized away completely.
+;; However, especially when optimizations are off (e.g. -O0) such comparisons
+;; might remain and we have to handle them.  If the '>= 0' case wasn't
+;; handled here, something else would just load a '0' into the second operand
+;; and do the comparison.  We can do slightly better by just setting the
+;; T bit to '1'.
 (define_insn_and_split "cmpgeusi_t"
   [(set (reg:SI T_REG)
 	(geu:SI (match_operand:SI 0 "arith_reg_operand" "r")
-		(match_operand:SI 1 "arith_reg_or_0_operand" "rN")))]
+		(match_operand:SI 1 "arith_reg_or_0_operand" "r")))]
   "TARGET_SH1"
   "cmp/hs	%1,%0"
-  "&& satisfies_constraint_Z (operands[0])"
+  "&& satisfies_constraint_Z (operands[1])"
   [(set (reg:SI T_REG) (const_int 1))]
   ""
   [(set_attr "type" "mt_group")])