[LLVMdev] how can I create an SSE instrinsics sqrt?

Shahid, Asghar-ahmad Asghar-ahmad.Shahid at amd.com
Fri Apr 17 20:50:33 PDT 2015


Hi zhi,

You have to also pass the value type to getDecalaration() API such as

Value* sqrtv = Intrinsic::getDeclaration(M, Intrinsic::x86_sse2_sqrt_pd, v->getType());

Regards,
Shahid

From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of zhi chen
Sent: Saturday, April 18, 2015 5:52 AM
To: LLVM Dev
Subject: [LLVMdev] how can I create an SSE instrinsics sqrt?

I want to create a vector version sqrt as the following.

Value *Approx::CreateFSqrt(IRBuilder<> &builder, Value *v, const char* Name) {
  Type *tys[] = {v->getType()};
  Module* M = currF->getParent();
  Value* sqrtv = Intrinsic::getDeclaration(M, Intrinsic::x86_sse2_sqrt_pd);
  CallInst *CI = builder.CreateCall(sqrtv, v, Name);

  return CI;
}

Here is Value *v is <2 x double>
However, it outputs Assertion `isa<X>(Val) && "cast<Ty>() argument of incompatible type! any idea?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150418/1e186b9c/attachment.html>


More information about the llvm-dev mailing list