2017-09-16 35 views
2

PowerPC 플랫폼의 -O3에서 IBM XL C/C++를 사용하는 소스 파일에 대해 bad code generation이 발생합니다. 매달린 표면이 보이고 특정 루프가 보이지 않습니다.#pragma GCC와 동등한 IBM XL C/C++

문제는 XL C/C++에서 나타납니다. 우리의 테스트 체제는 소스 파일이 정의되지 않은 동작, 메모리 오류 및 기타 에라타를 깨끗하게 처리하고 있음을 나타냅니다. 또한 소스 파일에 대한 컴파일러의/nstrict 경고를받지 않습니다.

소스 파일을 -O3 대신 -O2에 컴파일하려고합니다. 컴파일러를 위해 적절하게 보호 될 수 있도록 소스 파일에 플러그 므와 같은 도구를 추가하려고합니다. 계측기는 다른 사람들이 Cmake 및 Autotools와 같은 다른 빌드 시스템을 와이어 인 (wire-in) 할 수있게 해주 며, 모든 것들이 "그냥 작동합니다". (필요한 정보는 makefile이 아닌 소스에서 사용 가능합니다.)

컴파일러에 대한 IBM 설명서는 IBM XL C/C++ for AIX, V13.1에 있지만 옵션을 찾을 수 있으면 망할.

#pragma GCC optimize에 해당하는 IBM XL C/C++은 무엇입니까? XL C/C++에 -O3 대신 -O2을 사용하도록 소스 코드를 계측하려면 어떻게해야합니까?

답변

2

해당 소스 파일을 -O2으로 컴파일하는 데 사용할 수있는 IBM XL C/C++ for AIX V13.1 옵션은 #pragma options optimize=2입니다. 그것에 관한 정보는 온라인 here 또는 PDF here에서 찾을 수 있습니다. 이미 명령 줄에 지정된 -O3을 덮어 쓰고 기능 수준에서 제어하려면 #pragma option_override(<your function name>, "opt(level, 2)")을 사용할 수 있습니다. 그것에 대한 정보는 온라인 here 또는 PDF here에서 찾을 수 있습니다. 하나의 소스 파일이 -O3 대신 -O2에 컴파일되도록 Makefile을 수정하여 동일한 결과를 얻을 수도 있습니다.

또한 tea.cpp:27:26으로 시작하는보고 된 오류 메시지가 IBM V7.1 용 IBM XL C/C++에서 왔는지 확인하십시오. 해당 제품의 진단 메시지 형식으로 보이지 않습니다.

스택 오버플로 (xlc로 태그를 지정하면 찾을 수 있음)에 대한 귀하의 의견을 계속 모니터 할 것이지만, 궁금한 점이 있으시면 포럼 (http://ibm.biz/xl-power-compilers-forum)에 올리시면 빠른 응답 시간을 얻을 수 있습니다. IBM 컴파일러 개발 팀이 더 적극적으로 모니터합니다.

+1

고맙습니다. @trudeaun. 나는 당신이 컴파일러 진단에 맞다고 생각합니다. GCC 메시지처럼 보입니다. '-O2'에 관해서 우리는 아픈 부분을 발견했습니다. [Issue 503] (https://github.com/weidai11/cryptopp/issues/503)에서 삭제되었습니다. 내 생각 엔 * "As If"* 규칙 C++ 규칙 - 컴파일러 작성자는 작동하는 프로그램을 작동하지 않는 프로그램으로 변환 할 수 있습니다. – jww

+1

스택 오버 플로우와 IBM 포럼에 대해서는 모니터링 해 주셔서 감사합니다. 나는 토론 계정이 없으며 다른 소셜 네트워크에 가입하지 않기 때문에 장소를 사용할 수 없습니다. IBM이 Google, Facebook 등을 수락하면 좋을 것입니다.하지만 대부분의 회사는 정보를 수집하는 서비스 제공 업체가되고 싶어합니다. 그들은 정보를 포기해야하는 신뢰 당사자가되고 싶지 않습니다. – jww

+1

@trudeaun 다시 한번 감사드립니다. 수동 참조로 어떤 일이 일어 났는지 봅니다. 당신이 지적한 정보는 매뉴얼에 있습니다. 그러나 나는 다른 쪽 끝에서 작업했다 : 441 쪽의 매뉴얼에서'option_override'를 찾았고 441-445 쪽의 최적화 옵션을 찾았다. 문제는''opt (level, 2) ''는 매뉴얼의 해당 영역에서 논의되지 않는다는 것입니다. 다른 최적화는'unroll'과'nounroll'과 같지만''opt (level, 2)''가 아닙니다. 나는 아직도 매뉴얼을 사용하는 방법을 배우고 있다고 생각한다. – jww