[PATCH] D143882: [ADT] Add llvm::rotl and llvm::rotr to bit.h
Kazu Hirata via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 26 23:55:11 PST 2023
kazu added inline comments.
================
Comment at: llvm/include/llvm/ADT/bit.h:366
+ if (R < 0)
+ return llvm::rotr(V, -R);
+
----------------
andrew.w.kaylor wrote:
> This is dead code. Because you defined N as unsigned, R will be converted to unsigned for the % operation on line 361 and the result will never be negative. It gets the right answer anyway, but it doesn't seem to be what you intended.
>
> As an example, in your test "llvm::rotl<uint8_t>(0x53, -5)" this will happen
>
> N = 8u; // (std::numeric_limits<uint8t>::digits)
> R = 0xFFFFFFFB % 8u; // (unsigned)R % N
>
> So R = 3, and rotl(0x53, 3) yields 0x9A, as expected.
>
> The point is, the code on lines 365-366 isn't doing anything. The same applies to lines 378-379 below.
>
> This was reported by Coverity, BTW, which is why I happened to notice.
Thank you for catching and reporting this! I'll post a follow-up patch to fix this.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D143882/new/
https://reviews.llvm.org/D143882
More information about the llvm-commits
mailing list