2013-09-25 4 views
0

LLVM 코드에 정수 값 벡터 vector<Value*> myIntegers (상수 일 필요는 없음)이 있습니다. 이 정수를 저장하기위한 Store 명령어를 만들고 싶습니다. 아래의 형식을 사용하여 저장소 명령어를 만들려면 첫 번째 인수에 대해이 정수를 가리키는 Value *를 만들어야합니다 (배열을 만듭니다).LLVM에서 정수 배열 만들기

new StoreInst(Value *Val, Value *Ptr, ...); 

내 정수 내가 사용했을 상수 인 경우 : 그것을 가리키는 Value*

Constant *IntArrayConstant = ConstantDataArray::get(getGlobalContext(), ArrayRef<Value*> myIntegers); 

어떻게 i32 유형의 일반적인 배열을 만들 수 있습니다? 설명서에 ArrayRef를 저장하는 것이 안전하지 않습니다.

답변

1

VectorType::get()을 사용하고 방금 얻은 형식의 UndefValue을 만든 다음 N 개의 요소 수 N을 사용하여 N InsertElementInst으로 채워야합니다. 그런 다음 StoreInst을 작성하여 Value*을 힙에 저장하십시오.

마지막으로 InsertElementInst의 결과는 찾고있는 Value* (즉, 값이 포함 된 벡터)이됩니다. 수행하려는 작업에 따라 실제로 StoreInst이 필요하지 않을 수도 있습니다.

모든 Value의 기본 유형이 동일한 것으로 가정합니다. 즉, getType()은 모두 동일한 결과를 반환합니다.

편집 : 또한 수행하려는 작업에 따라 VectorType::get 대신 ArrayType::get을 사용하는 것이 더 적절할 수 있습니다.