https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93165

Alexander Monakov <amonakov at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amonakov at gcc dot gnu.org

--- Comment #3 from Alexander Monakov <amonakov at gcc dot gnu.org> ---
The compiler has no way of knowing ahead of time that you will be evaluating
the result on random data; for mostly-sorted arrays branching is arguably
preferable.

__builtin_expect_with_probability is a poor proxy for unpredictability: a
condition that is true every other time leads to a branch that is both very
predictable and has probability 0.5.

I think what you really need is a way to express branchless selection in the
source code when you know you need it but the compiler cannot see that on its
own. Other algorithms like constant-time checks for security-sensitive
applications probably also need such computational primitive.

So perhaps an unpopular opinion, but I'd say a __builtin_branchless_select(c,
a, b) (guaranteed to live throughout optimization pipeline as a non-branchy
COND_EXPR) is badly missing.

Reply via email to