| /* PR rtl-optimization/46248 */ |
| |
| struct S |
| { |
| int s; |
| }; |
| |
| void |
| foo (unsigned char *x, int y, struct S *z) |
| { |
| const int l1 = y; |
| const int l2 = y + l1; |
| const int l3 = y + l2; |
| const int l4 = y + l3; |
| const int l5 = y + l4; |
| const int l6 = y + l5; |
| const int l7 = y + l6; |
| int i; |
| for (i = 0; i < 8; i++) |
| { |
| int a = x[l3] - x[l4]; |
| int b = x[l4] - x[l5]; |
| int c = x[l5] - x[l6]; |
| int d = (b >= 0 ? b : -b) - (((a >= 0 ? a : -a) + (c >= 0 ? c : -c)) >> 1); |
| if (d < z->s * 2) |
| { |
| int v = d * (-b > 0 ? 1 : -1); |
| x[l2] += v >> 3; |
| x[l7] -= v >> 3; |
| } |
| } |
| } |