Commit fb117b1c by Bernd Edlinger Committed by Bernd Edlinger

re PR target/77308 (surprisingly large stack usage for sha512 on arm)

2017-09-06  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR target/77308
        * config/arm/predicates.md (arm_general_adddi_operand): Create new
        non-vfp predicate.
        * config/arm/arm.md (*arm_adddi3, *arm_subdi3): Use new predicates.

From-SVN: r251752
parent 5aa102aa
2017-09-06 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR target/77308
* config/arm/predicates.md (arm_general_adddi_operand): Create new
non-vfp predicate.
* config/arm/arm.md (*arm_adddi3, *arm_subdi3): Use new predicates.
2017-09-05 Jeff Law <law@redhat.com> 2017-09-05 Jeff Law <law@redhat.com>
PR tree-optimization/64910 PR tree-optimization/64910
......
...@@ -457,14 +457,13 @@ ...@@ -457,14 +457,13 @@
) )
(define_insn_and_split "*arm_adddi3" (define_insn_and_split "*arm_adddi3"
[(set (match_operand:DI 0 "s_register_operand" "=&r,&r,&r,&r,&r") [(set (match_operand:DI 0 "arm_general_register_operand" "=&r,&r,&r,&r,&r")
(plus:DI (match_operand:DI 1 "s_register_operand" "%0, 0, r, 0, r") (plus:DI (match_operand:DI 1 "arm_general_register_operand" "%0, 0, r, 0, r")
(match_operand:DI 2 "arm_adddi_operand" "r, 0, r, Dd, Dd"))) (match_operand:DI 2 "arm_general_adddi_operand" "r, 0, r, Dd, Dd")))
(clobber (reg:CC CC_REGNUM))] (clobber (reg:CC CC_REGNUM))]
"TARGET_32BIT && !TARGET_NEON" "TARGET_32BIT && !TARGET_NEON"
"#" "#"
"TARGET_32BIT && ((!TARGET_NEON && !TARGET_IWMMXT) || reload_completed) "TARGET_32BIT && ((!TARGET_NEON && !TARGET_IWMMXT) || reload_completed)"
&& ! (TARGET_NEON && IS_VFP_REGNUM (REGNO (operands[0])))"
[(parallel [(set (reg:CC_C CC_REGNUM) [(parallel [(set (reg:CC_C CC_REGNUM)
(compare:CC_C (plus:SI (match_dup 1) (match_dup 2)) (compare:CC_C (plus:SI (match_dup 1) (match_dup 2))
(match_dup 1))) (match_dup 1)))
...@@ -1263,9 +1262,9 @@ ...@@ -1263,9 +1262,9 @@
) )
(define_insn_and_split "*arm_subdi3" (define_insn_and_split "*arm_subdi3"
[(set (match_operand:DI 0 "s_register_operand" "=&r,&r,&r") [(set (match_operand:DI 0 "arm_general_register_operand" "=&r,&r,&r")
(minus:DI (match_operand:DI 1 "s_register_operand" "0,r,0") (minus:DI (match_operand:DI 1 "arm_general_register_operand" "0,r,0")
(match_operand:DI 2 "s_register_operand" "r,0,0"))) (match_operand:DI 2 "arm_general_register_operand" "r,0,0")))
(clobber (reg:CC CC_REGNUM))] (clobber (reg:CC CC_REGNUM))]
"TARGET_32BIT && !TARGET_NEON" "TARGET_32BIT && !TARGET_NEON"
"#" ; "subs\\t%Q0, %Q1, %Q2\;sbc\\t%R0, %R1, %R2" "#" ; "subs\\t%Q0, %Q1, %Q2\;sbc\\t%R0, %R1, %R2"
......
...@@ -82,6 +82,11 @@ ...@@ -82,6 +82,11 @@
|| REGNO (op) >= FIRST_PSEUDO_REGISTER)); || REGNO (op) >= FIRST_PSEUDO_REGISTER));
}) })
(define_predicate "arm_general_adddi_operand"
(ior (match_operand 0 "arm_general_register_operand")
(and (match_code "const_int")
(match_test "const_ok_for_dimode_op (INTVAL (op), PLUS)"))))
(define_predicate "vfp_register_operand" (define_predicate "vfp_register_operand"
(match_code "reg,subreg") (match_code "reg,subreg")
{ {
......
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