[llvm-dev] Side-channel resistant values

David Zarzycki via llvm-dev
Fri, 13 Sep 2019 08:02:27 -0000

> On Sep 13, 2019, at 10:45 AM, Chandler Carruth <chandlerc at
gmail.com> wrote:
>
> On Fri, Sep 13, 2019 at 1:33 AM David Zarzycki via llvm-dev <llvm-dev at
lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> Hi Chandler,
>
> The data-invariant feature sounds great but what about the general case?
When performance tuning code, people sometimes need the ability to reliably
generate CMOV, and right now the best advice is either “use inline assembly” or
“keep refactoring until CMOV is emited” (and hope that future compilers continue
to generate CMOV).
>
> Given that a patch already exists to reliably generate CMOV, are there any
good arguments against adding the feature?
>
> For *performance* tuning, the builtin that Hal mentioned is IMO the correct
design.
>
> Is there some reason why it doesn't work?

I wasn’t aware of __builtin_unpredictable() until now and I haven’t debugged why
it doesn’t work, but here are a couple examples, one using the ternary operator
and one using a switch statement:

https://godbolt.org/z/S46I_q <https://godbolt.org/z/S46I_q>

Dave
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20190913/88b2e14f/attachment.html>