入れ子構造体/配列のデータ型の正確なバイト表現を取得したいと考えています。例えば、以下のC構造体:ネストされた構造体/配列のLLVM整列
typedef struct zTy {
int x;
char c[2];
struct { char d; } v;
} z;
これは以下LLVM IRに変換される:アライメント(4バイト)を参照することが可能であるallocaを命令から
%struct.zTy = type { i32, [2 x i8], %struct.anon }
%struct.anon = type { i8 }
%a = alloca %struct.zTy, align 4
。しかし、私はこのアラインメントがどこに挿入されているのか、ネストされた構造体のアライメントがどのように計算されるのか分かりません。 私はgetTypeAllocSizeを()を使用して、私の目標のために、トリプル構造体の合計サイズを取得:
AllocaInst* AI;
Module &M;
Type* T = AI->getAllocatedType();
int size = M.getDataLayout()->getTypeAllocSize(T) // 8 Byte
渡すLLVMから私のターゲットアーキテクチャのための任意のネストされたデータ型の正確なレイアウトを決定する方法はありますか?
私はパス内でこれらの情報をどのように得ることができるか知っていますか? – user2600312
LLVM APIの回答を更新しました。 – Joky