Dynamic allocation of a 3D array in LLVM APIs?

Hi Fellows,

What’s the best way to emit the following code in LLVM APIs:

%Nx = call i32 @get_local_size(i32 0)
%Ny = call i32 @get_local_size(i32 1)
%Nz = call i32 @get_local_size(i32 2)

%A = alloca [Nx x [ Ny x [Nz x i32]]], align64

It basically allocates a 3D dynamic array, where the 3D sizes are unknown at compile time. I am not sure if using alloca is the right direction? Any other alternatives?

Best,

Paul

Something like the following should work:

%Nx = call i32 @get_local_size(i32 0)
%Ny = call i32 @get_local_size(i32 1)
%Nz = call i32 @get_local_size(i32 2)
%mul1 = mul nuw i32 %Ny, %Nx
%mul2 = mul nuw i32 %Nz, %mul1
%A = alloca i32, i32 %mul2, align 4

Malloc?