llvm ir의 reference에 따르면, i1으로부터의 sign extension의 결과는 항상 -1 또는 0이어야 한다고 되어 있습니다. 그래서 입력으로 1을 입력하면 '%cmp'의 값이 1(true)이 되어 출력으로 -1이 나와야 한다고 생각했습니다. 그러나 실제로 해당 코드를 실행하고 입력으로 1을 주면, -1 대신 1이라는 값이 나오게 됩니다.
현재 백엔드에서 signed extend를 어셈블리로 변환하는 루틴의 문제인데, 대부분의 경우는 문제가 없으나 iN_MIN (이진수 기준 1000...000) 에서는 본래 나와야 하는 연산 결과와 다르게 나오는 문제가 있는 것으로 보입니다.
컴파일러 버그가 맞으며, 수정 예정입니다.
안녕하세요, sext instruction의 operand가 i1일 때 잘못된 결과가 나오는 것 같아서 이를 제보하고자 합니다.
다음은 제가 임의로 작성한 llvm ir 코드입니다.
llvm ir의 reference에 따르면, i1으로부터의 sign extension의 결과는 항상 -1 또는 0이어야 한다고 되어 있습니다. 그래서 입력으로 1을 입력하면 '%cmp'의 값이 1(true)이 되어 출력으로 -1이 나와야 한다고 생각했습니다. 그러나 실제로 해당 코드를 실행하고 입력으로 1을 주면, -1 대신 1이라는 값이 나오게 됩니다.
해당 문제를 확인해주셨으면 합니다. 감사합니다.