[flang-commits] [clang] [flang] [llvm] [MathExtras][NFC] Optimize NextPowerOf2 similar to PowerOf2Ceil (PR #189160)

Max Graey via flang-commits flang-commits at lists.llvm.org
Fri Apr 3 05:21:32 PDT 2026


MaxGraey wrote:

You can also try the branchless version:
```cpp
uint64_t NextPowerOf2_New_Branchless(uint64_t A) {
  uint64_t Shift = Log2_64_Ceil(A + 1);
  uint64_t Res = UINT64_C(1) << Shift;
  return Res & -!(Shift >> 6);
}
```
https://godbolt.org/z/1Pe3Kz5Mc

For clang it should be even more optimal:
```asm
  mov     edx, 127
  bsr     rdx, rdi
  xor     rdx, 63
  mov     ecx, edx
  neg     cl
  mov     eax, 1
  shl     rax, cl
  test    rdx, rdx
  cmove   rax, rdx
  ret
```

https://github.com/llvm/llvm-project/pull/189160


More information about the flang-commits mailing list