Hi, On 2026-05-27 13:04:46 -0400, Greg Burd wrote: > > Forgive me, while $subject only mentions popcount I couldn't help > > myself so I added a few more RISC-V patches including a bug fix that I > > hope makes greenfly happy again. > > > > > > 0001 - This is a bug fix for DES/RISC-V/Clang DES initialization.
How confident are we that this bug just affects DES? > > ------> Join me in "the rabbit hole" on this issue if you care to... > > > > The existing software DES (as shown by the build-farm animal "greenfly" > > [1]) fails because Clang 20 has an auto-vectorization bug that we > > trigger in the DES initialization code (des_init() function), not the > > DES encryption algorithm itself. > > > > I searched the LLVM issue tracker, here are the issues that caught my eye: > > 1. Issue #176001 - "RISC-V Wrong code at -O1" > > - Vector peephole optimization with vmerge folding > > - Fixed by PR #176077 (merged Jan 2024) > > - Link: https://github.com/llvm/llvm-project/issues/176001 > > 2. Issue #187458 - "Wrong code for vector.extract.last.active" > > - Large index issues with zvl1024b > > - Partially fixed, still work ongoing > > - Link: https://github.com/llvm/llvm-project/issues/187458 > > 3. Issue #171978 - "RISC-V Wrong code at -O2/O3" > > - Illegal instruction from mismatched EEW > > - Under investigation > > - Link: https://github.com/llvm/llvm-project/issues/171978 > > 4. PR #176105 - "Fix i64 gather/scatter cost on rv32" > > - Cost model fixes for scatter/gather (merged Jan 2026) > > - Link: https://github.com/llvm/llvm-project/pull/176105 Have you confirmed that, by using a newer clang, the merging of the fixes actually fixes the problem? ISTM a perfectly viable patch would be to just reject building with a non-very-recent clang on riscv. > > My fix in 0001 is simply adding this in a few places in crypt-des.c: > > > > #if defined(__riscv) && defined(__clang__) > > pg_memory_barrier(); > > #endif That seems like a pretty odd fix for the problem. If the problem is auto-vectorization, we should stop auto-vectorization, not sprinkle memory barriers around. Either by pushing disabling of auto-vectorization on the file scope (using a #pragma clang push), loop scope (using vectorize(disable)) or just globally (by disabling it on riscv + clang, if the compiler is too old). Greetings, Andres Freund
