그건 :
// Create symbol to identify previous block. Added by Justin.
llvm::Type::TypeID stupidTypeID = llvm::Type::IntegerTyID;
llvm::Type* typePtr = llvm::Type::getPrimitiveType(_context, stupidTypeID);
llvm::GlobalVariable* prevBlockID = new llvm::GlobalVariable(typePtr,
false,
llvm::GlobalValue::LinkerPrivateLinkage,
NULL,
"PREV_BLOCK_ID");
내가 실행하려고
, 나는 다음과 같은 오류가 발생합니다.
Type::getPrimitiveType
구현
here을 살펴볼 수 있습니다. 간단히 말해서, 그것은 당신이 사용하도록 권고받은 API가 아닙니다. IntegerType의 경우 nullptr을 반환합니다.
/// Note: If you add an element to this, you need to add an element to the
/// Type::getPrimitiveType function, or else things will break!
은 기본적으로 당신이이 방법으로 유형을 생성 할 수 있습니다 : 또한, llvm/IR/Type.h에서 TypeID
의 정의에 있음이 코멘트 지정된 유형 귀하의 경우에는
에 대한 get
정적 API,
IntegerType *iTy = IntegerType::get(ctx, 32); // if it's 32bit INT
도우미 클래스 TypeBuilder
형식 생성을보다 쉽고 보편적으로 만듭니다. TypeBuilder
은 더 복잡한 유형을 정의해야 할 때 유용하고 직관적입니다 (예 : FunctionType
). 물론 소스 코드를 컴파일하는 데 드는 비용은 물론입니다 (주의해야합니까?).
IntegerType *intType = TypeBuilder<int, false>::get(ctx); // normal C int
IntegerType *intTy = TypeBuilder<types::i<32>, false>::get(ctx); // if it's 32bit INT
BTW, 당신은 또한/C++ SRC, 당신은 LLVM C로 출력 옵션의 대상을 선택해야 할 경우 현재 C의 LLVM IR를 생성하기위한 대응하는 C++ 코드를 얻으려면 ELLCC online compiler을 시도 할 수 있습니다 ++ API 코드. 또는 컴퓨터에서 직접 시도 할 수도 있습니다 (내부 컴파일러는 llc
을 호출하기 때문에)
llc input.ll -march=cpp -o -