[LLVMdev] Making use of SSE intrinsics

Eli Friedman eli.friedman at gmail.com
Tue May 20 05:45:14 PDT 2008


On Tue, May 20, 2008 at 5:03 AM, Nicolas Capens <nicolas at capens.net> wrote:
> LoadInst *x = new LoadInst(ptr_x, "", false, basicBlock);
>
> // y = rcpps(x)   // FIXME
> StoreInst *storeResult = new StoreInst(y, ptr_y, false, basicBlock);

Using an IRBuilder, something like the following (uncompiled, but it's
at least approximately right):
Value* x = Builder.CreateLoad(ptr_x);
Function* rcpps = Intrinsic::getDeclaration(Module, Intrinsic::x86_sse_rcp_ps);
Value* y = Builder.CreateCall(rcpps, x);
Builder.CreateStore(y, ptr_y);

> Somewhat related to this, I'd also like to know how to 'reinterpret_cast'
> values. It can be quite useful to sometimes interpret a vector of
> floating-point values as a vector of integers (for instance to extract the
> sign, exponent and/or mantissa bits). Any information on how to do that
> would be much appreciated.

Use the bitcast instruction (see http://llvm.org/docs/LangRef.html).

-Eli



More information about the llvm-dev mailing list