mirror of git://gcc.gnu.org/git/gcc.git
[1/3][ARM] Keep ctz expressions together until after reload
PR middle-end/37780 * config/arm/arm.md (ctzsi2): Convert to define_insn_and_split. From-SVN: r237138
This commit is contained in:
parent
5545a90715
commit
3295b529d2
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-06-06 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||||
|
|
||||||
|
PR middle-end/37780
|
||||||
|
* config/arm/arm.md (ctzsi2): Convert to define_insn_and_split.
|
||||||
|
|
||||||
2016-06-06 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
2016-06-06 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||||
|
|
||||||
PR c/24414
|
PR c/24414
|
||||||
|
|
|
||||||
|
|
@ -10822,19 +10822,22 @@
|
||||||
(set_attr "predicable_short_it" "no")
|
(set_attr "predicable_short_it" "no")
|
||||||
(set_attr "type" "clz")])
|
(set_attr "type" "clz")])
|
||||||
|
|
||||||
(define_expand "ctzsi2"
|
;; Keep this as a CTZ expression until after reload and then split
|
||||||
[(set (match_operand:SI 0 "s_register_operand" "")
|
;; into RBIT + CLZ. Since RBIT is represented as an UNSPEC it is unlikely
|
||||||
(ctz:SI (match_operand:SI 1 "s_register_operand" "")))]
|
;; to fold with any other expression.
|
||||||
|
|
||||||
|
(define_insn_and_split "ctzsi2"
|
||||||
|
[(set (match_operand:SI 0 "s_register_operand" "=r")
|
||||||
|
(ctz:SI (match_operand:SI 1 "s_register_operand" "r")))]
|
||||||
"TARGET_32BIT && arm_arch_thumb2"
|
"TARGET_32BIT && arm_arch_thumb2"
|
||||||
|
"#"
|
||||||
|
"&& reload_completed"
|
||||||
|
[(const_int 0)]
|
||||||
"
|
"
|
||||||
{
|
emit_insn (gen_rbitsi2 (operands[0], operands[1]));
|
||||||
rtx tmp = gen_reg_rtx (SImode);
|
emit_insn (gen_clzsi2 (operands[0], operands[0]));
|
||||||
emit_insn (gen_rbitsi2 (tmp, operands[1]));
|
|
||||||
emit_insn (gen_clzsi2 (operands[0], tmp));
|
|
||||||
}
|
|
||||||
DONE;
|
DONE;
|
||||||
"
|
")
|
||||||
)
|
|
||||||
|
|
||||||
;; V5E instructions.
|
;; V5E instructions.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue