snu-sf-class / swpp202401

Principles and Practices of Software Development Main Repository
14 stars 4 forks source link

[Project] Backend error: handling vicmp intrinsic #135

Open sbkim28 opened 6 months ago

sbkim28 commented 6 months ago

안녕하세요, 백엔드에서 오류가 발생하는 것 같아 이를 제보하고자 합니다.

다음은 제가 임의로 작성한 LLVM IR 코드입니다.

define dso_local i32 @main() #0 {
entry:
  %v = insertelement <4 x i64> undef, i64 0, i32 0
  %v0 = insertelement <4 x i64> %v, i64 1, i32 1
  %v1 = insertelement <4 x i64> %v0, i64 2, i32 2
  %v2 = insertelement <4 x i64> %v1, i64 3, i32 3

  %vcmp = call <4 x i64> @vicmp_eq_i64x4(<4 x i64> %v2, <4 x i64> %v2)
  %extractel = extractelement <4 x i64> %vcmp, i32 0
  call void @write(i64 noundef %extractel)
  ret i32 0
}

해당 코드를 실행하면 백엔드에서 Exception이 발생합니다. 관련해서 확인해보니, 백엔드의 emitter.cppemitFromVectorCompIntrinsic에서 호출하는 tryCalculateVectorCompSelectBitWidth 함수에서 vicmp intrinsic을 처리하는 과정에서 다음 line이 문제가 되는 것 같습니다.

if (ret_ty->isVectorTy() && __inst.arg_size() == 3) {

해당 문제를 확인해주셨으면 합니다. 감사합니다.

strikef commented 6 months ago

백엔드에서 operand 개수 체크를 잘못 수행해서 생긴 문제입니다. 5월 31일자 백엔드 패치로 수정되었습니다.