diff options
author | Maxim Kuvyrkov <maxim@codesourcery.com> | 2010-08-18 10:34:02 +0000 |
---|---|---|
committer | Maxim Kuvyrkov <mkuvyrkov@gcc.gnu.org> | 2010-08-18 10:34:02 +0000 |
commit | c701e857d83417daf6a691d1817c9aa08dcf3605 (patch) | |
tree | c5f3f41546d28f39779ef0690fb7793e6c4c41ff /gcc | |
parent | 63d90a96304b484a365e8411578413b40a2b1a35 (diff) | |
download | gcc-c701e857d83417daf6a691d1817c9aa08dcf3605.zip gcc-c701e857d83417daf6a691d1817c9aa08dcf3605.tar.gz gcc-c701e857d83417daf6a691d1817c9aa08dcf3605.tar.bz2 |
re PR rtl-optimization/42575 (arm-eabi-gcc 64-bit multiply weirdness)
gcc/
PR rtl-optimization/42575
* optabs.c (expand_doubleword_mult): Generate new pseudos to shorten
live ranges.
gcc/testsuite/
PR rtl-optimization/42575
* gcc.target/pr42575.c: New test.
From-SVN: r163334
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/optabs.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/pr42575.c | 9 |
4 files changed, 22 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 48ee833..c16adad 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-08-18 Maxim Kuvyrkov <maxim@codesourcery.com> + + PR rtl-optimization/42575 + * optabs.c (expand_doubleword_mult): Generate new pseudos to shorten + live ranges. + 2010-08-18 Marcus Shawcroft <marcus.shawcroft@arm.com> * config/arm/arm-protos.h (arm_expand_sync): New. diff --git a/gcc/optabs.c b/gcc/optabs.c index b9db02f..1fcbedc 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -1257,7 +1257,7 @@ expand_doubleword_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target, /* OP1_HIGH should now be dead. */ adjust = expand_binop (word_mode, add_optab, adjust, temp, - adjust, 0, OPTAB_DIRECT); + NULL_RTX, 0, OPTAB_DIRECT); if (target && !REG_P (target)) target = NULL_RTX; @@ -1274,8 +1274,7 @@ expand_doubleword_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target, product_high = operand_subword (product, high, 1, mode); adjust = expand_binop (word_mode, add_optab, product_high, adjust, - REG_P (product_high) ? product_high : adjust, - 0, OPTAB_DIRECT); + NULL_RTX, 0, OPTAB_DIRECT); emit_move_insn (product_high, adjust); return product; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 10a8aff..d71fa99 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-08-18 Maxim Kuvyrkov <maxim@codesourcery.com> + + PR rtl-optimization/42575 + * gcc.target/pr42575.c: New test. + 2010-08-18 Iain Sandoe <iains@gcc.gnu.org> * lib/target-supports.exp (check_effective_target_tls_emulated): New. diff --git a/gcc/testsuite/gcc.target/arm/pr42575.c b/gcc/testsuite/gcc.target/arm/pr42575.c new file mode 100644 index 0000000..474bf6c --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr42575.c @@ -0,0 +1,9 @@ +/* { dg-options "-O2 -march=armv7-a" } */ +/* Make sure RA does good job allocating registers and avoids + unnecessary moves. */ +/* { dg-final { scan-assembler-not "mov" } } */ + +long long longfunc(long long x, long long y) +{ + return x * y; +} |