제로 확장 명령과 곱하기 명령어를 기본 블록에 삽입하고 싶습니다. 입력은, 기본 블록에 제로 확장 명령 삽입하기
define void @DriverInit() {
EntryBlock:
%abc = call i32 @cuInit(i32 0)
ret void
}
내가 그것을 변환 할이다
define void @DriverInit() {
EntryBlock:
%abc = call i32 @cuInit(i32 0)
%2 = zext i32 1 to i64
%3 = mul i64 %2, ptrtoint (i1** getelementptr (i1** null, i32 1) to i64)
ret void
}
어떻게 LLVM C++ API를 사용하여 그것을 할 수
? 제로 확장 명령을 만들기 위해 아래의 코드를 사용합니다,하지만 그것을 할 수 없습니다.IRBuilder<> builder(BB);
Value *One = builder.getInt32(1);
Value *zer=builder.CreateZExt(One, IntegerType::getInt64Ty(M.getContext()),"1");
CreateZExt의 두 번째 인수는 제로 확장을 원하는 대상 유형입니다. 내가 틀렸다면 수정하십시오.
저는 LLVM의 초보자이며 패스에서 어떤 기능을 사용할 지에 대한 정보를 얻기가 어렵습니다. 소스 코드에 대한 doxygen 문서를 제외하고는 어떤 자원을 사용할 수 있습니까?
귀하의 질문을 이해할 수 없습니다 - 명확히 할 수 있습니까? 가지고있는 IR의 입력은 무엇이며, 만들고 싶은 출력은 무엇입니까? 'mul'에 대한 두 번째 인수에서 포인터 지시문은 무엇입니까? –
입력 기능에 'EntryBlock'이 이미있는 경우 기본 블록을 생성하는 이유는 무엇입니까? – CAFxX
게다가, 당신이 실제로하고있는 것을 설명하기 전에, 당신이 실제로하고있는 것을 설명하기 전에 도움이 될 것입니다. – CAFxX