arm.md (ior_xor): New code iterator.

* arm.md (ior_xor): New code iterator.
	(split for ior/xor with shift and zero-extend): New split pattern.
	* arm/predicates.md (subreg_lowpart_operator): New special predicate.

From-SVN: r149673
This commit is contained in:
Richard Earnshaw 2009-07-15 10:12:22 +00:00 committed by Richard Earnshaw
parent faf387e135
commit fa01135d3e
3 changed files with 32 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2009-07-15 Richard Earnshaw <rearnsha@arm.com>
* arm.md (ior_xor): New code iterator.
(split for ior/xor with shift and zero-extend): New split pattern.
* arm/predicates.md (subreg_lowpart_operator): New special predicate.
2009-07-15 Richard Guenther <rguenther@suse.de>
* tree-ssa-structalias.c (make_constraint_from_heapvar): Initialize

View File

@ -4207,6 +4207,28 @@
""
)
(define_code_iterator ior_xor [ior xor])
(define_split
[(set (match_operand:SI 0 "s_register_operand" "")
(ior_xor:SI (and:SI (ashift:SI
(match_operand:SI 1 "s_register_operand" "")
(match_operand:SI 2 "const_int_operand" ""))
(match_operand:SI 3 "const_int_operand" ""))
(zero_extend:SI
(match_operator 5 "subreg_lowpart_operator"
[(match_operand:SI 4 "s_register_operand" "")]))))]
"TARGET_32BIT
&& (INTVAL (operands[3])
== (GET_MODE_MASK (GET_MODE (operands[5]))
& (GET_MODE_MASK (GET_MODE (operands[5]))
<< (INTVAL (operands[2])))))"
[(set (match_dup 0) (ior_xor:SI (ashift:SI (match_dup 1) (match_dup 2))
(match_dup 4)))
(set (match_dup 0) (zero_extend:SI (match_dup 5)))]
"operands[5] = gen_lowpart (GET_MODE (operands[5]), operands[0]);"
)
(define_insn "*compareqi_eq0"
[(set (reg:CC_Z CC_REGNUM)
(compare:CC_Z (match_operand:QI 0 "s_register_operand" "r")

View File

@ -73,6 +73,10 @@
|| REGNO_REG_CLASS (REGNO (op)) == FPA_REGS));
})
(define_special_predicate "subreg_lowpart_operator"
(and (match_code "subreg")
(match_test "subreg_lowpart_p (op)")))
;; Reg, subreg(reg) or const_int.
(define_predicate "reg_or_int_operand"
(ior (match_code "const_int")