2014-06-10 2 views
1

일부 코드에서는 LLVM C++ API를 통해 생성합니다. 한 지점에서 함수에 원시 주소가 지정되었습니다. 나는 함수 포인터이 점을 설정하고 다음과 같이 호출이 잘 작동LLVM : 포인터의 함수 속성 설정

llvm::FunctionType* ft = llvm::FunctionType::get(...); 
llvm::Constant* iptr = llvm::ConstantInt::get(
    engine->getDataLayout()->getIntPtrType(state.context, 0), (uint64_t) pointer); 
llvm::Value* fptr = llvm::ConstantExpr::getIntToPtr(iptr, 
    llvm::PointerType::get(ft, 0)); 

llvm::Value* retval = state.builder.CreateCall(fptr, params); 

--- 하지만 나는 몇 가지 기능이 최적화에 도움이 속성을 설정할 수 있도록하려면 : readnone, 특히.

내가 아는 유일한 API는 llvm::Function이며,이 API는 없습니다. C에서 작동하는 방법이기 때문에 속성을 함수 유형의 속성으로 기대할 수 있지만 llvm::FunctionType에는 속성 API가없는 것 같습니다.

어떻게해야합니까?

답변

1

API (및 InvokeInst과 유사)를 통해 CallInst에 모든 기능 속성을 주석으로 표시 할 수 있습니다. 즉, 하나의 포인터를 통해 호출하려는 경우 별개의 호출 사이트가 필요합니다 (즉, readnone).