On Thu, Oct 23, 2025 at 12:33 PM Matthias Kretz <[email protected]> wrote:
> Tomasz Kaminski [Monday, 20 October 2025, 10:47:12 CEST]:
> > […] so what I suggest instead is to introduce:
> >
> > template<typename... _Args>
> > [[__gnu__::__always_inline__]]
> > constexpr __should_constprop(const _Args&... __args)
> > {
> > if conteval { // of if (__builtin_is_constant_evaluated())
> > return true;
> > }
> > return __is_constprop(__args) && ...;
> > }
> >
> > The _M_isconstprop member on simd, should become __is_constprop hidden
> > friend.
> > […]
>
> BTW, I re-checked why I needed __builtin_is_constant_evaluated() even
> though
> __builtin_constant_p(arg) should always be true in constant evaluated
> code. It
> seems this was only necessary for Clang <= 18. I'd still keep it as a
> shortcut
> in the multi-arg overload to avoid asking all these __is_constprop
> questions
> in constant expressions.
>
> Also, the difference in naming between __should_constprop and
> __is_constprop
> is too subtle. I now named both functions __is_constprop. With Clang >= 19
> that should also be fine.
>
> However, I'm not really happy with how the code reads now, because that
> "is
> constprop" includes is_constant_evaluated isn't that obvious in the name.
>
> How about __is_value_known(...) instead of __is_constprop(...)?
>
What about __is_constknow? I do not care much about internal helper name,
but when I see __is_value_know, I assume that answer is true, because the
value is always known at runtime.
>
> Motivation: e.g.
>
> if (!__is_constprop(__x))
>
> This is saying "if not consteval and the value of __x is not constant
> propagated". But that first part is not obvious IMHO.
>
> if (!__is_value_known(__x))
>
> The value clearly is known in a constant expression. Maybe it's less clear
> that the value can also be known via constant propagation. But that
> shouldn't
> really matter.
>
> - Matthias
>
> --
> ──────────────────────────────────────────────────────────────────────────
> Dr. Matthias Kretz https://mattkretz.github.io
> GSI Helmholtz Center for Heavy Ion Research https://gsi.de
> std::simd
> ──────────────────────────────────────────────────────────────────────────
>