2013-09-06 5 views
1

값이 * indexValue 인 유형이 있고 유형이 i32입니다. indexValue은 int 유형의 숫자를 보유해야한다고 생각합니다. 는 지금은 indexValue, 가리키는 정확한 수를 사용하려면 그래서 나는 다음과 같이 수행이 올바른 방법 인 경우값에서 정확한 정수를 얻는 방법

ConstantInt* CI = llvm::cast<llvm::ConstantInt>(indexValue); //This is wrong, so is dyn_cast. 

uint64_t index = indexValue->getZExtValue(); 

uint64_t size = index + 1; 

모르겠어요. 그래서, 아무도 값이 정수형 콘텐츠를 얻는 방법을 말할 수 있습니까? 어떤 유형이 i32입니까?

답변이 있으면 매우 감사하겠습니다.

+0

이들은 ['llvm :: ConstantInt'] (http://llvm.org/)입니다. docs/doxygen/html/classllvm_1_1ConstantInt.html) 및 ['llvm :: Value'] (http://llvm.org/docs/doxygen/html/classllvm_1_1Value.html)을 참조하십시오. 그 맞습니까 ? – WhozCraig

답변

0

윤곽을 그리는 방법이 다소 정확합니다. this related question에 더 완전한 대답이 있습니다. 물론 그것은 값이 ConstantInt이라고 가정합니다.

값이 상수 일 것으로 예상되지만 그렇지 않은 경우 먼저 constant propagation passes 중 하나를 실행해야합니다. 값이 여전히 상수가 아니라면, 여러분이 할 수있는 일은 많지 않을 것입니다. 특별한 전문 상수 전파 패스를 쓰는 것을 제외하고는 ...

+0

당신은 맞습니다. 나는 가치가 일정하다는 것을 확신하지 못하기 때문에 이것을 다루는 나의 방법이 올바르지 않다고 생각합니다. 나는 다른 길을 생각할 것이다. 고마워. – gongweixue

관련 문제