[Bug target/77579] Missed multiple add (int) for CSEd case

2023-05-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77579

Andrew Pinski  changed:

   What|Removed |Added

 Status|ASSIGNED|NEW
   Assignee|pinskia at gcc dot gnu.org |unassigned at gcc dot 
gnu.org

--- Comment #3 from Andrew Pinski  ---
Thinking about this some more, doing the multiply multiple times is actually
slower on most cores.
So this is not something you want to do normally but with a constant multiply
you do for small power of 2 constant.

E.g.:
```
void f(int x, int y, int z, int *s)
{
   int t = y * 2;
   s[0] = t + x;
   s[1] = x - t;
}
```
You should get:

add w2, w0, w1 lsl 1
sub w0, w0, w1 lsl 1
stp w2, w0, [x3]

And no seperate lsl instruction as the cost to do the lsl is free in this case.

Anyways I am not working on this any more.

[Bug target/77579] Missed multiple add (int) for CSEd case

2017-08-17 Thread pinskia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77579

Andrew Pinski  changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2017-08-18
 Ever confirmed|0   |1

--- Comment #2 from Andrew Pinski  ---
With that patch there are a few regressions:
+FAIL: gcc.dg/tree-ssa/pr40921.c scan-tree-dump-times optimized "_* = -y_" 0
+FAIL: gcc.dg/tree-ssa/slsr-10.c scan-tree-dump-times optimized " * " 1
+FAIL: gcc.dg/tree-ssa/slsr-14.c scan-tree-dump-times optimized " * " 1
+FAIL: gcc.dg/tree-ssa/slsr-15.c scan-tree-dump-times optimized " * " 1
+FAIL: gcc.dg/tree-ssa/slsr-19.c scan-tree-dump-times optimized " * " 2
+FAIL: gcc.dg/tree-ssa/slsr-20.c scan-tree-dump-times optimized " * s" 1
+FAIL: gcc.dg/tree-ssa/slsr-21.c scan-tree-dump-times optimized " * stride"
1
+FAIL: gcc.dg/tree-ssa/slsr-22.c scan-tree-dump-times optimized " * 3" 1
+FAIL: gcc.dg/tree-ssa/slsr-23.c scan-tree-dump-times optimized " * stride"
1
+FAIL: gcc.dg/tree-ssa/slsr-24.c scan-tree-dump-times optimized " * " 1
+FAIL: gcc.dg/tree-ssa/slsr-25.c scan-tree-dump-times optimized " * " 1
+FAIL: gcc.dg/tree-ssa/slsr-26.c scan-tree-dump-times optimized " * stride"
1
+FAIL: gcc.dg/tree-ssa/slsr-31.c scan-tree-dump-times optimized " * 2" 1
+FAIL: gcc.dg/tree-ssa/slsr-32.c scan-tree-dump-times optimized " * s" 1
+FAIL: gcc.dg/tree-ssa/slsr-37.c scan-tree-dump-times optimized " * s" 1
+FAIL: gcc.dg/tree-ssa/slsr-5.c scan-tree-dump-times optimized " * " 1
+FAIL: gcc.dg/tree-ssa/slsr-7.c scan-tree-dump-times optimized " * " 1
+FAIL: gcc.dg/tree-ssa/slsr-9.c scan-tree-dump-times optimized " * " 1

Though most are not really worse code.
slsr-21.c, slsr-22.c, slsr-23.c, slsr-24.c, slsr-25.c, slsr-26.c, slsr-31.c,
slsr-32.c, slsr-37.c.

Basically if the one of the operand is a constant, we want to optimize this to:
add DST, SRC, SRC1 lsl #N .  But if it is not constant we don't want to do
madd.  Let me see if I can do that.

[Bug target/77579] Missed multiple add (int) for CSEd case

2016-09-13 Thread pinskia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77579

--- Comment #1 from Andrew Pinski  ---
Just so there is no confussion on the testcase here it is without need the -D
option:
void f(int x, int y, int z, int *s)
{
   int t = y * z;
   s[0] = t + x;
   s[1] = x - t;
}