PR target/40697
* optabs.c (avoid_expensive_constant): Use rtx_cost to find out
the cost of loading the constant rather than assuming
COSTS_N_INSNS (1).
* config/arm/arm.c (thumb1_rtx_costs) <case CONST_INT>: If the
outer code is AND, do the same tests as the andsi3 expander and
return COSTS_N_INSNS (1) if and is cheap.
testsuite/
PR target/40697
* gcc.target/arm/thumb-andsi.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157582
138bc75d-0d04-0410-961f-
82ee72b054a4
* ira-lives.c (check_and_make_def_conflict): Ignore conflict for a
use that may match DEF.
+ PR target/40697
+ * optabs.c (avoid_expensive_constant): Use rtx_cost to find out
+ the cost of loading the constant rather than assuming
+ COSTS_N_INSNS (1).
+ * config/arm/arm.c (thumb1_rtx_costs) <case CONST_INT>: If the
+ outer code is AND, do the same tests as the andsi3 expander and
+ return COSTS_N_INSNS (1) if and is cheap.
+
2010-03-19 Michael Matz <matz@suse.de>
PR c++/43116
else if ((outer == IOR || outer == XOR || outer == AND)
&& INTVAL (x) < 256 && INTVAL (x) >= -256)
return COSTS_N_INSNS (1);
+ else if (outer == AND)
+ {
+ int i;
+ /* This duplicates the tests in the andsi3 expander. */
+ for (i = 9; i <= 31; i++)
+ if ((((HOST_WIDE_INT) 1) << i) - 1 == INTVAL (x)
+ || (((HOST_WIDE_INT) 1) << i) - 1 == ~INTVAL (x))
+ return COSTS_N_INSNS (2);
+ }
else if (outer == ASHIFT || outer == ASHIFTRT
|| outer == LSHIFTRT)
return 0;
avoid_expensive_constant (enum machine_mode mode, optab binoptab,
rtx x, bool unsignedp)
{
+ bool speed = optimize_insn_for_speed_p ();
if (mode != VOIDmode
&& optimize
&& CONSTANT_P (x)
- && rtx_cost (x, binoptab->code, optimize_insn_for_speed_p ())
- > COSTS_N_INSNS (1))
+ && rtx_cost (x, binoptab->code, speed) > rtx_cost (x, SET, speed))
{
if (CONST_INT_P (x))
{
PR rtl-optimization/42258
* gcc.target/arm/thumb1-mul-moves.c: New test.
-
+
+ PR target/40697
+ * gcc.target/arm/thumb-andsi.c: New test.
+
2010-03-19 Michael Matz <matz@suse.de>
PR c++/43116
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Os -mthumb -march=armv5te" } */
+
+unsigned get_least_bits(unsigned value)
+{
+ return value << 9 >> 9;
+}
+
+/* { dg-final { scan-assembler "lsl" } } */
+/* { dg-final { scan-assembler "lsr" } } */