Re: [PATCH] unroll: Make unrolled, unrolled_full and unrolled_none function-like

From: Tzu-Ching Yang

Date: Thu Oct 22 2026 - 07:10:46 EST


On Thu, Oct 22, 2026 at 10:01:40AM +0100, David Laight wrote:
> Is it possible to make the syntax:
> unrolled_for(....)
>
> Or is that made 'all hard and difficult' because he setting is sticky?

The pragma binds only to the loop that follows it, so it can go inside
the macro:

#define unrolled_full_for(...) \
__pick_unrolled(clang loop unroll(full), GCC unroll 65534) \
for (__VA_ARGS__)

unrolled_full_for (int i = 0, j = 7; i < 8; i++, j--)
s += a[i] * b[j];

GCC 8 to 16 and Clang 17 to 23 unroll this fully, and the same works
with break and continue in the body, nested loops and a loop inside
another macro. The count form has the same shape:

unrolled_count_for (4, int i = 0; i < n; i++)
s += a[i];

As a fourth option, the _for forms would replace the four unrolled*
macros: no clash with identifiers, and the loop reads like
for_each_*(); the cost is a new loop spelling at every user. Olek,
Eric, would you prefer this over options 1 to 3 from my earlier reply?

Thanks,
Tzu-Ching