[LLVMdev] [PATCH] Emit rbit, clz on ARM for __builtin_ctz

Evan Cheng evan.cheng at apple.com
Mon Jan 18 11:04:47 PST 2010


On Jan 15, 2010, at 12:04 PM, Sandeep Patel wrote:

> On Fri, Jan 15, 2010 at 6:03 PM, Chris Lattner <clattner at apple.com> wrote:
>> 
>> On Jan 14, 2010, at 10:13 PM, David Conrad wrote:
>> 
>>> Hi,
>>> 
>>> On ARMv6T2 this turns cttz into rbit, clz instead of the 4
>>> instruction sequence it is now.
>>> 
>>> I'm not sure if adding RBIT to ARMISD and doing this optimization in
>>> the legalize pass is the best option, but the only better way I
>>> could think of doing it was to add a bitreverse intrinsic to llvm
>>> ir, which itself might not be the best option since bitreverse
>>> probably isn't too common.
>> 
>> I haven't looked at the patch in detail, but this approach makes sense
>> to me.
>> 
>>> Other targets that I know of that could potentially benefit from
>>> this optimization being global (that have a clz and bitreverse
>>> instruction but not ctz) are AVR32 and C64x, neither of which llvm
>>> has backends for yet.
>> 
>> When/if another target wants this, we could add a ISD::RBIT operation,
>> it doesn't need to be added at the llvm ir level,
> 
> Bit reversal turns up in most FFT algorithms, so it wouldn't hurt to
> be able to add an instcombine that recognizes it, etc.

I agree with Chris it doesn't make sense to add a llvm instruction for this since it's rare. But it's something that can be recognized in dag combine / isel.  Can you attach some examples?

Evan

> 
> deep
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev





More information about the llvm-dev mailing list