blob: 702b6c35fc68d1f171e81c7675749a575146f4b0 [file] [log] [blame]
void foo(int x, int y, int z, int d, int *buf)
{
for(int i = z; i < y-z; ++i)
for(int j = 0; j < d; ++j)
/* buf[x(i+1) + j] = buf[x(i+1)-j-1] */
buf[i*x+(x-z+j)] = buf[i*x+(x-z-1-j)];
}
void bar(int x, int y, int z, int d, int *buf)
{
for(int i = 0; i < d; ++i)
for(int j = z; j < x-z; ++j)
/* buf[j+(y+i)*x] = buf[j+(y-1-i)*x] */
buf[j+(y-z+i)*x] = buf[j+(y-z-1-i)*x];
}
__attribute__((noipa))
void baz(int x, int y, int d, int *buf)
{
foo(x, y, 0, d, buf);
bar(x, y, 0, d, buf);
}
int main(void)
{
int a[] = { 1, 2, 3 };
baz (1, 2, 1, a);
/* foo does:
buf[1] = buf[0];
buf[2] = buf[1];
bar does:
buf[2] = buf[1]; (no-op)
so we should have { 1, 1, 1 }. */
for (int i = 0; i < 3; i++)
if (a[i] != 1)
__builtin_abort ();
}