Open sbkim28 opened 3 weeks ago
안녕하세요, Interpreter에서 오류가 발생하는 것 같아서 이를 제보하고자 합니다.
다음은 제가 임의로 작성한 LLVM IR입니다.
define dso_local i32 @main() #0 { entry: %v0 = insertelement <4 x i64> undef, i64 3, i32 0 %v1 = insertelement <4 x i64> %v0, i64 2, i32 1 %v2 = insertelement <4 x i64> %v1, i64 1, i32 2 %v3 = insertelement <4 x i64> %v2, i64 0, i32 3 br label %middle.block middle.block: %vpicmp0 = call <4 x i64> @vpicmp_sle_i64x4(<4 x i64> %v3, <4 x i64> %v3) br label %end.block end.block: %ans = extractelement <4 x i64> %vpicmp0, i32 0 call void @write(i64 noundef %ans) ret i32 0 }
해당 코드를 컴파일하면 다음을 얻습니다.
start main 0: .entry: r1 = const 3 r2 = const 0 v1 = vupdate v1 r1 r2 64 r3 = const 2 r4 = const 1 v1 = vupdate v1 r3 r4 64 v1 = vupdate v1 r4 r3 64 v2 = vupdate v1 r2 r1 64 br .middle.block .middle.block: v1 = vpicmp sle v2 v2 64 br .end.block .end.block: r1 = vextct v1 r2 64 call write r1 ret r2 end main
이를 실행시키면 다음과 같은 오류가 발생합니다.
Block middle.block is not well formed : line 12
IR과 어셈블리 모두 syntax가 올바른 것으로 보이는데, vpicmp instruction이 포함된 block을 parsing하는 과정에서 문제가 있는 것 같습니다. 확인해보니 inst.rs의 icmp_parser에 typo가 있는 것 같습니다.
inst.rs
icmp_parser
let (rem, op) = alt((tag("icmp"), tag("vicmp"), tag("vpcimp")))(rem)?;
해당 문제를 확인해주셨으면 합니다. 감사합니다.
너무 어처구니없는 실수를 했네요;; 최신버전에서 수정되었습니다. 감사합니다.
안녕하세요, Interpreter에서 오류가 발생하는 것 같아서 이를 제보하고자 합니다.
다음은 제가 임의로 작성한 LLVM IR입니다.
해당 코드를 컴파일하면 다음을 얻습니다.
이를 실행시키면 다음과 같은 오류가 발생합니다.
IR과 어셈블리 모두 syntax가 올바른 것으로 보이는데, vpicmp instruction이 포함된 block을 parsing하는 과정에서 문제가 있는 것 같습니다. 확인해보니
inst.rs
의icmp_parser
에 typo가 있는 것 같습니다.해당 문제를 확인해주셨으면 합니다. 감사합니다.