2014-03-03 2 views
2

추가 분석을 위해 LLVM IR에서 상수를 추출하려고합니다. 지금까지 적절한 메소드를 사용하여 int, float 및 double을 추출 할 수있었습니다.LLVM에서 float와 double을 구별합니다. IR

어떻게 APF 클래스의 메서드에서 값을 가져 오기 전에 float와 double을 구별 할 수 있습니까? 적절한 체크가 없으면 double에 convertToFloat()을 호출하거나 float에 convertToDouble()을 호출 할 때 어설 션을 트리거합니다. 값을 얻으려고하기 전에 LLVM에서 데이터 유형을 구별하는 간접적 인 메커니즘이 있습니까?

답변

4

, 간단한 일이 내가 생각할 수있는 의 the getSemantics method을 사용하는 것입니다 : 그런데

bool IsFloat = MyFloat.getSemantics() == &APFloat::IEEEsingle; 
bool IsDouble = MyFloat.getSemantics() == &APFloat::IEEEdouble; 

, 당신이있는 경우에 단지 APFloat이 온 것을 Value의 종류를 확인하는 것이 더 일반적입니다 그것은 :

bool IsFloat = MyValue.getType()->isFloatTy(); 
bool IsDouble = MyValue.getType()->isDoubleTy(); 
+0

확인되었습니다. 둘 다 완벽하게 작동합니다! – vPraetor

1

이 링크에 설명 된대로 각 유형의 크기가 다음은 C 언어를 sizeof()에 대한 대체 기능을 사용할 수 있습니다 알고있는 경우 : 에는 여러 가지가 있습니다 http://nondot.org/sabre/LLVMNotes/SizeOf-OffsetOf-VariableSizedStructs.txt

+0

감사합니다. 나는 내가하려고하는 것이 상당히 사소하다고 생각하고 내가 사용할 수있는 내장 된 물건이 있어야한다. 그런 것이 없다면 당신이 지적한 바가 이것에 대한 하나의 해결책입니다. – vPraetor