Re: [PATCH][ARM] Handle simple SImode PLUS and MINUS operations in rtx costs

2014-05-02 Thread Richard Earnshaw
On 24/03/14 17:21, Kyrill Tkachov wrote:
 Hi all,
 
 I noticed that we don't handle simple reg-to-reg arithmetic operations in the 
 arm rtx cost functions. We should be adding the cost of alu.arith to the 
 costs 
 of the operands. This patch does that. Since we don't have any cost tables 
 yet 
 that have a non-zero value for that field it shouldn't affect code-gen for 
 any 
 current cores.
 
 Bootstrapped and tested on arm-none-linux-gnueabihf.
 
 Ok for next stage1?
 
 Thanks,
 Kyrill
 
 2014-03-24  Kyrylo Tkachov  kyrylo.tkac...@arm.com
 
  * config/arm/arm.c (arm_new_rtx_costs): Handle reg-to-reg PLUS
  and MINUS RTXs.
 

I think the convention for big switch statements like this is to write

* config/arm/arm.c (arm_new_rtx_costs, case PLUS, MINUS): 

However...

 
 rtx-costs-plus-minus.patch
 
 
 diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
 index bf5d1b2..3102b67 100644
 --- a/gcc/config/arm/arm.c
 +++ b/gcc/config/arm/arm.c
 @@ -9428,6 +9428,14 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum 
 rtx_code outer_code,
 *cost += rtx_cost (XEXP (x, 1), code, 1, speed_p);
 return true;
   }
 +   else if (REG_P (XEXP (x, 0)))
 + {
 +   *cost += rtx_cost (XEXP (x, 0), code, 0, speed_p)
 ++ rtx_cost (XEXP (x, 1), code, 1, speed_p);
 +   if (speed_p)
 + *cost += extra_cost-alu.arith;
 +   return true;
 + }
  

This still doesn't handle the case where the first operand is not a
register.  Furthermore, the only difference between this and what we had
before is that we now add alu.arith to the overall cost.  But we want to
do that anyway.

I think you really just need

  else if (speed_p)
*cost += extra_cost.alu_arith;

and then let recursion (return false) handle the cost of non-register
operands (register will always cost as zero).

 return false;
   }
 @@ -9663,6 +9671,14 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum 
 rtx_code outer_code,
 *cost += rtx_cost (XEXP (x, 0), PLUS, 0, speed_p);
 return true;
   }
 +   else if (REG_P (XEXP (x, 1)))
 + {
 +   *cost += rtx_cost (XEXP (x, 0), PLUS, 0, speed_p)
 ++ rtx_cost (XEXP (x, 1), PLUS, 1, speed_p);
 +   if (speed_p)
 + *cost += extra_cost-alu.arith;
 +   return true;
 + }

The same here.

 return false;
   }
  
 
R.




Re: [PATCH][ARM] Handle simple SImode PLUS and MINUS operations in rtx costs

2014-04-16 Thread Kyrill Tkachov

On 02/04/14 13:55, Kyrill Tkachov wrote:

Pinging this for stage1, otherwise I'll forget about it and it'll fall through
the cracks...

http://gcc.gnu.org/ml/gcc-patches/2014-03/msg01276.html

Thanks,
Kyrill


Ping.
http://gcc.gnu.org/ml/gcc-patches/2014-03/msg01276.html

Thanks,
Kyrill



On 24/03/14 17:21, Kyrill Tkachov wrote:

Hi all,

I noticed that we don't handle simple reg-to-reg arithmetic operations in the
arm rtx cost functions. We should be adding the cost of alu.arith to the costs
of the operands. This patch does that. Since we don't have any cost tables yet
that have a non-zero value for that field it shouldn't affect code-gen for any
current cores.

Bootstrapped and tested on arm-none-linux-gnueabihf.

Ok for next stage1?

Thanks,
Kyrill

2014-03-24  Kyrylo Tkachov  kyrylo.tkac...@arm.com

   * config/arm/arm.c (arm_new_rtx_costs): Handle reg-to-reg PLUS
   and MINUS RTXs.








Re: [PATCH][ARM] Handle simple SImode PLUS and MINUS operations in rtx costs

2014-04-02 Thread Kyrill Tkachov
Pinging this for stage1, otherwise I'll forget about it and it'll fall through 
the cracks...


http://gcc.gnu.org/ml/gcc-patches/2014-03/msg01276.html

Thanks,
Kyrill

On 24/03/14 17:21, Kyrill Tkachov wrote:

Hi all,

I noticed that we don't handle simple reg-to-reg arithmetic operations in the
arm rtx cost functions. We should be adding the cost of alu.arith to the costs
of the operands. This patch does that. Since we don't have any cost tables yet
that have a non-zero value for that field it shouldn't affect code-gen for any
current cores.

Bootstrapped and tested on arm-none-linux-gnueabihf.

Ok for next stage1?

Thanks,
Kyrill

2014-03-24  Kyrylo Tkachov  kyrylo.tkac...@arm.com

  * config/arm/arm.c (arm_new_rtx_costs): Handle reg-to-reg PLUS
  and MINUS RTXs.





[PATCH][ARM] Handle simple SImode PLUS and MINUS operations in rtx costs

2014-03-24 Thread Kyrill Tkachov

Hi all,

I noticed that we don't handle simple reg-to-reg arithmetic operations in the 
arm rtx cost functions. We should be adding the cost of alu.arith to the costs 
of the operands. This patch does that. Since we don't have any cost tables yet 
that have a non-zero value for that field it shouldn't affect code-gen for any 
current cores.


Bootstrapped and tested on arm-none-linux-gnueabihf.

Ok for next stage1?

Thanks,
Kyrill

2014-03-24  Kyrylo Tkachov  kyrylo.tkac...@arm.com

* config/arm/arm.c (arm_new_rtx_costs): Handle reg-to-reg PLUS
and MINUS RTXs.diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index bf5d1b2..3102b67 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -9428,6 +9428,14 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
 	  *cost += rtx_cost (XEXP (x, 1), code, 1, speed_p);
 	  return true;
 	}
+	  else if (REG_P (XEXP (x, 0)))
+	{
+	  *cost += rtx_cost (XEXP (x, 0), code, 0, speed_p)
+	   + rtx_cost (XEXP (x, 1), code, 1, speed_p);
+	  if (speed_p)
+	*cost += extra_cost-alu.arith;
+	  return true;
+	}
 
 	  return false;
 	}
@@ -9663,6 +9671,14 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code,
 	  *cost += rtx_cost (XEXP (x, 0), PLUS, 0, speed_p);
 	  return true;
 	}
+	  else if (REG_P (XEXP (x, 1)))
+	{
+	  *cost += rtx_cost (XEXP (x, 0), PLUS, 0, speed_p)
+	   + rtx_cost (XEXP (x, 1), PLUS, 1, speed_p);
+	  if (speed_p)
+	*cost += extra_cost-alu.arith;
+	  return true;
+	}
 	  return false;
 	}