Hi Wilco,

On 18/01/17 06:23, Wilco Dijkstra wrote:
ChangeLog:
2017-01-17  Wilco Dijkstra  <wdijk...@arm.com>

        * config/arm/arm.md (ashldi3): Remove shift by 1 expansion.
        (arm_ashldi3_1bit): Remove pattern.
        (ashrdi3): Remove shift by 1 expansion.
        (arm_ashrdi3_1bit): Remove pattern.
        (lshrdi3): Remove shift by 1 expansion.
        (arm_lshrdi3_1bit): Remove pattern.
        * config/arm/arm.c (arm_rtx_costs_internal): Slightly increase
        cost of ashldi3 by 1.
        * config/arm/neon.md (ashldi3_neon): Remove shift by 1 expansion.
        (<shift>di3_neon): Likewise.
--
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 
7d82ba358306189535bf7eee08a54e2f84569307..d47f4005446ff3e81968d7888c6573c0360cfdbd
 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -9254,6 +9254,9 @@ arm_rtx_costs_internal (rtx x, enum rtx_code code, enum 
rtx_code outer_code,
                   + rtx_cost (XEXP (x, 0), mode, code, 0, speed_p));
          if (speed_p)
            *cost += 2 * extra_cost->alu.shift;
+         /* Slightly disparage left shift by 1 at so we prefer adddi3.  */
+         if (code == ASHIFT && XEXP (x, 1) == CONST1_RTX (SImode))
+           *cost += 1;
          return true;
        }
Your ChangeLog says decrease cost for ashldi3 by 1 but looks like it is done only for SImode. Am I missing something?

Also, what was the motivation for this patch. Is that to improve the maintainability of the arm back-end?

Thanks,
Kugan

Reply via email to