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:
parent
613061fdd0
commit
b07c437262
@ -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.
|
||||
|
@ -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")])
|
||||
|
Loading…
Reference in New Issue
Block a user