From: Maxim Kuvyrkov Date: Wed, 18 Aug 2010 10:34:02 +0000 (+0000) Subject: re PR rtl-optimization/42575 (arm-eabi-gcc 64-bit multiply weirdness) X-Git-Tag: releases/gcc-4.6.0~4956 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c701e857d83417daf6a691d1817c9aa08dcf3605;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 48ee83322e94..c16adad4bd75 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-08-18 Maxim Kuvyrkov + + PR rtl-optimization/42575 + * optabs.c (expand_doubleword_mult): Generate new pseudos to shorten + live ranges. + 2010-08-18 Marcus Shawcroft * config/arm/arm-protos.h (arm_expand_sync): New. diff --git a/gcc/optabs.c b/gcc/optabs.c index b9db02fe83fc..1fcbedc0089e 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 10a8aff7a0d2..d71fa99239e0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-08-18 Maxim Kuvyrkov + + PR rtl-optimization/42575 + * gcc.target/pr42575.c: New test. + 2010-08-18 Iain Sandoe * 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 000000000000..474bf6cf60bc --- /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; +}