[llvm-commits] [PATCH] RDRAND intrinsics

Benjamin Kramer benny.kra at gmail.com
Sat Jul 7 02:12:05 PDT 2012


On 06.07.2012, at 23:30, Eli Friedman wrote:

> On Fri, Jul 6, 2012 at 2:03 PM, Benjamin Kramer <benny.kra at gmail.com> wrote:
>> 
>> On 06.07.2012, at 22:52, Eli Friedman wrote:
>> 
>>> On Fri, Jul 6, 2012 at 1:00 PM, Benjamin Kramer <benny.kra at gmail.com> wrote:
>>>> The attached patch adds support for intel's rdrand intrinsics to LLVM.
>>>> 
>>>> The tricky part is that the intrinsics have to return two values (the random value and the carry flag). This is solved with a pointer argument and a cmov to materialize CF, which matches GCC's output. This approach requires some custom lowering code, but I don't see a way to do it with tablegenerated patterns only.
>>> 
>>> It would be much more friendly to the optimizer to use multiple return
>>> values... but it might not be worth the hassle, considering that
>>> rdrand is relatively slow.
>> 
>> I tried this first as it also looks cleaner, but I couldn't find a way to smuggle it past legalization into the target specific lowering.
> 
> X86TargetLowering::ReplaceNodeResults?

Doesn't work because TLI.getOperationAction bails out early when it sees an extended type. The legalizer then tries to expand the node and aborts.

- Ben



More information about the llvm-commits mailing list