2016-09-03 2 views
0

:LLC - 기대 값 내가 LLC 내 example.ll 파일하려고 할 때이 메시지를 받고 있어요 토큰 오류

llc: example.ll:12:29: error: expected value token 
%1 = icmp slt i1 %cmptmp, i16 0 
         ^

example.ll 파일 :

; ModuleID = 'modulle' 

define i16 @main() { 
entry: 
    %x = alloca i16 
    store i16 2, i16* %x 
    br label %loop_condition 

loop_condition:         ; preds = %loop, %entry 
    %0 = load i16, i16* %x 
    %cmptmp = icmp sgt i16 %0, 1 
    %1 = icmp slt i1 %cmptmp, i16 0 
    br i1 %1, label %loop, label %while_continue 

loop:            ; preds = %loop_condition 
    br label %loop_condition 

while_continue:         ; preds = %loop_condition 
    ret i16 0 
} 

내가 을 제거 i16 모두 정상적으로 작동하지만 LLVM이 내 코드에 삽입하는 이유를 알지 못합니다. 아무도 문제가 뭔지 알고 있습니까?

--- UPDATE ---

.ll 출력은 내 장난감 컴파일러에서입니다. 이 라인 및 코드입니다 :

Value *cond = llvm::CmpInst::Create(llvm::Instruction::ICmp, llvm::CmpInst::ICMP_SLT, binRelOpCond, llvm::ConstantInt::get(llvm::getGlobalContext(), llvm::APInt(16, 0, true)), "", codeGenContext.getBlock()); 

binRelOpCond 변수입니다 :

CmpInst *compareRes = CmpInst::Create(Instruction::ICmp, CmpInst::ICMP_SGT, left, right, "cmptmp", codeGenContext.getBlock()); 

감사합니다.

+2

"왜 내 코드에 LLVM을 삽입했는지 모르겠다"- 좀 더 구체적인 질문이 있습니까? 그게 무슨 파일을 만들었지? – Oak

+0

내 장난감 컴파일러에서 이것은 해당 세그먼트의 코드입니다 : '값 * cond = llvm :: CmpInst :: Create (llvm :: Instruction :: ICmp, llvm :: CmpInst :: ICMP_SLT, binRelOpCond, llvm :: ConstantInt :: 얻을 (LLVM :: getGlobalContext(), LLVM :: APInt (16, 0, TRUE)), "", codeGenContext.getBlock());' ** binRelOpCond **입니다 : 'CmpInst * compareRes = CmpInst :: Create (Instruction :: ICmp, CmpInst :: ICMP_SGT, 왼쪽, 오른쪽, "cmptmp", codeGenContext.getBlock()), ' 내가 뭘 잘못하고 있는지 모르겠다. 도와 주셔서 감사합니다. – roger

+0

코드를 포함 해 주셔서 감사합니다. 문제의 본문으로 편집하는 것이 더 좋지만 :-) 나는 버그를 보았습니다. 그에 따라 아래에서 답변을 업데이트했습니다. – Oak

답변

1

해당 파일의 형식이 잘못되었습니다. icmp의 구문은 각 피연산자의 유형, 모두를위한 단 하나의 유형이 없습니다 :

<result> = icmp <cond> <ty> <op1>, <op2> 

당신이 게요 생성 된 주석에 추가 한 코드를보고, 버그는 llvm::APInt(16, 0, true) 함께 - 당신이 ' 명시 적으로 유형이 i16 인 상수를 만들었지 만, %cmptmp의 유형이기 때문에 i1 유형의 상수와 만 비교할 수 있습니다. 나는 왜 그 주장을 왜 받아들이지 않았는지 모르겠다.

관련 문제