Open bean1009 opened 4 months ago
안녕하세요. 조교님.
@arr1 = dso_local global <4 x i64> zeroinitializer, align 16 @arr2 = dso_local global <4 x i64> zeroinitializer, align 16 @arr3 = dso_local global <4 x i64> zeroinitializer, align 16 define dso_local i32 @main() #0 { entry: %0 = load <4 x i64>, ptr @arr1, align 16 %1 = load <4 x i64>, ptr @arr2, align 16 %2 = call <4 x i64> @vincr_i64x4(<4 x i64> %0) %3 = call <4 x i64> @vpadd_i64x4(<4 x i64> %1, <4 x i64> %2) %4 = call <4 x i64> @vpicmp_eq_i64x4(<4 x i64> %2, <4 x i64> %3) store <4 x i64> %4, ptr @arr3, align 16 ret i32 0 } declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1 declare i64 @read(...) #2 declare void @write(i64 noundef) #2 declare <4 x i64> @vincr_i64x4(<4 x i64>) declare <4 x i64> @vpadd_i64x4(<4 x i64>, <4 x i64>) declare <4 x i64> @vpicmp_eq_i64x4(<4 x i64>, <4 x i64>) declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1
이 테스트 케이스에 대하여 alive test를 실행하였을 때, 아래와 같은 오류가 발생하였습니다.
54: alive-tv: /root/llvm-project/llvm/lib/IR/Instructions.cpp:1876: llvm::InsertElementInst::InsertElementInst(Value *, Value *, Value *, const Twine &, Instruction *): Assertion `isValidOperands(Vec, Elt, Index) && "Invalid insertelement instruction operands!"' failed.
%0 = load <4 x i64>, ptr @arr1, align 16 %1 = load <4 x i64>, ptr @arr2, align 16 %2 = call <4 x i64> @vpadd_i64x4(<4 x i64> %0, <4 x i64> %1) store <4 x i64> %2, ptr @arr3, align 16 ret i32 0
위 테스트 케이스에 대해서는 alive test를 실행해도 같은 에러가 뜨지 않아 확인해본 결과 vpicmp_eq_i64x4 부분을 추가하였을 때 오류가 발생하는 것 같습니다. 다만 정확한 문제 원인을 잘 모르겠어 질문드립니다. 감사합니다.
수정된 Alive2 에서 vpicmp intrinsic을 변환하는 로직이 잘못되어 발생한 문제입니다. 다만 벡터 관련해 조금 엮인 문제가 있어서 버그를 같이 해결해 다시 공지할 예정입니다.
vpicmp
네! 감사합니다!
5월 30일자 Alive2 패치에서 해당 문제를 수정하였습니다.
안녕하세요. 조교님.
이 테스트 케이스에 대하여 alive test를 실행하였을 때, 아래와 같은 오류가 발생하였습니다.
위 테스트 케이스에 대해서는 alive test를 실행해도 같은 에러가 뜨지 않아 확인해본 결과 vpicmp_eq_i64x4 부분을 추가하였을 때 오류가 발생하는 것 같습니다. 다만 정확한 문제 원인을 잘 모르겠어 질문드립니다. 감사합니다.