2016-03-24 10 views
0

Bazı llvm (3.7) geçişler yazıyorum ve Constant sınıfları hakkında bazı bilgilere ihtiyacım var. llvm-IR'de ayrıştırma yapıyorum, genel değişkenler için başlatıcı olarak kullanılan "ConstantStruct" veya "ConstantArray" örnekleri var. Örneğin:ConstantStruct veya ConstantArray bellek içeriğini oku

%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 

ben yinelemeli (ayrıca ConstantStructs veya diziler olabilir) tüm unsurları ile gitmek zorunda kalmadan, Thoses sabitler hafızasını okuyabilseydi İşim çok daha kolay olurdu.

Örneğin, ben bir acı (ve hata eğilimli) bir süreçtir birer unsurları biri okumak zorunda, bugüne kadar

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

olarak bir işlev gerekiyordu.

Herhangi bir ipucu takdir edilecektir.

+1

Reddetme hakkında herhangi bir yorum memnuniyetle karşılanacaktır ... Bunu önemsiz bir soru olarak düşünmüyorum ... –

cevap

0

Sadece başlatıcı işlenenlerinde olası ConstExpr nedeniyle mümkün olmadığını anladım. Bununla birlikte, ben valueId üzerinde büyük bir geçiş ile güzel bir özyinelemeli uygulamalar elde etmeyi başardı.