snu-sf-class / swpp202401

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

[Project] Backend error: unable to parse arg1 as VectorRegister #153

Open grace0068 opened 5 months ago

grace0068 commented 5 months ago

안녕하세요, 백엔드 에러를 찾아 제보하고자 합니다.

define <4 x i64> @test_vector_add_sub(<4 x i64> %vec) {
entry:
  %brd = call <4 x i64> @vbcast_i64x4(i64 2)
  %add1 = add <4 x i64> %vec, %brd
  ret <4 x i64> %add1
}

declare <4 x i64> @vbcast_i64x4(i64)

위 코드를 실행하면 백엔드에서 다음과 같은 exception이 발생합니다.

swpp-compiler crashed: exception thrown from backend
unable to parse arg1 as VectorRegister
[  %add1 = add <4 x i64> %brd, %vec]

148 의 에러와 비슷한 종류로 생각되어 emitter.cpp의 line 398을 수정하였으나 해결되지 않았습니다.

함수 인자로 vector가 주어질 때 발생하는 에러로 추정됩니다.

확인 부탁드립니다 .감사합니다.

grace0068 commented 5 months ago

추가적으로 다음 코드에서도 다른 종류의 에러가 발생함을 확인하였습니다.

define <4 x i64> @test_vector_add_sub() {
entry:
  %a = call <4 x i64> @vbcast_i64x4(i64 2)
  %eq = call <4 x i64> @vpicmp_eq_i64x4(<4 x i64> %a, <4 x i64> %a)
  %add1 = add <4 x i64> %a, %eq
  ret <4 x i64> %add1
}

declare <4 x i64> @vpicmp_eq_i64x4(<4 x i64>, <4 x i64>)
declare <4 x i64> @vbcast_i64x4(i64)
swpp-compiler crashed: exception thrown from backend
unable to parse as ScalarRegister
(unable to parse v2 as ArgumentRegister)
[  ret <4 x i64> %add1]

이번 에러는 return 값이 vector일 때 발생하는 에러인 것 같습니다. 비슷한 결의 에러로 생각되어 같이 올립니다.

strikef commented 5 months ago

@grace0068 답변이 늦어져서 죄송합니다.

  1. (제공되는 intrinsic을 제외한) 일반적인 함수는 arg1~arg16 레지스터에 호출 당시 인자들이 들어가야 하기 때문에 vector를 인자로 받는 함수를 사용할 수 없습니다. 이는 버그가 아니며, 수정 예정이 없습니다.

  2. 마찬가지로 ret 도 operand로 scalar register만을 받을 수 있기 때문에 vector를 반환하는 함수를 사용할 수 없습니다. 이 또한 수정 예정이 없습니다.