[libcxx-commits] [PATCH] D122397: [libc++] Use __builtin_expect and __builtin_assume in _LIBCPP_ASSERT

Arthur Eubanks via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Mon Apr 4 16:20:05 PDT 2022

aeubanks added a comment.

In D122397#3427029 <https://reviews.llvm.org/D122397#3427029>, @ldionne wrote:

> In D122397#3427001 <https://reviews.llvm.org/D122397#3427001>, @aeubanks wrote:
>> Just a heads up, we've bisected some leaks to this change. There are some calls to operator new that aren't be optimized away because they're now the subject of various `llvm.assume()` calls. Still investigating.
> Ugh, thanks for the heads up. Please keep me in the loop (here or ideally in Discord so I don't miss it). I'm open to removing `__builtin_assume` until the issue is fixed if it gets to that.

I can't share the preprocessed source code but I did reduce the issue down to missed DSE (https://github.com/llvm/llvm-project/blob/3b9833597e810d4c485487d2f094a8e223af5548/llvm/lib/Analysis/CaptureTracking.cpp#L375) causing the call to operator new to not get removed

  @global = external constant i8
  define void @f() {
    %tmp1 = tail call noalias i8* @_Znwm(i64 noundef 32)
    %tmp2 = icmp ugt i8* %tmp1, @global
    ; this assume isn't even necessary to stop DSE, just the icmp
    ;tail call void @llvm.assume(i1 %tmp2)
    store i8 0, i8* %tmp1, align 1
    ret void
  declare i8* @_Znwm(i64)
  declare void @llvm.assume(i1)

So `__builtin_assume` is causing worse codegen in some cases. I think putting this under a flag would be nice while we figure out remaining regressions caused by more `__builtin_assume`.

In our case I believe we actually do have a leak in some sense in the original code which was previously optimized away. (although whether that's a real leak depends on your definition of a leak, see https://discourse.llvm.org/t/eliminating-global-memory-roots-or-not-to-help-leak-checkers/58066, anyway that's drifting too far from this issue)

  rG LLVM Github Monorepo



actor(@aeubanks) application(Differential) author(@ldionne) herald(H343) herald(H426) herald(H576) herald(H864) mention(@aeubanks) mention(@ldionne) monogram(D122397) object-type(DREV) phid(PHID-DREV-gncp7vud6kit3rcsvyy6) reviewer(#libc) reviewer(@Mordante) reviewer(@philnik) revision-repository(rG) revision-status(published) subscriber(@aeubanks) subscriber(@libcxx-commits) subscriber(@Mordante) subscriber(@philnik) tag(#all) tag(#libc) via(web)

More information about the libcxx-commits mailing list