[LLVMdev] Calling functions across modules. And those pesky vectors!
Danny
llvm at pixelperplexity.net
Thu Jan 3 18:14:55 PST 2008
Before I get started with more questions, thanks for the prompt reply on
my last set question, that was much appreciated.
First, I found references to lazy inling and optimizations for calling
functions across modules, but I can't figure out how to do that. If I
just take a Function* that I got out of one module and call it from the
other, it doesn't work. What's the general method for dealing with
interactions between modules? Up until this point, everything I've done
has been within one module.
Second, I was under the impression that vector types were fairly well,
but I can't seem to get a simple function which takes in and returns
vectors to work properly. And I don't understand the error. I made a
simple function which was just supposed to multiply two 3 component
float vectors and return the result:
//Snip on:
VectorType *vType = VectorType::get(Type::FloatTy, 3);
std::vector<const Type*> Vectors(2, vType);
FunctionType *mul_type = FunctionType::get(vType, Vectors, false);
Function* mul = new Function(mul_type,
Function::ExternalLinkage, "mul", mod);
mul->setCallingConv(CallingConv::C);
Function::arg_iterator args = mul->arg_begin();
Value* x = args++;
x->setName("x");
When I run getPointerToFunction I get an abort trap with the message:
Return operand #1 has unhandled type f32
When I print out the LLVM IR that was produced I get this:
; ModuleID = 'test'
define <3 x float> @mul(<3 x float> %x, <3 x float> %y) {
entry:
%result = mul <3 x float> %x, %y ; <<3 x float>>
[#uses=1]
ret <3 x float> %result
}
Which seems pretty reasonable to me.
Can anyone help me understand what's going on?
Thanks a lot!
-danny
More information about the llvm-dev
mailing list