2016-03-24 14 views
0

私はいくつかのllvm(3.7)のパスを書いていますが、Constantクラスに関する情報が必要です。 私が解析しているllvm-IRには、グローバル変数の初期化子として使用される "ConstantStruct"または "ConstantArray"インスタンスがあります。たとえば、次のようにConstantStructまたはConstantArrayはメモリ内容を読み込みます

%struct.S = type { i32, i32, i32, i32 } 

@s = global [2 x %struct.S] [%struct.S { i32 6, i32 8, i32 -8, i32 -5 }, %struct.S { i32 0, i32 2, i32 -1, i32 2 }], align 4 

私は再帰的に(もConstantStructsまたは配列することができます)すべての要素を経由せず、thoses定数のメモリを読み取ることができれば私の仕事ははるかに容易になるだろう。

は例えば、私は私が痛い(およびバグ発生しやすい)プロセスであり、一つの要素のいずれかを読んでする必要があり、これまでのところ

llvm::ConstantStruct* initializer = globalVar->getInitializer(); 
void* memoryContent; 
int sizeInBytes = initializer->getMemoryContent(&memoryContent); 

としての機能を必要とするだろう。

ご了承ください。

+1

downvoteについてのコメントは高く評価されます...私はそれを些細な疑問として考えません... –

答えて

0

私は、イニシャライザのオペランドに可能なConstExprのために不可能であることを理解しました。

しかし、valueIdの大きなスイッチを使ってすばやく再帰的に実装することができました。