bollu
August 11, 2017, 8:40pm
1
Hello all,
This is a general question regarding type conversion:
From what I understand, bitcast is wrong in this case because a GEP into a ** should be computed differently from a GEP into [ x ]*.
So, what is the correct way to perform this type conversion?
Thanks,
Siddharth
Bitcast, then use the correct form of GEP and other affected instructions.
-Krzysztof
bollu
August 12, 2017, 11:13am
3
What would the “correct form of GEP be”?
Thanks,
Siddharth
I don't think there is one. The types are not compatible. In your
situation i32** is an array of N pointers to i32 arrays. [4 x i32]* is
a contiguous array of 4N i32s.
If you really need to use a function that takes the second type then
copying the data is the only option I see.
Cheers.
Tim.
Ah, right. I was assuming that OP wanted to load pointers instead of i32s.
-Krzysztof
Look at it from a “C” perspective.
If you have int **
, and want intx4 *
, what do you need to do?
You will need to load (copy, read) the content of the pointer.
But it’s the wrong type, you only get a single int
that way. So you need to cast the pointer to intx4 **
first.
So, in essence:
int **p;
…
auto tmp = (intx4**)p; // Bitcast
intx4 val = *tmp; // Load
In IR, that becomes a bitcast and load instruction.
If you also want to do tmp[3] or some such, there would be a GEP instruction after the bitcast.