Я хочу получить точное байтовое представление вложенных типов данных структуры/массива. Например, следующая структура C:
typedef struct zTy {
int x;
char c[2];
struct { char d; } v;
} z;
Он преобразуется в следующий LLVM IR:
%struct.zTy = type { i32, [2 x i8], %struct.anon }
%struct.anon = type { i8 }
%a = alloca %struct.zTy, align 4
Из инструкции alloca можно увидеть выравнивание (4 байта). Но я не знаю, куда вставляется это выравнивание или как рассчитывается выравнивание для вложенных структур. Я получаю общий размер структуры для моей целевой тройки, используя getTypeAllocSize():
AllocaInst* AI;
Module &M;
Type* T = AI->getAllocatedType();
int size = M.getDataLayout()->getTypeAllocSize(T) // 8 Byte
Есть ли способ определить точную компоновку произвольных вложенных типов данных для моей целевой архитектуры из прохода LLVM?