[LLVMdev] How to pass an array to a function using GenericValue

Alan Garny agarny at hellix.com
Thu Jan 12 08:00:49 PST 2012


Hi,

 

My application generates some LLVM assembly code which I then convert to IR
code using ParseAssemblyString. If I have the following LLVM assembly code:

 

   define double @test() {

    ret double 1.230000e+02

   }

 

then, using ExecutionEngine::runFunction, I get a GenericValue return value
which DoubleVal property is indeed equal to 123. So, all is fine there.
However, if I have the following LLVM assembly code:

 

   define void @test(double* %data) {

     %1 = getelementptr inbounds double* %data, i64 1

     store double 1.230000e+02, double* %1, align 8

     %2 = getelementptr inbounds double* %data, i64 3

     store double 1.230000e+02, double* %2, align 8

     ret void

   }

 

then, I thought I could declare an array of doubles and pass it to
ExecutionEngine::runFunction as follows:

 

   double data[4];

 

   data[0] = 100;

   data[1] = 101;

   data[2] = 102;

   data[3] = 103;

 

   std::vector<llvm::GenericValue> args;

   args.push_back(llvm::GenericValue(data));

 

   executionEngine->runFunction(function, args);

 

As expected, data[1] and data[3] get updated, but. not to 123 but to
6.22870535974643e-317 (!!). I am still relatively new to LLVM so I wouldn't
exclude the fact that I might have done something wrong while trying to pass
my data array to my function.?

 

Anyway, any help would be much appreciated.

 

Cheers, Alan.

 

PS: I have tried the getPointerToFunction(), but it just crashes my
application.!?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120112/86485adf/attachment.html>


More information about the llvm-dev mailing list