LLVM 플러그인을 작성하여 각 함수 선언에 대해 함수가 가질 수있는 범용 레지스터, XMM 레지스터 및 스택 인수 수를 지정하고 싶습니다. x86 SYSV 호출 규칙에서만 작동하면됩니다. 현재 가능합니까? 그렇다면 모든 방향이 가장 중요합니다.LLVM : 함수 인수 위치 얻기 (ABI)
1
A
답변
0
가능하지만 약간 까다 롭습니다. LLVM은 시스템 특정 코드를 망칠 때보 다 IR을 조작 할 때 훨씬 더 우호적 인 것처럼 보입니다. 패스를 추가하는 쉬운 방법은 없습니다. 또한 사용되는 최종 레지스터 수는 가상 레지스터가 실제 x86 논리 레지스터에 할당되는 방식에 따라 달라지며 일부 경우에는 유출이 발생할 수 있고 다른 경우에는 일부 변수가 제거됩니다. 따라서 값이 SSA 형식 인 IR에서 작업하지 못하게 할뿐 아니라 실제로 CodeGen의 마지막 단계에서 작업해야합니다. 더 재미있는 일을하기 위해서, 당신이 사용하는 최적화 수준에 달려 있습니다. 체크 아웃 - llvm/lib/CodeGen/Passes.cpp, addOptimizedRegAlloc 또는 addFastRegAlloc에서 전달 된 호출 된 내부를 체크 아웃하고 마지막 액션 (CodeGen의 별도 파일로 구현 됨)을 사용하여 타기하십시오. 내부 루프는 꽤 솔직해야하지만, TargetRegisterInfo에 열거 된 X86 대상 등록부를 기반으로하여 부기를 실행해야합니다.
관련 문제
- 1. 함수 이름과 인수 얻기
- 2. GCC 4.0, 4.2 및 LLVM ABI 호환성
- 3. 는 위치 인수
- 4. LLVM 명령어의 피연산자 얻기
- 5. 파이썬 - 데코레이터의 원래 함수 인수 얻기
- 6. 콜 스택 주소에서 함수 인수 얻기
- 7. 부스트에서 인수 목록 얻기 : Python 함수
- 8. 올바른 C 함수 인수 변수 정의 위치
- 9. LLVM 2.8에서 LLVM 비트 코드 함수 호출
- 10. LLVM 내장 함수
- 11. LLVM IR 람다 함수
- 12. LLVM jit에서 함수 인라이닝
- 13. 루프의 함수 인수 인수
- 14. 함수 인수
- 15. 함수 인수
- 16. 함수 인수
- 17. 얻기 위치
- 18. 리눅스 커널 모듈 ABI (x86)
- 19. LLVM : 포인터의 함수 속성 설정
- 20. 함수 반환 값 얻기
- 21. CABasicAnimation에서 축척 인수 얻기
- 22. 명령 줄에서 인수 얻기
- 23. 정규 표현식에서 인수 얻기
- 24. 메서드의 인수 얻기
- 25. 얻기 인수 수
- 26. argparse의 나머지 인수 얻기
- 27. Rhino에서 평가 된 JS의 함수 이름과 인수 얻기
- 28. 함수 인수로 std :: array의 두 번째 인수 (크기) 얻기
- 29. 함수 포인터로 함수 인수 설정
- 30. 스택 핸들 함수 함수 인수