[LLVMdev] rotate
Michael Gottesman
mgottesman at apple.com
Sun Jul 29 14:39:01 PDT 2012
After some reflection, I believe the problem was actually with shld/shrd and a similar
bit of C code.
On Jul 29, 2012, at 1:02 PM, Andy Gibbs <andyg1001 at hotmail.co.uk> wrote:
>> *NOTE* IIRC compiling this with -O0 on x86-64 can yield the wrong result
>> since clang will emit shifts and on intel shifts are mod the register
>> size [...snip...]
>
> I remember finding the same thing (although I haven't tried it on a recent
> clang version) and what I wondered was whether there was mileage in having
> an explicit intrinsic for rotation (like there is for bit counting, as in
> __builtin_clz and __builtin_ctz and so on). Microsoft's compiler has an
> explicit intrinsic in the form of _rotl8 and _rotl16 (IIRC -- this is from
> memory!). It would be nice to have a __builtin_rotl family in clang, in
> my opinion, but it would need back-end support from llvm. I would expect
> it to find use in code relating to hashing and cryptology. I know that
> the compiler *should* optimise
>
> uint32_t ror(uint32_t input, size_t rot_bits) {
> return (input >> rot_bits) | (input << ((sizeof(input) << 3) - rot_bits));
> }
>
> and such macros / inline functions are common, but an intrinsic specifies
> intent better and could provide for better code optimisation.
>
> Would this be worthwhile pursuing?
>
> Cheers
> Andy
>
>
More information about the llvm-dev
mailing list