2017-09-16 71 views
2

对于在PowerPC平台上使用IBM XL C/C++ 012her的源文件,我们正在体验bad code generation。它的表面作为一个悬挂,它似乎是一个特定的循环没有被打破。IBM XL C/C++相当于#pragma GCC优化

该问题仅在XL C/C++下出现。我们的测试机制表明源文件清除了未定义的行为,内存错误和其他勘误。我们也没有从源文件的编译器收到严格/不严格的警告。

我们想编译源文件-O2而不是-O3。我们希望将源码文件(如附注)添加到源文件中,以便编译器可以对其进行适当的保护。该工具允许其他人连接Cmake和Autotools等其他构建系统,并且事情对他们来说“正常工作”。 (必要的信息在源代码中可用,而不是在我们的makefile中)。

编译器的IBM手册位于IBM XL C/C++ for AIX, V13.1,但该死的如果我能找到选项。

什么是IBM XL C/C++相当于#pragma GCC optimize?我们如何测试源代码以告诉XL C/C++使用-O2而不是-O3

回答

2

您可用于编译该源文件的IBM XL C/C++ for AIX V13.1选件-O2#pragma options optimize=2。有关它的信息可以在网上找到here或在PDF here。如果您想覆盖已在命令行中指定的-O3,并在功能级别对其进行控制,则可以使用#pragma option_override(<your function name>, "opt(level, 2)")。有关它的信息可以在网上找到here或在PDF here。你也可以通过修改你的Makefile来达到同样的效果,以便在-O2而不是-O3编译一个源文件。

另外,您确定您报告的以tea.cpp:27:26开头的错误消息来自IBM XL C/C++ for AIX V13.1吗?它看起来不像该产品诊断信息的格式。

我们将继续监视在堆栈溢出您的意见(与XLC标记可以帮助我们找到它),但你会发现,如果你对我们的http://ibm.biz/xl-power-compilers-forum其中IBM论坛,发表您的问题就可以得到更快的响应时间编译器开发团队更积极地监控。

+1

Thanks @trudeaun。我认为你对编译器诊断是正确的。它看起来像一个GCC消息。关于'-O2',我们发现了疼痛点。它在[问题503](https://github.com/weidai11/cryptopp/issues/503)被清除。我猜这就是*“As If”*规则C++规则 - 编译器编写者被允许将功能正常的程序变成无法运行的程序:) – jww

+1

关于堆栈溢出与IBM论坛,感谢您的监视。我没有讨论帐户,我也不会加入另一个社交网络,所以我无法使用该场所。如果IBM接受谷歌,Facebook等,那将会很不错。但是我知道大多数公司都希望成为收集信息的服务提供商;他们不想成为必须放弃信息的依赖方。 – jww

+1

再次感谢@trudeaun。我看到手动参考发生了什么。您指出的信息在手册中。但是,我从另一端开始工作:我在第441页的手册中找到了'option_override',然后我开始寻找围绕441-445页的优化选项。问题是,'“opt(level,2)”'在手册的这个区域没有讨论。其他优化如'unroll'和'nameroll',但不是'“opt(level,2)”'。我想我仍然在学习使用手册。 – jww