re PR target/54418 ([SH] Invalid operands for opcode)

PR target/54418
	* config/sh/sh.md (cmpgeusi_t): Remove N alternative.
	Check operands[1] in split condition instead of operands[0].
	Add comments.

From-SVN: r190864
This commit is contained in:
Oleg Endo 2012-09-02 23:15:25 +00:00
parent 613061fdd0
commit b07c437262
2 changed files with 15 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2012-09-02 Oleg Endo <olegendo@gcc.gnu.org>
PR target/54418
* config/sh/sh.md (cmpgeusi_t): Remove N alternative.
Check operands[1] in split condition instead of operands[0].
Add comments.
2012-09-02 Mark Kettenis <kettenis@openbsd.org>
* config.gcc (x86_64-*-openbsd*): New target.

View File

@ -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")])