Reading from the memory
Now, since we have the address, we are ready to read the data from that address and assign the read value to a variable.
In LLVM the load
instruction is used to read from a memory location. This simple instruction or combination of similar instructions may then be mapped to some of the sophisticated memory read instructions in low-level assembly.
A load
instruction takes an argument, which is the memory address from which the data should be read. We obtained the address in the previous section by the getelementptr
instruction in a1
.
The load
instruction looks like the following:
%val = load i32, i32* a1
This means that the load
will take the data pointed by a1
and save in %val
.
To emit this we can use the API provided by LLVM in a function, as shown in the following code:
Value *getLoad(IRBuilder<> &Builder, Value *Address) { return Builder.CreateLoad(Address, "load"); }
Let's also return the loaded value:
builder.CreateRet(val);
The whole code is as follows...