Open sbkim28 opened 6 months ago
안녕하세요, interpreter가 spec과 다르게 동작하는 것 같아서 이를 제보하고자 합니다.
다음은 제가 임의로 작성한 LLVM IR 코드입니다.
define dso_local i32 @main() #0 { entry: %vzero = call <4 x i64> @vbcast_i64x4(i64 0) %vone = call <4 x i64> @vbcast_i64x4(i64 1) %vtwo = call <4 x i64> @vbcast_i64x4(i64 2) %vpselect = call <4 x i64> @vpselect_i64x4(<4 x i64> %vzero, <4 x i64> %vone, <4 x i64> %vtwo) %el0 = extractelement <4 x i64> %vpselect, i32 0 call void @write(i64 noundef %el0) %el1 = extractelement <4 x i64> %vpselect, i32 1 call void @write(i64 noundef %el1) %el2 = extractelement <4 x i64> %vpselect, i32 2 call void @write(i64 noundef %el2) %el3 = extractelement <4 x i64> %vpselect, i32 3 call void @write(i64 noundef %el3) ret i32 0 }
이를 컴파일하면 다음을 얻습니다.
start main 0: .entry: r1 = const 0 v1 = vbcast r1 64 r2 = const 1 v2 = vbcast r2 64 r3 = const 2 v3 = vbcast r3 64 v1 = vpselect v1 v2 v3 64 r4 = vextct v1 r1 64 call write r4 r2 = vextct v1 r2 64 call write r2 r2 = vextct v1 r3 64 call write r2 r2 = const 3 r2 = vextct v1 r2 64 call write r2 ret r1 end main
여기서, v2=[1 1 1 1]이고 v3=[2 2 2 2]이고, v2가 두 번째 operand로 사용되었으므로, 이를 실행하면 1 1 2 2가 output으로 나와야 한다고 생각했습니다. 그러나 실제로 실행해보면 2 2 1 1이 나옵니다.
v2=[1 1 1 1]
v3=[2 2 2 2]
1 1 2 2
2 2 1 1
spec에 제시된 바와 다르게, 뒤에 위치한 register의 결과가 앞에 저장되는 것 같은데, 관련해서 해당 문제를 확인해주셨으면 합니다. 감사합니다.
6월 3일자 패치로 수정되었습니다.
안녕하세요, interpreter가 spec과 다르게 동작하는 것 같아서 이를 제보하고자 합니다.
다음은 제가 임의로 작성한 LLVM IR 코드입니다.
이를 컴파일하면 다음을 얻습니다.
여기서,
v2=[1 1 1 1]
이고v3=[2 2 2 2]
이고, v2가 두 번째 operand로 사용되었으므로, 이를 실행하면1 1 2 2
가 output으로 나와야 한다고 생각했습니다. 그러나 실제로 실행해보면2 2 1 1
이 나옵니다.spec에 제시된 바와 다르게, 뒤에 위치한 register의 결과가 앞에 저장되는 것 같은데, 관련해서 해당 문제를 확인해주셨으면 합니다. 감사합니다.