diff options
author | Bernd Edlinger <bernd.edlinger@hotmail.de> | 2016-11-17 13:47:24 +0000 |
---|---|---|
committer | Bernd Edlinger <edlinger@gcc.gnu.org> | 2016-11-17 13:47:24 +0000 |
commit | 2fe3721128b991538b5a416ca1d8671901d0a1f1 (patch) | |
tree | 5ae54b4b32d411e6d1567978cc5fc863056b73c6 /gcc | |
parent | 6c28e6ae6e2e1e249f4ad95b6415da025ab1fc6e (diff) | |
download | gcc-2fe3721128b991538b5a416ca1d8671901d0a1f1.zip gcc-2fe3721128b991538b5a416ca1d8671901d0a1f1.tar.gz gcc-2fe3721128b991538b5a416ca1d8671901d0a1f1.tar.bz2 |
re PR target/77308 (surprisingly large stack usage for sha512 on arm)
2016-11-17 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR target/77308
* config/arm/arm.md (*thumb2_ldrd, *thumb2_ldrd_base,
*thumb2_ldrd_base_neg, *thumb2_strd, *thumb2_strd_base,
*thumb2_strd_base_neg): Recognize insn regardless of
current_tune->prefer_ldrd_strd.
* config/arm/ldrdstrd.md: Enable all ldrd/strd peephole rules
whenever possible.
testsuite:
2016-11-17 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR target/77308
* gcc.target/arm/pr53447-5.c: New test.
* lib/target-supports.exp
(check_effective_target_arm_prefer_ldrd_strd): Adjust.
From-SVN: r242549
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/arm/arm.md | 6 | ||||
-rw-r--r-- | gcc/config/arm/ldrdstrd.md | 22 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/pr53447-5.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 2 |
6 files changed, 42 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c37fc9c..8797a21 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2016-11-17 Bernd Edlinger <bernd.edlinger@hotmail.de> + + PR target/77308 + * config/arm/arm.md (*thumb2_ldrd, *thumb2_ldrd_base, + *thumb2_ldrd_base_neg, *thumb2_strd, *thumb2_strd_base, + *thumb2_strd_base_neg): Recognize insn regardless of + current_tune->prefer_ldrd_strd. + * config/arm/ldrdstrd.md: Enable all ldrd/strd peephole rules + whenever possible. + 2016-11-17 Claudiu Zissulescu <claziss@synopsys.com> * config/arc/arc.c (arc_ccfsm_post_advance): Handle return diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index a4f83d6..ccae728b 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -11641,7 +11641,6 @@ (mem:SI (plus:SI (match_dup 1) (match_operand:SI 4 "const_int_operand" ""))))] "TARGET_LDRD && TARGET_THUMB2 && reload_completed - && current_tune->prefer_ldrd_strd && ((INTVAL (operands[2]) + 4) == INTVAL (operands[4])) && (operands_ok_ldrd_strd (operands[0], operands[3], operands[1], INTVAL (operands[2]), @@ -11658,7 +11657,6 @@ (mem:SI (plus:SI (match_dup 1) (const_int 4))))] "TARGET_LDRD && TARGET_THUMB2 && reload_completed - && current_tune->prefer_ldrd_strd && (operands_ok_ldrd_strd (operands[0], operands[2], operands[1], 0, false, true))" "ldrd%?\t%0, %2, [%1]" @@ -11673,7 +11671,6 @@ (set (match_operand:SI 2 "s_register_operand" "=r") (mem:SI (match_dup 1)))] "TARGET_LDRD && TARGET_THUMB2 && reload_completed - && current_tune->prefer_ldrd_strd && (operands_ok_ldrd_strd (operands[0], operands[2], operands[1], -4, false, true))" "ldrd%?\t%0, %2, [%1, #-4]" @@ -11689,7 +11686,6 @@ (match_operand:SI 3 "const_int_operand" ""))) (match_operand:SI 4 "s_register_operand" "r"))] "TARGET_LDRD && TARGET_THUMB2 && reload_completed - && current_tune->prefer_ldrd_strd && ((INTVAL (operands[1]) + 4) == INTVAL (operands[3])) && (operands_ok_ldrd_strd (operands[2], operands[4], operands[0], INTVAL (operands[1]), @@ -11706,7 +11702,6 @@ (const_int 4))) (match_operand:SI 2 "s_register_operand" "r"))] "TARGET_LDRD && TARGET_THUMB2 && reload_completed - && current_tune->prefer_ldrd_strd && (operands_ok_ldrd_strd (operands[1], operands[2], operands[0], 0, false, false))" "strd%?\t%1, %2, [%0]" @@ -11721,7 +11716,6 @@ (set (mem:SI (match_dup 0)) (match_operand:SI 2 "s_register_operand" "r"))] "TARGET_LDRD && TARGET_THUMB2 && reload_completed - && current_tune->prefer_ldrd_strd && (operands_ok_ldrd_strd (operands[1], operands[2], operands[0], -4, false, false))" "strd%?\t%1, %2, [%0, #-4]" diff --git a/gcc/config/arm/ldrdstrd.md b/gcc/config/arm/ldrdstrd.md index e7ef542..7e6b7dc 100644 --- a/gcc/config/arm/ldrdstrd.md +++ b/gcc/config/arm/ldrdstrd.md @@ -29,9 +29,7 @@ (match_operand:SI 2 "memory_operand" "")) (set (match_operand:SI 1 "arm_general_register_operand" "") (match_operand:SI 3 "memory_operand" ""))] - "TARGET_LDRD - && current_tune->prefer_ldrd_strd - && !optimize_function_for_size_p (cfun)" + "TARGET_LDRD" [(const_int 0)] { if (!gen_operands_ldrd_strd (operands, true, false, false)) @@ -63,9 +61,7 @@ (match_operand:SI 0 "arm_general_register_operand" "")) (set (match_operand:SI 3 "memory_operand" "") (match_operand:SI 1 "arm_general_register_operand" ""))] - "TARGET_LDRD - && current_tune->prefer_ldrd_strd - && !optimize_function_for_size_p (cfun)" + "TARGET_LDRD" [(const_int 0)] { if (!gen_operands_ldrd_strd (operands, false, false, false)) @@ -102,9 +98,7 @@ (match_operand:SI 5 "const_int_operand" "")) (set (match_operand:SI 3 "memory_operand" "") (match_dup 1))] - "TARGET_LDRD - && current_tune->prefer_ldrd_strd - && !optimize_function_for_size_p (cfun)" + "TARGET_LDRD" [(const_int 0)] { if (!gen_operands_ldrd_strd (operands, false, true, false)) @@ -147,10 +141,8 @@ (match_dup 0)) (set (match_operand:SI 3 "memory_operand" "") (match_dup 1))] - "TARGET_LDRD - && current_tune->prefer_ldrd_strd - && !optimize_function_for_size_p (cfun)" - [(const_int 0)] + "TARGET_LDRD" + [(const_int 0)] { if (!gen_operands_ldrd_strd (operands, false, true, false)) FAIL; @@ -197,8 +189,6 @@ [(match_operand 6 "arm_general_register_operand" "") (match_operand 7 "arm_general_register_operand" "") ]))] "TARGET_LDRD && TARGET_ARM - && current_tune->prefer_ldrd_strd - && !optimize_function_for_size_p (cfun) && ( ((rtx_equal_p(operands[0], operands[6])) && (rtx_equal_p(operands[1], operands[7]))) ||((rtx_equal_p(operands[0], operands[7])) && (rtx_equal_p(operands[1], operands[6])))) && (peep2_reg_dead_p (3, operands[0]) || rtx_equal_p (operands[0], operands[4])) @@ -231,8 +221,6 @@ (match_operand 7 "arm_general_register_operand" "") ])) (clobber (reg:CC CC_REGNUM))])] "TARGET_LDRD && TARGET_ARM - && current_tune->prefer_ldrd_strd - && !optimize_function_for_size_p (cfun) && ( ((rtx_equal_p(operands[0], operands[6])) && (rtx_equal_p(operands[1], operands[7]))) ||((rtx_equal_p(operands[0], operands[7])) && (rtx_equal_p(operands[1], operands[6])))) && (peep2_reg_dead_p (3, operands[0]) || rtx_equal_p (operands[0], operands[4])) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5063e51..e16f2d0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2016-11-17 Bernd Edlinger <bernd.edlinger@hotmail.de> + + PR target/77308 + * gcc.target/arm/pr53447-5.c: New test. + * lib/target-supports.exp + (check_effective_target_arm_prefer_ldrd_strd): Adjust. + 2016-11-17 Claudiu Zissulescu <claziss@synopsys.com> * gcc.target/arc/abitest.S: New file. diff --git a/gcc/testsuite/gcc.target/arm/pr53447-5.c b/gcc/testsuite/gcc.target/arm/pr53447-5.c new file mode 100644 index 0000000..35988f4 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr53447-5.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -mthumb" } */ +/* { dg-require-effective-target arm_thumb2_ok } */ + +void foo(long long* p) +{ + p[1] |= 0x100000001; + p[2] &= 0x100000001; + p[3] ^= 0x100000001; + p[4] += 0x100000001; + p[5] -= 0x100000001; + p[6] = ~p[6]; + p[7] <<= 5; + p[8] >>= 5; + p[9] -= p[10]; +} + +/* { dg-final { scan-assembler-times "ldrd" 10 } } */ +/* { dg-final { scan-assembler-times "strd" 9 } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index ec99708..8a2abd2 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -4356,7 +4356,7 @@ proc check_effective_target_arm_prefer_ldrd_strd { } { } return [check_no_messages_and_pattern arm_prefer_ldrd_strd "strd\tr" assembly { - void foo (int *p) { p[0] = 1; p[1] = 0;} + void foo (void) { __asm__ ("" ::: "r4", "r5"); } } "-O2 -mthumb" ] } |