Commit 33344a62 by Oleg Endo

predicates.md (zero_extend_operand): New predicate.

	* config/sh/predicates.md (zero_extend_operand): New predicate.
	* config/sh/sh.md (zero_extendhisi2): Simplify by using new
	zero_extend_operand predicate.
	(zero_extendqisi2): Likewise.

From-SVN: r189269
parent 7f426c93
2012-07-04 Oleg Endo <olegendo@gcc.gnu.org>
* config/sh/predicates.md (zero_extend_operand): New predicate.
* config/sh/sh.md (zero_extendhisi2): Simplify by using new
zero_extend_operand predicate.
(zero_extendqisi2): Likewise.
2012-07-04 Uros Bizjak <ubizjak@gmail.com> 2012-07-04 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/53321 PR middle-end/53321
......
...@@ -368,6 +368,13 @@ ...@@ -368,6 +368,13 @@
: nonimmediate_operand) (op, mode); : nonimmediate_operand) (op, mode);
}) })
;; Returns 1 if the operand can be used in a zero_extend.
(define_predicate "zero_extend_operand"
(ior (and (match_test "TARGET_SHMEDIA")
(match_operand 0 "general_extend_operand"))
(and (match_test "! TARGET_SHMEDIA")
(match_operand 0 "arith_reg_operand"))))
;; Returns 1 if OP can be source of a simple move operation. Same as ;; Returns 1 if OP can be source of a simple move operation. Same as
;; general_operand, but a LABEL_REF is valid, PRE_DEC is invalid as ;; general_operand, but a LABEL_REF is valid, PRE_DEC is invalid as
;; are subregs of system registers. ;; are subregs of system registers.
......
...@@ -4725,13 +4725,8 @@ label: ...@@ -4725,13 +4725,8 @@ label:
(const_string "ignore")))]) (const_string "ignore")))])
(define_expand "zero_extendhisi2" (define_expand "zero_extendhisi2"
[(set (match_operand:SI 0 "arith_reg_operand" "") [(set (match_operand:SI 0 "arith_reg_dest" "")
(zero_extend:SI (match_operand:HI 1 "general_extend_operand" "")))] (zero_extend:SI (match_operand:HI 1 "zero_extend_operand" "")))])
""
{
if (! TARGET_SHMEDIA && ! arith_reg_operand (operands[1], HImode))
operands[1] = copy_to_mode_reg (HImode, operands[1]);
})
(define_insn "*zero_extendhisi2_compact" (define_insn "*zero_extendhisi2_compact"
[(set (match_operand:SI 0 "arith_reg_dest" "=r") [(set (match_operand:SI 0 "arith_reg_dest" "=r")
...@@ -4770,13 +4765,8 @@ label: ...@@ -4770,13 +4765,8 @@ label:
}) })
(define_expand "zero_extendqisi2" (define_expand "zero_extendqisi2"
[(set (match_operand:SI 0 "arith_reg_operand" "") [(set (match_operand:SI 0 "arith_reg_dest" "")
(zero_extend:SI (match_operand:QI 1 "general_extend_operand" "")))] (zero_extend:SI (match_operand:QI 1 "zero_extend_operand" "")))])
""
{
if (! TARGET_SHMEDIA && ! arith_reg_operand (operands[1], QImode))
operands[1] = copy_to_mode_reg (QImode, operands[1]);
})
(define_insn "*zero_extendqisi2_compact" (define_insn "*zero_extendqisi2_compact"
[(set (match_operand:SI 0 "arith_reg_dest" "=r") [(set (match_operand:SI 0 "arith_reg_dest" "=r")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment