ROR is now optimized as SHR ?
user1234
user1234 at 12.de
Sat Sep 14 15:18:43 UTC 2024
On Saturday, 14 September 2024 at 11:53:14 UTC, kinke wrote:
> On Saturday, 14 September 2024 at 11:20:26 UTC, user1234 wrote:
>> I'm confused, not sure if it's a codegen bug but as you can
>> observe here https://godbolt.org/z/PKn4Tnzff, it seems that
>> since LDC 1.38, a SHR is generated but 1.37 previously it was
>> a ROL (and not ROR either).
>
> What can be seen is that optimized core.bitop.ror does use the
> ror instruction, but the comparison with inlined ror can
> apparently be transformed by the optimizer, and LLVM 18 (LDC
> v1.38+) chooses a different transformation with movzx+shr
> instead of LLVM 17's rol.
I understand that it's not LDC fault, sorry but that was so weird
that I needed to know. The transformation operated by LLVM is
just wrong. I guess it's caused by a combination of aggressive
optimz + folding. That should just generates
```asm
mov rax, rdi
rol rdi, 8
cmp rax, rdi
sete al
ret
```
Actually If you use the LLVM asm to write a naked asm function
then you just get wrong results.
Thanks for you time.
More information about the digitalmars-d-ldc
mailing list